Skittles adalah permen berwarna di mana ada 5 rasa yang berbeda; anggur, apel hijau, lemon, jeruk, dan stroberi diwakili oleh (p) urple, (g) reen, (y) ellow, (o) range, dan (r) ed masing-masing. Saya biasa makan skittles dengan menyortir semua warna yang berbeda, lalu memakannya secara berurutan. Setelah mendapatkan beberapa penampilan aneh di kantor, saya sekarang berpura-pura memakannya seperti orang normal. Tugas Anda adalah untuk meniru ini:
Kode Anda (program atau fungsi lengkap) akan menerima larik skittles (10x10) sebagai input (dalam format apa pun yang masuk akal). Array ini akan mewakili tumpukan skittles yang tidak disortir. Tugas Anda adalah "memakannya" dari warna favorit Anda hingga warna favorit. Pesanan pilihan saya adalah anggur, apel hijau, lemon, jeruk, stroberi, tetapi Anda bebas memilih pesanan apa pun asalkan secara konsisten diberlakukan (sebutkan pilihan Anda dalam kiriman Anda sehingga saya dapat menilai Anda untuk itu). Setelah memakan setiap bagian dari permen, kode Anda akan menampilkan (dalam format yang sama dengan yang Anda input) tumpukan yang tersisa dengan potongan yang dimakan diganti dengan spasi. Anda akan mengulang sampai hanya tersisa favorit Anda. Anda dapat memilih skittle untuk dimakan (mungkin acak atau deterministik). Ruang trailing harus dijaga.
Misalnya, urutan output Anda dapat terlihat seperti ini (menggunakan 5x5 untuk singkatnya dan menunjukkan spasi sebagai .
)
start 1 2 3 4 5 n
.org. .org. .org. .org. .or.. .or.. ..r..
prgrg .rgrg .rgrg .rgrg .rgrg .r.rg .r.r.
gggpr gggpr ggg.r ggg.r ggg.r ggg.r ....r
oyyor oyyor oyyor oyyor oyyor oyyor ....r
.r.p. .r.p. .r.p. .r... .r... .r... .r...
Ini adalah kode-golf , jadi kode terpendek dalam byte menang
TL; Aturan DR:
- Pengajuan mungkin program atau fungsi penuh
- Input dapat diambil dalam format apa pun yang wajar (string, daftar, matriks, dll) dengan metode apa pun yang masuk akal (STDIN, argumen fungsi, dll.). Namun harus ada penggambaran di antara baris
- Output harus diproduksi dalam format yang sama dengan input dengan metode yang masuk akal (STDOUT, pengembalian fungsi, dll.). Output menengah mungkin atau mungkin tidak dibatasi
- Output pertama akan menjadi input pertama
- Ruang trailing harus dilestarikan
- Urutan warna apa pun dapat digunakan (sebutkan jawaban Anda)
- Potongan kecil dari warna saat ini dapat dimakan
- Output terakhir hanya warna dan ruang favorit Anda
- Jika memungkinkan, sertakan tautan ke kompiler online untuk menguji kiriman Anda
Jawaban:
Jelly ,
16 1413 byteTryItOnline!
Paling favorit untuk paling, seperti bagi siapa pun yang serius tentang OCD mereka, adalah abjad!
Mengambil input dan output sebagai teks (yaitu baris dibatasi oleh baris baru).
3 byte disimpan dengan membalik arah dan menggunakan metode yang berbeda: tingkatkan alih-alih menemukan karakter dari alfabet.
Bagaimana?
sumber
JavaScript (ES6),
747574 byteRasa dipesan sebagaimana dijelaskan dalam tantangan: anggur, apel hijau, lemon, jeruk, stroberi.
Output antara dipisahkan oleh baris baru.
Kasus cobaan
Kasing uji ini menggunakan contoh 5x5. Setiap ukuran kisi lain harus berfungsi seperti yang diharapkan.
Tampilkan cuplikan kode
sumber
Pesta,
48, 46 byteMEMPERBARUI:
Golf
Mengambil input di stdin, mencetak ke stdout. Makan ungu, hijau, kuning dan kemudian oranye.
Program sed yang sederajat adalah:
Output sampel (pembatas hanya untuk kejelasan)
Cobalah online!
sumber
Python 2,
60 5756 byterepl.it
Fungsi rekursif yang makan dalam urutan abjad terbalik, meninggalkan hijau untuk yang terakhir.
Input
s
adalah string dengan pembatas baris dengan ordinal kurang dari'g'
(misalnya baris baru atau koma).Fungsi mencetak inputnya, dan kemudian berulang jika input itu mengandung sesuatu yang lebih besar dari 'g', melewati input dengan kemunculan pertama karakter maksimum digantikan oleh spasi.
(Hampir port jawaban Jelly saya .)
sumber
Perl,
5346 + 2 = 48 byteJalankan dengan
-0n
-10 byte berkat @Dada
Sunting: Juga terima kasih kepada @Dada karena menunjukkannya, saya lupa mencetak input sebagai output pertama. Itu sudah diperbaiki.
Ada sedikit tipu daya yang terlibat dalam jawaban ini, jadi saya akan memecah apa yang terjadi.
Pertama-tama, Perl tidak suka parameter multi-line dilewatkan. Variabel
$/
adalah pemisah rekaman input, dan setiap kali input menemukan karakter yang tersimpan di dalamnya, interpreter mengakhiri input itu dan memulai input baru. Konten default adalah karakter baris baru\n
, yang berarti melewatkan string multi-baris tidak dimungkinkan. Untuk melakukan itu, kita harus$/
menghapus dari isinya. Di situlah-0
flag masuk: pengaturan-0
akan disimpannull
dalam variabel$/
, memungkinkan penerjemah membaca semuanya ke dalam variabel implisit$_
sekaligus.Sedikit tipu daya berikutnya adalah
eval
pernyataan. Sebenarnya apa yang sedang kita lakukaneval
? Kami sedangeval
membuatsprintf
pernyataan, yang dirinci sebagai berikut:Hal pertama yang
sprintf
dilewatkan adalah string yang"say while s/%s/./;"
diulang 4 kali, jadi:Kemudian,
sprintf
dilewatkan empat karakter barewordp,o,g,r
,, yang diinterpolasi ke dalamsprintf
pernyataan, menggantikan setiap instance dari%s
. Apa yang kemudian kita dapatkan adalah string berikut, yang diteruskan keeval
fungsi:Setiap
while
loop mengevaluasi ekspresis/[color]/./
, yang menggantikan instance pertama dari warna apa pun itu dalam variabel implisit$_
dengan titik. Jika substitusi dilakukan, ia akan kembali1
, jika tidak maka tidak akan menghasilkan apa pun. Karenas///
memiliki efek samping, ia memodifikasi variabel asli$_
, yang isinya kemudian dicetaksay
. Empat versi loop ini dilakukan, menggantikan ungu, jeruk, hijau, dan merah, hanya menyisakan kuning.Alasan mengapa kuning ditinggalkan adalah karena
y
tidak bisa menjadi kata kunci, karena itu sebenarnya fungsi, dan memilikiy
alih - alih salah satu dari surat-surat itu akan menimbulkan kesalahan. Saya dapat mengubah ini dengan meletakkan tanda kutip di sekitarnya (+2 byte), atau menggunakan huruf kapital Y dan membuat regex case-insensitive (+1 byte), tetapi untuk kode-golf , setiap byte penting, jadi saya memutuskan bahwa saya benar - benar suka lemon skittles paling.TL; DR:
Grape, Orange, Green Apple, Strawberry, Lemon
sumber
-0
bendera akan menyelamatkan Anda sekitar 10 byteFirst output shall be the first input
Perl,
303133 + 2 =323335 byteJalankan dengan
-n0
(penalti 2 byte).Rupanya, saya suka makan Skittles dalam urutan abjad, karena programnya ternyata lebih pendek. Program tidak benar-benar membutuhkan banyak penjelasan:
-n0
membaca input secara implisit (-n
berarti "membaca input secara implisit",-0
berarti "jangan memecah input pada baris baru");for$x(g..r)
menjalankan loop dengan$x
set dari setiap huruf darig
menjadir
pada gilirannya;say;
mencetak input saat ini, setelah mutasi;s/$x/ /
mengganti satu salinan$x
(khusus, yang pertama) dengan spasi jika memungkinkan; dan&&redo
ulangi kode di dalam kurung kurawal (tanpa memajukan penghitung putaran) jika penggantian berhasil.Program ini dapat dengan mudah digeneralisasi ke lebih banyak rasa Skittle tanpa mengubah panjangnya, dan akan bekerja dengan tumpukan ukuran berapa pun.
Inilah tautan Ideone tempat Anda dapat mengujinya. (Ideone tidak memungkinkan Anda menentukan opsi baris perintah, jadi saya harus menambahkan beberapa baris di awal untuk mengatur
-n0
dan-M5.010
yang Anda dapatkan secara gratis.)sumber
say;for$x(g..r){say while s/$x/ /}
?for$x(p,o,g,r)
yang tidak akan.say while
hanya satu byte lebih lama, dan sesuatu yang saya anggap sebagai alternatif, jadi saya bisa mengubahnya.say;
karena aturan mengatakanFirst output shall be the first input
for$x(g,o,p,r)
versi yang menyalin input terlebih dahulu. (Butuh beberapa waktu ekstra untuk mencari jika ada warna yang hilang, tetapi Anda tidak akan berharap memiliki warna yang hilang dalam paket skittles.) Sebagai catatan, versi dengan yangsay;
pertama akan menjadi 37 byte.C #,
134148 byteMemesan:
G -> O -> Y -> P -> R
Menggunakan beberapa hal serupa dari jawaban @ Poke, saat ini sedikit lebih lama karena saya perlu mengubah array karakter menjadi string; (
sumber
Java 7,
139 135 130 151 138135 byteMakan skittles dalam urutan: Kuning, Oranye, Hijau, Ungu, Merah
Saya kira ini lebih baik dari 2 pernyataan cetak>.>
sumber
s.length
C 145 - 5 - 18 - 1 = 121 byte
tidak cantik + cantik
Di sini
a[][11]
berarti mengambil n-string dengan panjang 11 di mana 1 karakter diperlukan untuk penghentian jadi, secara teknis hanya 10 karakter yang terlihat.order: sesuai abjad
fungsi ini memeriksa
'g'
input yang diberikan dan menghilangkannya 1/1 kemudian meningkatkan penahanan variabel'g'
sampai menemukan kecocokan berikutnya (mungkin huruf'o'
) dan kemudian menghilangkan karakter yang cocok.Kelemahannya adalah fungsi ini terlalu hati-hati. Jadi, jika skittel Anda memiliki
26
warna yang berbeda dengan nama kode dari huruf az, fungsi ini akan menangani input itu juga ...sumber
#define
. Itu mengurangi 19 byteOktaf, 49 byte
Makan skittles dalam urutan abjad, kode ascii tertinggi terlebih dahulu.
sumber
ES6 (Javascript),
72, 71 byteEDIT:
Versi non-rekursif dalam Javascript.
Golf
Input dan output adalah string multiline, makan pil dalam urutan "ungu => oranye => hijau => kuning".
Uji
sumber
Python 3 -
1419975 byteProgram makan skittles dalam urutan ini -
Orange Red Green Yellow Purple
.Sunting - Terima kasih kepada Flp.Tkc yang membantu mengurangi 24 byte!
Saya percaya itu bisa golf lebih lanjut karena terlihat sangat sederhana.
sumber
orgy
.Vim
5755 byteMenyimpan dua byte dengan menghapus pembatas baris saya. Sayangnya itu membuatnya jauh lebih sulit untuk membaca dan memeriksa kebenarannya :(.
Tidak dapat dicetak:
TryItOnline
Makan dalam urutan oypg, meninggalkan semua r untuk akhirnya :)
sumber
Mathematica, 67 byte
Makan merah, lalu kuning, lalu jeruk, lalu ungu.
sumber
Java 7, 125 byte
Ungu, kuning, hijau, merah, oranye. Saya menikmati bahwa saya bisa memilih pesanan saya dalam solusi ini. : D
Golf
Tidak disatukan
Coba di sini!
Pendekatan yang berbeda untuk jawaban Java lainnya oleh @Poke. Kami mulai dengan membuat salinan string asli. Iterasi melalui setiap warna, kami menggantinya setiap kali ditemukan dengan spasi, lalu menambahkan tata letak baru ke string output, kembali setelah kami makan semuanya kecuali oranye.
Catatan
Pemisahan antara langkah-langkah dilakukan dengan garis ganda ganda
\n\n
, tetapi jika kotak input dapat diambil dengan garis tambahan di akhir, itu bisa disingkat menjadi adil\n
.sumber
Haskell, 60 byte
Input adalah string tunggal di mana baris dipisahkan dengan
,
. Nilai kembali adalah daftar string dengan semua langkah perantara. Urutan adalah abjad, terbesar pertama, jadi sisa-sisa hijau Contoh penggunaan:Rekursi sederhana. Simpan daftar input untuk nilai kembali, ganti elemen terbesar lebih besar
g
dengan spasi dan panggil fungsi lagi. Kasing dasar adalah ketika tidak ada elemen yang tersisa untuk dihapus.sumber
MATL, 24 byte
Cobalah online! Saya lebih suka makan skittle saya dalam urutan abjad terbalik: hijau adalah warna favorit saya. Penjelasan:
sumber
QBasic, 125 byte
Aturan kreatif menyalahgunakan!
Kiriman ini mengasumsikan banyak hal baik-baik saja:
GORPY
)Saya juga memiliki versi 130-byte yang menggunakan huruf kecil dan tidak kesalahan.
Berikut contoh dijalankan di QB64 , dengan
109
diubah ke29
untuk kisi 5x5:Penjelasan
DATA 71,89,82,79
menyimpan kode ASCII dariG
,Y
,R
, danO
.?INPUT$(109)
mendapat 109 penekanan tombol dari pengguna dan mencetaknya.Kami kemudian memasukkan
DO ... LOOP
konstruk yang tak terbatas . Setiap kali lewat, kamiREAD
kode ASCII dari Skittle saat inis
. Kemudian kita lewati baris dan kolom dari 1 hingga 10.SCREEN(r,c)
mendapatkan kode ASCII dari karakter di layar pada barisr
, kolomc
. Jika ini adalah sama dengan Skittle saats
, kamiSLEEP
selama satu detik dan kemudian mencetak ruang dir
,c
.Loop utama berjalan empat kali, menghilangkan Skittles hijau, kuning, merah, dan oranye. Pada iterasi kelima,
READ
kesalahan karena kita kehabisan data.sumber