Teks buku anak-anak Beruang Kutub, Beruang Kutub, Apa yang Kamu Dengar? memiliki pola yang sangat sederhana. Anda mungkin menggunakan teks untuk mengajarkan konsep pemrograman pengantar.
Anak saya cepat bosan dengan ide ini, jadi saya memutuskan untuk bermain golf dengannya.
Tantangan
Dalam bahasa pemrograman pilihan Anda, tulislah program sekecil mungkin yang akan mencetak teks berikut. Output harus sama persis, termasuk case, spasi, dan tanda baca.
Polar Bear, Polar Bear, what do you hear?
I hear a lion roaring in my ear.
Lion, Lion, what do you hear?
I hear a hippopotamus snorting in my ear.
Hippopotamus, Hippopotamus, what do you hear?
I hear a flamingo fluting in my ear.
Flamingo, Flamingo, what do you hear?
I hear a zebra braying in my ear.
Zebra, Zebra, what do you hear?
I hear a boa constrictor hissing in my ear.
Boa Constrictor, Boa Constrictor, what do you hear?
I hear an elephant trumpeting in my ear.
Elephant, Elephant, what do you hear?
I hear a leopard snarling in my ear.
Leopard, Leopard, what do you hear?
I hear a peacock yelping in my ear.
Peacock, Peacock, what do you hear?
I hear a walrus bellowing in my ear.
Walrus, Walrus, what do you hear?
I hear a zookeeper whistling in my ear.
Zookeeper, Zookeeper, what do you hear?
I hear children...
...growling like a polar bear,
roaring like a lion,
snorting like a hippopotamus,
fluting like a flamingo,
braying like a zebra,
hissing like a boa constrictor,
trumpeting like an elephant,
snarling like a leopard,
yelping like a peacock,
bellowing like a walrus...
that's what I hear.
code-golf
string
kolmogorov-complexity
aaaantoine
sumber
sumber
B
danC
dalamPolar Bear
danBoa Constrictor
perlu? (Dalam Batch ini biayanya 10% dari jumlah byte saya ...)Jawaban:
05AB1E,
349331330322314311 byteCobalah online
Penjelasan
•4i;kV_†©:š×Îj€Yå—‚‘%˜ESδþ¤çÑ9¶‹{Å€7¾à{Ì®qA•
String dikemas berisi suara
GROWL0ROAR0SNORT0FLUT0BRAY0HISS0TRUMPET0SNARL0YELP0BELLOW0WHISTL
35B0¡…ing«lV
Buka kemasan, pisah 0, tambahkan "ing" ke setiap kata, konversikan menjadi lebih rendah dan simpan dalam variabel Y
•7ü[¿‘¢wÀ¶à-‚¤î„jHâ™ÐJ'µ‡ÀÂý6›ü‚š¸€%NtÅýµL›fU¥ì€€uîT¡›Ÿ{!œ>'Ì&ý§¨Ü?é>•
String yang dikemas berisi binatang
POLAR1BEAR0LION0HIPPOPOTAMUS0FLAMINGO0ZEBRA0BOA1CONSTRICTOR0ELEPHANT0LEOPARD0PEACOCK0WALRUS0ZOOKEEPER
36B1ð:0¡™
Buka kemasan, ganti 1 dengan spasi, pisah 0 dan konversi ke judul huruf
D©„, «D‚ø
Gandakan, simpan untuk mendaftar untuk digunakan nanti, tambahkan "," ke satu salinan, duplikat itu dan zip.
“€À€·€î—«?“¶«¸
Kata-kata kamus "apa yang Anda dengar?", Diikuti oleh baris baru, ditambahkan ke daftar baru
‘€JU
Produk Cartesian dari daftar "Hewan, Hewan," dan "apa yang Anda dengar? \ N", diratakan dan bergabung dan simpan dalam variabel X. Pruduces daftar string dari bentuk "Hewan, Hewan, apa yang Anda dengar? N ".
¦“„¾“‚˜l
Ambil daftar hewan tersisa dari sebelumnya, keluarkan penjaga kebun binatang dan tambahkan anak-anak, konversi ke huruf kecil.
v
Untuk setiap hewan:
Tekan "Saya dengar0 di telingaku.", Bagi pada 0 dan tekan sebagai string terpisah.
yð«Y¦õ‚˜Nè«
Dorong "suara binatang" dengan anak-anak yang tidak memiliki suara
sr„ a
Tekan "a" di tempat yang benar
N5Qi'n«}
Jika hewan itu "Gajah", tambahkan "n"
ð«
Tambahkan ruang.
N9›ijrj¨ðs«…...«}
Jika hewan adalah anak-anak, hapus spasi dan tambahkan "..."
srJˆ}
Bergabung dengan kalimat "Saya mendengar suara binatang di telingaku." (dan juga anak-anak), simpan dalam array global dan akhir lingkaran
X¯‚ø€J
Ambil kembali baris pertama, ritsleting dan bergabunglah memproduksi bagian pertama dari sajak "Hewan, Hewan, apa yang Anda dengar? \ NSaya mendengar suara binatang di telingaku."
vy,¶?}
Cetak diikuti oleh baris baru.
…...DU?
Cetak "..." dan simpan salinan dalam variabel X.
Y¨v
Untuk setiap suara kecuali "siulan":
N__i ', ¶} Untuk setiap baris kecuali yang pertama, mulailah dengan ", \ n" (membuat koma masuk ke baris sebelumnya)
yð“€è€…“
Mendorong suara, ruang, dan "seperti"
N6Qi'n«}
Jika Gajah menambahkan "n".
ð®NèJl?}X,
Ambil kembali hewan yang disimpan dalam register, gabungkan semuanya, cetak dan akhiri lingkaran diikuti oleh "...". Ini menghasilkan garis "terdengar seperti binatang (n),".
“€Š's€À I—«.“?
Cetak string kamus "itulah yang saya dengar."
sumber
PHP,
420414434414412 bytepanggilan dari CLI atau tambahkan
<pre>
ke output.kerusakan
sumber
JavaScript,
545541497 byteTantangan yang cukup menyenangkan!
Terima kasih Downgoat karena telah menyelamatkan saya
27ton byte menggunakanatob
, dan Titus untuk 4 byte!Tidak Disatukan:
sumber
a.map((n,m)=>n>9||(p+=s[n]...))
c=console.log;
di awal kemudian gunakan c () untuk menyimpan 6 byte. Atau cukup simpan string dalam variabel dan cetak sekali dengan tanda ().c=console.log
tidak bekerja karenalog
harus memilikithis
dariconsole
atau menghasilkan kesalahan. (Kecuali jika tidak ada di beberapa browser / lingkungan?) Gagasan untuk memasukkan semuanya ke dalam string terdengar bagus,/// ,
523512 byteCobalah online!
608 byte kurang dari pesan sebenarnya (1120), ini kurang dari setengahnya (560)!
sumber
Dyalog APL , 387 byte
Untuk memudahkan membaca:
⎕UCS¯2(219⌶)¯128+⎕UCS'
...'
⎕UCS '
...'
konversi string ke titik kode Unicode¯128+
kurangi 128 untuk mendapatkan -128 ≤ n ≤ 127¯2(219⌶)
un-zlib⎕UCS
mengonversi poin kode Unicode ke stringString sumber adalah 365 byte poin kode Unicode zlib'ed berikut:
sumber
Python 3,
497484480 byte(Kredit untuk 13 byte yang disimpan harus ke Gábor Fekete, dan tambahan 4 byte disimpan oleh Taylor Lopez.)
Jadi Anda mungkin bisa menebak saya akan menggunakan bahasa seperti Python sebagai alat pengajaran. Ini adalah program sebelum saya mulai bermain golf.
sumber
a=A[i]
menjadia,b=A[i]
lalu Anda bisa menulisa
danb
bukannyaa[0]
dana[1]
. Ini akan menghemat 12 byte.N=lambda m:("a","an")["E"==m[0]]+" "+m.lower()
keN=lambda m:"an"[:("E"==m[0])+1]
dann=a[0]+", ";P(n+n+"what do you hear?")
untuka+=", ";P(a+a+"what do you hear?")
akan menghemat 2 byte lebih banyak.len(A)
, karena tujuan dari tantangan ini adalah hanya untuk menghasilkan output statis (tidak berurusan dengan input dinamis), apakah dapat diterima untuk menggunakan hard-coded11
bukan untuk menghemat byte?Pyth -
427384 BytesCoba di sini - permalink
sumber
ing
? Aku jadi gila melihat PHP mengalahkan Pyth.a elephant
.C #,
575525520526507504497494493 byteC # lambda di mana outputnya adalah a
string
.Penjelasan
t
sebagai string dengan formatnoise,animal,noise,animal,...
dan dibagi dengan,
.r
dans
.r
adalah bagian pertama dari lagu dans
bagian terakhir.z
dan din
sini untuk menanganiElephant
.t
dan bangunr
dans
dalam satu lingkaran yang sama. Barang-barang terner aneh + yang diinterpolasi.Kode
Cobalah online!
sumber
Python 2 - 454 byte
sumber
R
518509482477474465452456 byteTautan ke R-Fiddle untuk mencoba kode
children
dari vektora
, dan singkirkan entri yang sesuai dalamd
vektor untuk menghemat 8 bytechildren
, menyimpan lebih lanjut 27 byte.tolower
fungsinya, menyimpan 5 bytewriteLines
dengancat
dan diformat ulang dengan tepat (ditambahkan\n
di beberapa tempat) yang disimpan 3 byted
hanya 7 elemen yang bukan 11 penuh, R hanya akan mengulang kembali ke awal. 11 <14 maka ini bekerja untuk kita. Disimpan 9 byte.cat
fungsi terpisah dengan" "
, diubah kembali kewriteLines
. Menambahkan 4 byte (cat
dapat diperbaiki dengan menambahkan,sep=""
fungsi)sumber
' '
sebelum setiap itema
setelah"Polar Bear"
. Apakah ini normal?C #,
592572 BytesBersenang-senang menghadapi tantangan ini dengan rekan saya! Terima kasih untuk idenya.
Diformat:
EDIT: Terima kasih atas tips Anda yang luar biasa dan banyak, mereka banyak membantu dan saya akan mencoba membuat yang lain juga bekerja.
sumber
new[]
sebagai gantinya.new string[]
Anda juga dapat menjadikan ini sebagai fungsi anonim seperti pada jawaban @ aloisdga elephant
perangkap (saya juga melakukannya). Itu adalahan elephant
;)Batch,
650647 byteKarena
%*
Batch adalah hal yang terdekat dengan array. Jika saya dapat menggunakanPolar bear
danBoa constrictor
kemudian saya dapat menghemat 10% ... tapi saya masih lebih dari 50% dari teks asli ...Sunting: Disimpan 3 byte dengan pengaturan
e=echo(
dengan(
bukan spasi, yang memungkinkan saya untuk menggunakannya untuk menggemakan baris kosong, meskipun saya kemudian harus menulis@echo off
secara penuh.sumber
Bash + zcat, 402 byte
Just a joke:
skrip bash 2 baris yang mengekor sendiri dan menyalurkan baris kedua ke zcat.
Baris kedua adalah teks yang di-gzip.
Cara mempersiapkannya: semua teks dalam file
a
. KemudianFile yang dibuat saat dieksekusi mengembalikan teks awal, 402 Bytes.
sumber
tail -n+2 \$0|zcat;exit
diikuti oleh baris baru dan string biner 379 byte (versi teks yang diusulkan gzip). Apakah Anda tahu alasan downvote? (Ini adalah prosedur semi standar untuk bash self menginstal skrip dengan arsip di dalamnya, IMHO tidak begitu berbeda dari penggunaan perpustakaan di c ++).zcat
), jadi header Anda harus ( Bash + coreutils, 402 bytes ) alih-alih ( Bash (dengan zcat) 402 ). Dan, bisakah Anda mengedit jawaban Anda (cukup tambahkan<!>
di akhir posting Anda)? Saya ingin menghapus downvote> :(zcat
bukan dari coreutils, ia datang dengangzip
. Dalam banyak sistem adalah skrip dengan panggilan itugzip -cd "$@"
... BTW I dimodifikasi dalam Bash + zcat, 402 byte.F #,
591589579576573567552 byteIni adalah percobaan pertama saya di golf kode dengan bahasa yang saya suka. Saya yakin ada beberapa cara ini bisa dibuat lebih pendek. Berjalan di FSI, jadi tidak perlu .NET boilerplate.
Sunting: Dicukur 10 byte dengan menghapus
\r
. Itu masih membuat baik di VSCode jadi pergi mencari. Potong tiga byte lagi dengan komposisi fungsi, dan tiga byte lainnya dengan lambda, lalu enam dengan for loop, bukan Seq.iter (singkirkan lambda). Akhirnya 15 byte dipotong dengan mengatur ulanga(s:string)
sumber
Emacs Lisp, 576 (621) byte
Saat memperbaiki "gajah", dibutuhkan sedikit lebih lama:
Tidak Disatukan:
sumber
^[aeiou]
menjadi^e
, bukan?C, 596 byte
Panggil
f()
tanpa argumen. Ini bukan golf terbaik di dunia, saya mungkin bisa menyusut lebih banyak.Cobalah di ideone.
sumber
a[99][99]
->**a
(-6). Anda tidak dapat meneleponf()
tanpa argumen di sini, Anda memerlukann
. Gantif(n){
denganf{n;
. -1 lain di sini. Juga,f()
sekarang bisa dipanggil.**a
berarti array array karakter (atau penunjuk pointer karakter), dan, bagi saya, itu selalu berfungsi (gcc 4.8). Kompiler apa yang Anda gunakan? Jika Anda tidak menggunakan gcc, Anda harus menentukannya. Jika Anda menggunakan gcc, itu default.a[99][99]
dengana[<how many elements do I modify?>+1][<what is the maximum length of any string in here?>+1]
.Python 3,
442441 byteungolfed:
Pada dasarnya, hanya satu lingkaran yang membangun dua string yang mewakili dua bagian dari cerita. The
'n'[:'el'in n]
menangani para "sebuah" untuk gajah. The[44:-30]
daging off terkemuka "Saya mendengar beruang kutub menggeram di telingaku" dan trailing "bersiul seperti zookeeper sebuah".sumber
QB64 (QuickBASIC), 581 byte
Kode sedikit mengembang ketika Anda melemparkannya ke dalam interpreter, tetapi file sumber ini valid untuk memuat apa adanya. Jika Anda ingin melihat keseluruhan output sebelum bergulir, maka Anda perlu menambahkan
width 80,46
pernyataan di awal.sumber
GOSUB
/RETURN
bukannyaCALL
/SUB
/END SUB
. Anda juga dapat memasukkan tanda kutipDATA
untuk semua entri yang tidak memiliki spasi di dalamnya. Akhirnya, karena hanya ada satu hewan yang dimulai dengan vokal,A$="Elephant"
sebenarnya 1 byte lebih pendek dariLEFT$(A$,1)="E"
. Penggunaan yang bagusRESTORE
, BTW!LUA 535 byte
ungolfed:
Cobalah online
sumber
PHP, 366 byte
Jawab malas, tapi mengapa menulis dekompresor khusus ketika gzip tersedia?
Hex dump kode PHP (dapat disimpan dengan xxd -r )
Saya menggunakan beberapa iterasi zopfli untuk mengonversi teks sumber menjadi 349 byte data terkompresi, menghindari karakter 'yang seharusnya harus melarikan diri dengan backslash.
sumber
Japt ,
308303299295288280294289286 byteBerisi banyak hal yang tidak patut; ikuti tautan di bawah ini untuk melihatnya.
Menguji
+14 byte karena saya telah mengacaukan garis walrus; perlu mengambil lagi lulus minggu depan untuk melihat apakah saya bisa mendapatkan semua byte itu kembali.
sumber
Powershell
921889886898 Bytesitu tidak sempurna, tetapi menghemat 300 Bytes :)
EDIT: Terima kasih Jonathan Frech, saya menyimpan 32 Bytes. Dan terima kasih Veskah untuk mengoreksi Output.
sumber
ö
lebih efisien byte?ö
hanya direpresentasikan menggunakan byte tunggal dalam beberapa codepages, UTF-8 membutuhkan dua byte untuk karakter ini.an elephant
Ada juga garis tambahan antara bait sebelumnya yang dapat dihapus dengan menghapus"n"
.clojure, 526 bytes
Inilah upaya awal saya. Harus menyukai format dan betapa tidak terbacanya. Semoga peringatan dari
use 'clojure.string
dapat diterima.Cobalah online.
Kode yang diformat:
sumber
Java,
571 555538 atau 516 BytesTetapi hanya 516 byte yang diperlukan untuk mendapatkan hasil dalam JShell
sumber
an
vsa
.. Saya telah memperbaiki dan memasukkannya ke 507 bytei
dengan0
sampai10
berubahb=a[i-1]
denganb=a[i++]
dan menghapus kenaikan di mana saat ini.Swift2, 519 byte
sumber
Haskell
537499497 BytesMenggunakan konvensi bahwa solusi tidak dapat dieksekusi, hanya menghasilkan output melalui beberapa fungsi, ini dapat disingkat menjadi 479 Bytes. Outputnya di
g
:sumber
C (dentang) , 552 byte
Cobalah online!
sumber
Perl 5 , 413 byte
Cobalah online!
sumber
JavaScript, 424 byte
Menguji
sumber
Pyth, 342 byte
Cobalah online di sini .
Penjelasan untuk diikuti.
sumber