Buat fungsi dalam bahasa yang Anda pilih yang mencetak yang berikut:
Old MacDonald had a farm, E-I-E-I-O,
And on that farm he had a cow, E-I-E-I-O,
With a moo moo here and a moo moo there,
Here a moo, there a moo, everywhere a moo moo,
Old MacDonald had a farm, E-I-E-I-O!
Di mana cow
dan di mana moo
string dalam parameter fungsi, dan karenanya, dapat diubah ke pig
dan oink
atau sheep
dan baa
, misalnya.
Ini harus memperhitungkan huruf kapital, tanda hubung, tanda baca, spasi, dan jeda baris.
Bertujuan untuk mengetik jumlah karakter Unicode paling sedikit dalam kode Anda.
code-golf
kolmogorov-complexity
function
rybo111
sumber
sumber
echoes the following
. Apakah maksud Anda fungsi harus mencetaknya atau mengembalikannya?a oink
atau harus dibuatan oink
?Jawaban:
Javascript ES6 - 204
Bukan yang lebih pendek tapi mungkin yang paling membingungkan.
Jika browser Anda tidak mendukung ES6:
Copy / Paste kode tersebut ke konsol browser Anda dan coba
f('cow','moo')
,f('pig','oink')
,f('sheep','baa')
Bagaimana itu bekerja ?
c
adalah deretan 29 huruf plus hewan dan suaranya (sebut saja ini alfabet kami ).Jadi, semua 31 karakter cocok dalam 5 bit (2 ^ 5 = 32).
Karakter Unicode panjangnya 16 bit, sehingga dapat mengkodekan 3 karakter alfabet kami dengan padding bit.
Teks lengkap dengan baris baru adalah 186 karakter alfabet kami , dapat dikodekan dengan 62 karakter Unicode.
Misalnya,
Old
dikodekan seperti ini:Jika Anda memiliki masalah untuk membaca beberapa karakter Unicode, instal font Code2000
sumber
"cow"
dan"moo"
seharusnya menjadi parameter fungsi. Dengan membuat penelepon melewati array, Anda menyimpan karakter dalam definisi fungsi dengan mengorbankan penambahan ke jumlah karakter kode panggilan. Baunya seperti curang bagi saya. Mengambil bahwa pendekatan yang ekstrim Anda bisa menentukanfunction f(a){alert(a)}
(23 karakter) dan mengatakan bahwa itu harus disebut sepertif("Old MacDonald had a ...")
.CJam - 142 / GolfScript - 144
Penggunaan:
"cow""moo"F
Untuk GolfScript ganti
'|
dengan"|"
danA
dengan10
Penjelasan:
Bagian kuncinya adalah
A,{`/\*}/
:A,{...}/
mengeksekusi blok untuk setiap angka dari 0 hingga 9 (A = 10)`
mengubah angka/\*
menjadi string yang diganti string: jika kita memiliki di stack"bar" "foo 1 baz" "1"
kemudian/
membagi string yang dihasilkan["foo " " baz"]
,\
menukar array ini dengan item sebelumnya ("bar") dan*
bergabung dengan array yang menghasilkan"foo bar baz"
Jadi kode tersebut menggantikan setiap angka dalam string utama dengan string yang sebelumnya ada di stack. Kami memiliki hewan dan suaranya, lalu "memiliki", "a", dll dan akhirnya ", EIEIO" dan string utama, "10, ...!". Untuk menghindari menggunakan terlalu banyak tanda kutip, saya meletakkan semua string (kecuali parameter) dalam satu string, kemudian membaginya dan membuang array yang dihasilkan (
'|/~
)String utama melewati transformasi berikut:
ganti
"0"
dengan", E-I-E-I-O"
:ganti
"1"
dengan"Old MacDonald765"
:ganti
"2"
dengan"here"
, lalu"3"
dengan"68 8"
dll.8 sesuai dengan suara, dan 9 untuk binatang.
sumber
E-I-
berupa string yang kemudian diulang? :)Bash + iconv, 128 karakter Unicode
Membawa tubuh fungsi pure-bash / ascii di bawah ini dan melakukan reverse-encode ke karakter unicode:
Menentukan fungsi shell
m
. Panggil sebagai:Bash murni, 171 byte (hanya ascii)
Saya pikir perlu dicatat bahwa ayat aslinya (dengan "sapi" dan "moo") hanya 203 karakter.
Menentukan fungsi shell
m
. Panggil sebagai:sumber
C ++ (403)
Baiklah, ini agak sulit, tetapi siapa yang tidak suka mendefinisikan-terlalu?
sumber
#define X define
dan kemudian digunakan#X Y Z
. Sedihnya, hari-hari IOCCC yang memabukkan itu sudah lama berlalu ...+
bukan<<
? Atau menggunakanchar*
bukanstring
? // Hanya satu yang bisa digunakan secara bersamaan.Python, 116 karakter Unicode
StackOverflow memakan karakter khusus saya, jadi inilah file di base64:
Data dikemas menggunakan zlib, yang secara efisien mengkodekan string yang diulang (zlib bagus dalam mengompresi teks pada umumnya). Untuk mengambil keuntungan dari aturan "karakter Unicode", potongan zlib 121-byte diisi dan dibelah dua menjadi string Unicode 61-karakter dengan menginterpretasikan bytestring sebagai UTF-16.
Panggil fungsi sebagai
sumber
.decode('zip')
.)Python, 217
Anda tidak bisa bermain golf sebanyak ini. Saya hanya mengambil pengulangan front-end terang-terangan dan ...
Javascript, 241 - Cheat JSCrush
Membuat ini dengan JSCrush ... bukan jawaban yang benar-benar nyata, itu hanya akan menarik untuk melihat apakah ada yang bisa mengalahkan ini dalam bahasa mainstream. ( EDIT : uh)
sumber
Jawa, 246
Pemakaian:
f(new String[]{"cow","moo"});
sumber
Jawa -
262258Optimalisasi lebih lanjut sangat mungkin dilakukan.
sumber
Perl 5 (UTF-8) - 131 karakter, 313 byte
Skrip di bawah ini perlu disimpan sebagai UTF-8 tanpa BOM.
Penggunaan:
f("cow", "moo");
.Perl harus dijalankan dengan
-M5.010
bendera untuk mengaktifkan fitur Perl 5.10. ( Ini diizinkan .)Saya sangat menyukai simetri jumlah karakter (131) dan byte byte (313). Ini sangat Yin dan Yang.
Perl 5 (ASCII) - 181 karakter, 181 byte
Penggunaan:
f("cow", "moo");
.Sekali lagi, perl perlu dijalankan dengan
-M5.010
flag untuk mengaktifkan fitur Perl 5.10.sumber
CJam (non-ASCII) - 77 karakter
Pemakaian:
"cow""moo"F
String tersebut adalah solusi CJam saya yang lain yang dikonversi dari base 127 ke base 56000. Lokal
UTF-8 mungkin diperlukan.
Omong-omong, sekarang Anda dapat mencoba ini secara online di http://cjam.aditsu.net/
sumber
JavaScript: 152 karakter / ES6: 149 karakter
Berikut adalah fungsi JS yang disebut "z" yang melakukan pekerjaan dalam 214 karakter. (jangan lakukan itu!)
Saya "mengemas" dalam karakter unicode menggunakan teknik yang dibuat oleh @subzey dan I untuk 140byt.es).
jalankan potongan terakhir itu, lalu panggil
z("cow","moo")
, dan Anda akan mendapatkan string ini:Info lebih lanjut di sini: http://xem.github.io/golfing/en.html#compress
Versi ES6:
sumber
C # - 339 Bytes
Pemakaian:
x("cow","moo");
sumber
Rebol,
206202Pemakaian:
f "cow" "moo"
sumber
Delphi XE3 (
272252)Tidak disatukan
sumber
Lua 237
Dengan mendefinisikan
c=b.." "..b
, saya dapat menyimpan selusin karakter. Dengan mendefinisikand
seperti yang saya lakukan, saya menyimpan 23 karakter. Saya tidak mengerti bagaimana saya bisa mempersingkat ini lagi. Ini disebut viaf("<animal>","<sound>")
.sumber
Java 8 (411)
Menyalahgunakan lambda, memasukkan penggantian dalam LinkedhashMap untuk menjaga mereka dalam urutan yang ditentukan kemudian menggunakan lambda foreach untuk mengganti kunci dengan nilai dalam String utama. parameter ditambahkan sebagai 2 penggantian terakhir di peta. argumen varargs adalah untuk memangkas beberapa byte di header metode
Versi tidak disatukan:
sumber
JavaScript 220
Dipanggil oleh
sumber
Pure C, 298 bytes, tidak ada unicode
Dalam fungsi saya, saya mengambil satu argumen, yang sebenarnya adalah sekelompok yang
char*
dikemas bersama. Setiap string diakhiri nol, dan ada terminator null tambahan di akhir. Ini memungkinkan saya untuk memeriksastrlen(a)
di akhir setiap loop, daripada menjaga variabel counter.mcdonald.c:
main.c:
Keluaran:
sumber
Cobra - 203
Bahkan untuk bahasa dengan sedikit-ke-tidak multi-lapisan, dan aturan lekukan yang ketat, Cobra masih cukup baik.
sumber
C: 224 byte
Dengan menggunakan specifier presisi printf , kita dapat menggunakan string yang sama seperti string format printf dan sebagai dua parameter.
Dengan spasi putih dan tali terbagi menjadi beberapa baris:
sumber
PHP - 272 karakter, 272 byte
Penggunaan:
m("cow", "moo");
,m("fox", "Hatee-hatee-hatee-ho");
Parameter dengan
@#%^<>&*(
crash output.sumber
Haskell (282 dan masih bisa dibaca :))
Berkas:
sumber
wc -c
, tetapi saya lebih suka menggunakan mothereff.in/byte-counter dan memastikan tidak ada garis kosong di bagian akhir kecuali diperlukan program untuk bekerja.ES6, 2 solusi dari
179186 karakter tanpa unicodeDan yang kedua:
Saya telah menambahkan panggilan lansiran (+7 karakter).
sumber
JavaScript (E6) 140 karakter
Penghitung karakter: https://mothereff.in/byte-counter , 140 chars, 425 bytes di UTF-8
Kode ASCII asli 188 byte
Dikompresi dengan http://xem.github.io/obfuscatweet/
Tes di konsol FireFox / FireBug
Keluaran
sumber