pengantar
Lagu masa kecil Eeny, meeny, miny, moe sering digunakan untuk memilih siapa "itu" ketika bermain tag. Semua orang akan berdiri dalam lingkaran dan menunjuk satu orang yang dipilih secara acak. Mereka akan bernyanyi:
Eeny, meeny, miny, moe,
Tangkap kaki harimau.
Jika dia berteriak, biarkan dia pergi,
Eeny, meeny, miny, moe.
Ketika mereka menyanyikan setiap kata, mereka menunjuk orang berikutnya dalam lingkaran. Orang yang diarahkan ketika "moe" terakhir dinyanyikan akan menjadi "itu". Anak-anak akan segera berdiri dan berpencar.
Tujuan
Laksanakan program terpendek dalam byte yang mengambil input, jumlah anak, dan daftar kata-kata yang dinyanyikan ketika mereka diarahkan.
Pemenang akan dipilih dalam satu minggu.
Memasukkan
Dari STDIN, bilangan bulat tunggal, positif, jumlah anak. Ini mungkin lebih dari jumlah kata dalam lagu.
Keluaran
Menulis untuk STDOUT daftar di mana setiap baris mewakili anak dan berisi kata dinyanyikan saat mereka sedang diarahkan. Jika ada terlalu banyak anak, baris kosong mungkin dihilangkan.
Persyaratan
- Selalu mulai dengan anak pertama.
- Tampilkan kata-kata tanpa tanda baca.
- "Moe" terakhir harus ditekankan sebagai "MOE!" termasuk tanda baca.
Contoh
Memasukkan
3
Keluaran
Eeny moe tiger toe hollers go miny
meeny Catch by If let Eeny MOE!
miny a the he him meeny
Memasukkan
7
Keluaran
Eeny by him
meeny the go
miny toe Eeny
moe If meeny
Catch he miny
a hollers MOE!
tiger let
Memasukkan
1
Keluaran
Eeny meeny miny moe Catch a tiger by the toe If he hollers let him go Eeny meeny miny MOE!
Memasukkan
21
Keluaran
Eeny
meeny
miny
moe
Catch
a
tiger
by
the
toe
If
he
hollers
let
him
go
Eeny
meeny
miny
MOE!
sumber
Jawaban:
TeaScript , 82 byte
Dekompresi, chunk, transpose, gabung, output.
Penjelasan
Cobalah online
Non-bersaing 81 byte
Tidak
α
dirantai.
jadi saya harus memperbaiki bug inisumber
Pyth,
1038984 karakterDisimpan 18 byte dengan kompresi string, terima kasih kepada @Dennis dan @FryAmTheEggman
Menyimpan byte lain berkat @isaacg
Peringatan: ada banyak unsintables dalam kode; gunakan tautan di bawah untuk mencobanya.
Cobalah online | Suite uji
Mungkin bisa bermain golf. Saran diterima!
Bagaimana itu bekerja
sumber
Eeny meeny miny
entah bagaimana seharusnya menghemat beberapa byte. Juga, Pyth memiliki dua built-in untuk kompresi (de) (.Z
dan."
).."
simpan 14 byte!FNQ
==VQ
, omong-omong.Jelly, 84 byte
Cobalah online!
sumber
JavaScript (ES6), 167 byte
Penjelasan
sumber
l=Array(n).fill``
berhasil karena suatu alasan?Haskell,
160157 byteTergantung
"Eeny meeny miny "
pada bagian lain ("moe Catch ..."
dan"MOE!"
), gabungkan kedua string, pisahkan menjadi kata-kata, ambil potongan dengan ukuran yang diperlukan, transpos dan gabungkan lagi menjadi satu string.@Mauris menemukan 3 byte dengan memfaktorkan substring umum "Eeny meeny miny" dan membuat
f
pointfree.sumber
s="Eeny meeny miny "
menghemat beberapa byte.f=unlines.map unwords.transpose.(`chunksOf`(["moe Catch a tiger by the toe If he hollers let him go","MOE!"]>>=words.("Eeny meeny miny "++)))
f
benar-benar pointfree, kita dapat menghilangkan bahkan nama.Python 2,
154147 byteEDIT: Terima kasih, Joe Willis!
Ini menggunakan trik yang [0 :: n] mencetak elemen ke-n dari daftar.
Coba di sini
sumber
::
operator? Apakah itu seperti untuk di dalam loop?Ruby, 160 byte
Semua upaya saya untuk "mengompresi" string baru saja membuatnya lebih lama.
Masih berusaha ...sumber
JavaScript (ES6), 189 byte:
Penjelasan:
sumber
I=>(b=Array(I--).fill``,c=0,"Eeny meeny miny moe Catch a tiger by the toe If he hollers let him go Eeny meeny miny MOE!".split` `.forEach(v=>(b[c]+=v+' ',c+=c>I-1?-c:1)),b)
ini:, yang panjangnya 172 byte. Ini mengembalikan setiap baris sebagai elemen dalam array. Saya pikir ini bisa diterima..map()
alih-alih.forEach()
, Anda dapat menyimpan 3 byte, dikurangi menjadi 169 byte. Dengan sedikit mengutak-atik, ini mungkin sebenarnya tweetable!STDIN
danSTDOUT
jadi saya pikir itu membatasi jawaban JavaScriptprompt
danalert
sayangnya.alert(b.join`<newline>`)
di akhir. Tetapi kerusakan masih bisa dikurangi dengan.map()
, bukannya.forEach()
.Python 3,
279278272173 byte(Terima kasih kepada Mathias Ettinger yang benar-benar menyelamatkan saya 100+ BYTES! )
Jika ada yang punya tips atau saran, saya akan sangat menghargainya. Terima kasih!
sumber
int(i)
harus menggantikan3
, tetapi ada kesalahan lain untuk memperbaikinya setelah itu.%
. Ini ideal untuk penghitung siklik..split()
akan dibagi menjadi kosong (spasi, baris baru, tab) 2)range(0, x)
ditulis terbaik sebagairange(x)
3) melihat notasi slice:w[0::3]
akan mengembalikan daftar setiap tiga kata dalamw
.Mathematica, 154 byte
Menggunakan metode split-chunk-transpose-join-output dari sebagian besar jawaban lainnya.
sumber
MATLAB, 167 byte / karakter:
Penjelasan:
Tidak akan memenangkan penghargaan apa pun selama ini, tapi itu menyenangkan. :-)
sumber
Japt,
908786 byteBanyak hal yang tidak patut. Cobalah online!
Bagaimana itu bekerja
Saya sudah mencoba mengompresi string dengan pembatas yang berbeda. Satu-satunya hal yang lebih efisien daripada spasi adalah huruf kecil, tetapi sebagian besar sudah digunakan, dan dengan demikian, tidak dapat digunakan untuk memisahkan string. Inilah jumlah kompresi yang dicapai dengan sisanya:
Saat ini saya menggunakan
d
. Dimungkinkan untuk menyimpan byte dengans
, menggantikan beberapa huruf lain dihollers
.sumber