Mungkin sebagian dari Anda sudah tahu permainan ini: Anda memiliki koleksi jelly beans dengan warna berbeda. Untuk setiap warna, kacang dapat memiliki selera yang berbeda, ada yang baik dan ada yang buruk, dan Anda tidak dapat membedakannya. Anda harus memilih kacang yang diberi warna, dan berdoa Anda telah memilih yang baik.
Jadi, tulis program terpendek yang menerima warna pilihan Anda (dari daftar yang diberikan), dan secara acak mengembalikan rasa yang dipilih. Rasa harus dipilih dari daftar bawaan. Daftar input dan output yang mungkin adalah:
Input Output choices [only one from the list]
--------------------------------------------------
green lawn clippings, lime, mucus, pear
yellow rotten eggs, buttered popcorn
blue toothpaste, blue berry
orange vomit, peach
brown canned dog food, chocolate
white stinky socks, tutti-frutti, baby diapers, coconut
Aturan:
- Anda dapat mengasumsikan bahwa input akan selalu berwarna dari pilihan input.
- Kasing dan spasi tambahan dan / atau baris baru tidak masalah.
- Output harus acak seragam: eksekusi program berturut-turut harus menghasilkan hasil yang berbeda, dan kemungkinan mendapatkan rasa yang diberikan harus sama untuk semua selera dalam daftar.
Ini kode-golf , jadi semoga program terpendek menang!
code-golf
random
game
compression
Charlie
sumber
sumber
blueberry
tidakblue berry
.Jawaban:
C #,
418313305271 byteTerlalu lama bahkan untuk C # tetapi saya tidak bisa melihat bagaimana cara membuatnya lebih pendek.
Versi Lengkap / Terformat:
sumber
05AB1E , 126 byte
Penjelasan:
Jika ada yang bertanya-tanya, inilah string yang tidak dikompresi:
Saya mungkin bisa mengompres lebih banyak menggunakan beberapa trik pintar dan kamus.
Cobalah online!
sumber
"eougwt"
ke.•4Õ!Õ•
untuk -1.eougwt
dan.•4Õ!Õ•
, bukannya"eougwt"
dan.•4Õ!Õ•
. Ups.JavaScript (ES6), 235 byte
Saya perlu mencari cara untuk kompres string di JS!
Jika itu tidak "cukup acak" untuk selera Anda kemudian menambahkan 7 bytes mengganti
new Date
denganMath.random()
.Cobalah
sumber
eluaoi
, saya memikirkannya sendiri dan berpikir, "Oooh, lihat betapa pandainya saya", lalu melihat Anda mengalahkan saya!new Date%a.length
bukan "acak seragam".eluaoi
waktu yang bersamaan: PMath.random
sebagai gantinya.Jelly ,
101100 byteCobalah online!
sumber
Japt ,
148146 byteCobalah online!
Disimpan 6 byte berkat produk Shaggy dan ETH
sumber
R
bukannya0
menyimpan satu byte. Selain itu, Anda mungkin dapat mengompreseluaoi
dengan bermain-main dengan pesanan.qR
yang panjangnya sama?®
juga.eaiou
sebagai string, Anda dapat memampatkannya menjadi tiga byte (mungkin ada kombinasi tiga byte lainnya).Python 2 ,
301258 byteCobalah online!
Disimpan sangat banyak byte dengan memperpendek tombol untuk menggunakan indeks input ke-2, seperti yang disarankan oleh @TheLethalCoder, dan dengan membelah koma alih-alih menggunakan daftar langsung.
sumber
eluaoi
sebagai kunci kamus dan akses dengan indeks 2 dari string akan menghemat byte.Jelly ,
9594 byteTautan monadik yang menerima daftar karakter (huruf kecil) dan mengembalikan daftar karakter.
Cobalah online! atau makan paket 48 .
Bagaimana?
Delapan puluh sembilan dari sembilan puluh empat byte adalah daftar terkompresi dari delapan string. Dua di antaranya adalah string kosong dan enam lainnya adalah masing-masing rasa yang dipisahkan baris baru untuk salah satu warna:
Sisa program mem-parsing input untuk memutuskan daftar mana yang akan digunakan, membagi daftar yang dipilih dengan baris baru dan memilih elemen acak:
sumber
Java, 288 byte
Uji sendiri!
Bisa bermain golf dengan menggunakan a
char[]
.Namun bagian acak tidak dapat "didistribusikan secara seragam" tanpa penggunaan eksplisit
Random.nextInt(int)
. Bahkan(int)(Math.random()*a.length)
tidak terdistribusi secara merata.sumber
new java.util.Random().nextInt(a.length)
daripada(int)(Math.random()*a.length)
..Math.random()
menyediakan angka yang memiliki beberapa kekhususan (kekuatan0
dan tanda0
dan 52 bit acak). Jadi Anda benar-benar menggunakan entropi 52 tanpa pemeriksaan lebih lanjut. Jika panjang3
, misalnya,2^52
tidak dapat dibagi dengan 3. Jadi tidak didistribusikan secara acak. Inilah sebabnya mengapaRandom.nextInt(int)
(file java aktual, bukan javadoc, pada baris 394) memiliki mekanisme loop untuk memastikan nomor tersebut ada di antara angka-angka wajar. Kecuali saya berkata "itu cukup baik", hanyaRandom.nextInt(n)
adil.Math.random()
tidak dapat digunakan saat2^53
tidak dapat dibagi secara merata dengan jumlah yang Anda kalikan? Jadi, jika Anda ingin angka acak dari 0-3,(int)(Math.random()*4)
dapat diterima untuk membagi secara merata (empat kali2251799813685248
), tetapi ketika Anda menggunakannya*3
bukan (yang tiga kali3002399751580330.666...
), karena melemparkannya ke lantai, membuatnya menjadi beberapa bagian 1 lebih kecil dari yang lain. Dan karena panjang variabel dalam kasus Anda, panjangnya juga tidak terdistribusi secara merata (dengan kemungkinan panjangnya 3).Math.random()
, jika seseorang mengatakan sesuatu secara acak "seragam" atau "cukup", gunakanjava.util.Random
. Itu juga sebabnya saya mengeluh tentang jawaban Shaggy.> <> , 311 byte
Cobalah online , atau tonton di taman bermain ikan
Menampilkan rajutan SK yang nyaman dan Doof God Dennac!
Penjelasan: Tugas pertama ikan adalah untuk mencari tahu apa kata input dengan zig-zag di sisi kiri. Ikan hanya dapat membaca satu huruf pada satu waktu, dan dibutuhkan lebih sedikit byte untuk melakukan ini secara destruktif. Pertama, ikan membaca huruf pertama dan bertanya apakah itu
"y"
- jika ya, kata itu "kuning", kalau tidak ia akan melanjutkan. Itu kemudian membaca huruf kedua - jika itu"l"
, kata itu "biru", jika tidak bergerak; dan seterusnya. Jika membaca lima huruf dan tidak cocok"y"
( Y ellow),"l"
(b L ue),"o"
(br O wn),"n"
(ora N ge) atau"n"
(gree N ) masing-masing, maka warnanya pastilah "putih".Selanjutnya datang bit acak. Untuk warna dengan dua kemungkinan keluaran, ini cukup mudah - untuk kuning, misalnya, ikan memasukkan kode berikut di
x
:Yang
x
mengatur arah secara acak: jika itu naik atau turun, ikan berputar di sekitar cermin kembali kex
, tetapi jika itu benar atau turun, itu berbunyi "telur busuk" atau "popcorn mentega" (terbalik).Perpecahan empat arah (untuk putih dan hijau) lebih berantakan, tetapi mereka mengikuti prinsip umum yang sama - yang pertama adalah:
Perhatikan bahwa jika ikan berenang dari yang pertama
x
, ia melewati delapan"
detik, yang mengaktifkan dan menonaktifkan mode string empat kali, kemudian menyentuh cermin dan berenang kembali.Untuk mencapai pemisahan empat arah terakhir, ikan harus berenang melalui
e
danr
dari "kapur" dan "pir", yang menambahe = 14
tumpukan (dan membalikkannya), jadi pertama-tama kita harus menghapusnya dengan~
. Salah satu dari empat cabang juga melibatkan berenang melalui string sampah"> "
, yang kita hapus~~
.Akhirnya, setelah menambahkan salah satu rasa kacang ke tumpukan, ikan mencapai aliran
v
s di kolom paling kiri, yang mengirimkannya keyang mencetak karakter (menggunakan salah satu huruf
o
s di "kelapa") sampai tidak ada yang tersisa.sumber
T-SQL,
432 423 375 367 336295 byteAkhirnya, operasi berbasis set !!
(Jeda baris untuk tampilan dan tidak dihitung secara total.)
Input melalui kolom c pada tabel bernama t , sesuai pedoman kami .
Saya hanya bergabung dengan tabel input kami ke tabel yang penuh dengan kombinasi warna / rasa yang valid, lalu memilih baris acak.
ORDER BY NEWID()
adalah cara umum untuk mengacak urutan di SQL . Tergantung pada seberapa ketat Anda, Anda mungkin tidak menganggapnya acak sempurna, tetapi harus cukup acak untuk pemilihan jelly bean.EDIT 1: Disimpan 9 byte dengan hanya menggunakan karakter warna ke-3, terinspirasi oleh jawaban lain.
EDIT 2: Disimpan 48 byte dengan meletakkan bendera warna dan rasa dalam satu kolom. Banyak karakter yang disimpan di INSERT.
EDIT 3: Disimpan 8 byte dengan mengganti
INSERT INTO b(o)
denganINSERT b
EDIT 4: Menyimpan 31 byte lebih banyak dengan bergabung langsung ke tabel virtual
VALUES
dan karenanya menghilangkanCREATE TABLE
danINSERT
.EDIT 5: Hemat 41 byte dengan memutakhirkan ke
STRING_SPLIT
fungsi SQL-only 2016 , yang memungkinkan saya untuk menghilangkan variabel dan eksekusi SQL dinamis.sumber
PHP , 242 byte
Cobalah online!
sumber
Mathematica, 247 byte
Formulir input
sumber
eluaoi
triknya? Saya tidak tahu matematika jadi hanya sebuah ide.Clojure, 231 byte
Gagasan yang sama seperti yang lain, saya hanya bisa menghemat ruang dibandingkan dengan bahasa lain. Senar yang menekan tampaknya seperti penyebab yang hilang.
sumber