Sebagai seorang anak, teman saya punya bola ajaib yang akan kami ajukan pertanyaan dan lihat bagaimana nasib pertanyaan itu.
Tantangan
Tantangan Anda adalah menulis sebuah program (atau fungsi) yang ketika dijalankan (atau dipanggil), menghasilkan (atau mengembalikan) jawaban acak dari kemungkinan jawaban di bawah ini. (Random menjadi: each output should have a nonzero chance of occurring but they do not need to meet any other criteria
)
Jawaban yang mungkin dari Magic 8-ball adalah (case-insensitive):
It is certain
It is decidedly so
Without a doubt
Yes definitely
You may rely on it
As I see it, yes
Most likely
Outlook good
Yep
Signs point to yes
Reply hazy try again
Ask again later
Better not tell you now
Cannot predict now
Concentrate and ask again
Don't count on it
My reply is no
My sources say no
Outlook not so good
Very doubtful
Memasukkan
Tidak ada input
Keluaran
Pilihan acak dari atas. Kasus tidak masalah.
Aturan
Ini adalah kode-golf , jadi kode terpendek dalam byte untuk setiap bahasa menang!
code-golf
kolmogorov-complexity
random
Pengembang Berkembang
sumber
sumber
Signs point to yes
Jawaban:
SOGL V0.12 , 166 byte
Coba Di Sini!
\ o / setiap kata ada di kamus SOGLs!
sumber
> <> , 438 byte
Cobalah online!
Tidak terlalu menarik, tapi saya pikir itu adalah jawaban pertama di mana keacakan tidak seragam. Saya menempatkan semua pesan negatif sebagai yang paling tidak mungkin :)
Beberapa penjelasan:
Pointer mulai mengarah ke kanan di baris pertama.
x
mengubah pointer ke arah mata angin acak. Jika naik atau turun, itu hanya bertemu dengan yang berbedax
. Jika benar, itu memantul|
dan hits yang samax
. Jika berbelok ke kiri, ia membungkus dan mendorong teks garis itu ke tumpukan. Sebagian besar garis kemudian mengenai jalur yang sama^
yang mengubah arah ke atas. Ini loop di ataso
pada baris pertama, yang menampilkan tumpukan sampai kosong. Kasing khusus adalahYep
garis, yang memiliki loop horisontal|o<
sebagai gantinya.sumber
Python 2,
369368 bytePython 3, 371 byte
Saya sebelumnya menggunakan
hash
builtin untuk mengindeks (hash(id)%20
), yang mengembalikan nilai acak per-awal interpreter Python sejak https://bugs.python.org/issue13703 . Ini bukan acak untuk string kosong (selalu 0), jadi perlu menggunakan sesuatu yang lain,id
builtin!Pada tampilan kedua, saya bisa menggunakan
id
langsung, tetapi tampaknya selalu menghasilkan angka genap. IIRC,id(object)
di CPython hanya mengembalikan lokasi memoriobject
, jadi ini masuk akal. Mungkin jika saya menggunakan Jython atau IronPython, saya bisa melewatkan divide-by-7. Bagaimanapun,hash(id)
vsid(0)//7
sama dengan Python 3, tetapi dapat menggunakan/
operator untuk memotong divisi integer di Python 2, menghemat byte.sumber
PowerShell , 354 byte
Cobalah online!
Ho-hum. Mengambil semua hasil, disatukan dengan
0
s, lalu-split
aktif0
untuk membuat array string. Lewati arrayGet-Random
yang akan dipilih secara acak salah satunya. Yang tersisa pada pipa dan output tersirat.sumber
Python 2 , 385 byte
-1 byte berkat ovs.
Cobalah online!
sumber
Applescript, 391
Saya suka bagaimana daftar AppleScript memiliki
some item
metode:sumber
Utilitas Bash + GNU, 230
Output biner zopfli tidak terwakili dengan baik di sini; sebagai gantinya Anda dapat merekonstruksi skrip dari data yang disandikan base64:
Catatan, sebagaimana diizinkan oleh pertanyaan, data terkompresi akan mendekompresi ke semua huruf kecil. Ini membuat kompresi zopfli sedikit lebih efisien dan menghemat 16 byte.
sumber
tail +2
tidak bekerja untuk saya, tetapi tetapsed 1d $0
menyimpan byte. Juga, karena keluaran ke STDERR diizinkan secara default, saya rasa Anda tidak perluexit
. Juga, sepuluh byte terakhir dari program dapat dihapus.R , 360 byte
Cobalah online!
Bukan solusi yang paling elegan. R memiliki fitur yang rapi di mana
stdin
akan mengarahkan ulang ke file sumber, sehingga Anda dapat menempatkan (kecil) kumpulan data ke dalam kode sumber, menyimpan byte untuk pemisahan string atau lebih buruk, membangun vektor itu sendiri (semua kutipan ditambahkan dengan cepat). Seiring dengan bawaan untuk pengambilan sampel acak, ini membuat jawaban singkat.sumber
Arang ,
203184 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 19 byte dengan menurunkan semuanya. Penjelasan:
sumber
Retina ,
333331321 byteCobalah online! Sunting: Disimpan 1 byte dengan mengompresi
doubt
dan 1 byte dengan menurunkan semuanya jadi saya bisa mengompresreply
. Kemudian disimpan 10 byte dengan menggunakan pegolf Retina Kolmogorov @ Leo pada teks yang lebih rendah (yang secara kebetulan adalah jumlah byte yang disimpan pada jawaban 333-byte saya).sumber
Kelapa , 380 byte
Kelapa pelabuhan totallyhuman 's jawabannya
Cobalah online!
sumber
T-SQL, 393 byte
Fungsinya
STRING_SPLIT
ini hanya tersedia di SQL 2016 dan yang lebih baru.Terbaik yang bisa saya dapatkan untuk versi sebelumnya menggunakan
VALUES('It is certain'),('It is decidedly so'),...
adalah 464 karakter.Diformat, supaya Anda bisa melihat bagian yang berfungsi:
NEWID()
menghasilkan GUID baru, pseudo-acak, sehingga merupakan cara untuk melakukan semacam pseudo-acak.sumber
Jeli , 201 byte
-2 byte terima kasih kepada Tn. Xcoder. -1 byte terima kasih kepada pengguna202729.
Cobalah online!
Sial , kompresi SOGL bagus.
sumber
ỴX
ke akhir kode sehingga ia memilih secara acak dari salah satu dari mereka)05AB1E , 171 byte
Cobalah online!
Penjelasan
“ ... “
mendorong string dari semua kata yang diperlukan.Beberapa kata diambil langsung dari kamus 05ab1e.
Beberapa ditulis dalam ascii (seperti
haze
).Beberapa kamus gabungan dan ascii (seperti
do
+n't
).Maka kode pemrosesan adalah:
sumber
,
dan'
ditambahkan.ye
,,don
danha
), dan -2 dari menyortir daftar berdasarkan jumlah kata dan menggunakan kompresi delta.Ruby,
362361 byteCobalah online!
sumber
?.
alih - alih'.'
.?
string karakter tunggalPython 3, 386 byte
sumber
Perl, 366
sumber
As I see it, yes
.split
.print
dan menyimpan 1 byte lebih. Masukkan saja tanda tambah unary sebelum daftar:print((0..9)[5])
akan menjadiprint+(0..9)[5]
.05AB1E ,
208217 byteCobalah online!
Solusi yang cukup mendasar. Kemungkinan jawaban disatukan dengan karakter x (karena tidak ada dalam jawaban) dan kemudian dikompresi (di dalam • ), 'x¡Ω berpisah pada x dan pop pilihan acak.
Terima kasih kepada @Emigna untuk menunjukkan bahwa kompresi alfabet tidak disukai 'atau, banyak. Diperbaiki dengan menyurvei string yang dikompresi dengan don ' dan , ya .
sumber
,
dan'
dengan spasi, sehingga output untuk 2 baris tersebut salah.PHP ,
412385337384 byteCobalah online!
Solusi yang cukup lurus ke depan. Pisahkan string dengan pembatas (dalam hal ini
1
) dan pilih elemen acak dari array.sumber
php
agar kode Anda dikompilasi; 2, Anda dapat mengganti'|'
dengan1
dan semua|
dengan1
-2 byte; 3 harus mempertimbangkan untuk mengubah tautan Anda untuk Mencoba Daring ke TIO.run seperti yang disukai oleh komunitas.PHP 7.2.3-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Mar 6 2018 11:18:25) ( NTS )
. Tidak yakin apakah dalam versi sebelumnya itu penting atau tidak. Either way, saya sudah mengedit pertanyaan.<?=
dan menggemakan meledak secara langsung menggunakan[rand(0, 19)]
alih-alih menambahkan pertama ke variabel<?= explode("1", "str1str1str")[rand(0, 19)]
Javascript, 372 byte
-10 byte terima kasih kepada Shaggy
Cobalah online!
sumber
OR
bukanMath.floor()
untuk menyimpan 7 bytes:Math.random()*20|0
.Dibalik
1221870 byte (perimeter seluruh bidang adalah33x3630 * 29 karakter) Terima kasih kepada Jo King karena telah membantu saya menghapus nol yang tertinggal dan mendesak saya untuk mengubah pengacak.Baris teratas menempatkan karakter '<' dan posisi-x (28) di mana ia harus diletakkan di stack. Kemudian kita masukkan semacam generator angka acak. Ini dapat ditingkatkan, tetapi ini adalah apa yang dapat saya berikan dalam waktu singkat ... Angka "acak" diimbangi untuk mendapatkan baris "acak" yang sebenarnya untuk dibaca.
Setelah angka acak dihasilkan, kita menempatkan karakter '<' di baris itu dan mendorong huruf-huruf di tumpukan dan di baris bawah mengeluarkannya lagi.
Catatan; jika Anda menggunakan juru bahasa yang saya tautkan dalam judul posting ini, Anda harus mengklik ulang "Show" setelah setiap kali dijalankan, karena penambahan karakter '<' tetap setelah eksekusi.
sumber
>:#,_@
untuk menghindari pencetakan byte nol. Oh, dan tambahkan tautan TIO.Java 8 ,
433,392,380, 379 byteCobalah online!
sumber
String#split
. Selain itu, Anda dapat menyimpan 11 byte tambahan menggunakan(int)(Math.random()*20)
bukannew java.util.Random().nextInt(20)
. Dan semi-colon tidak diperhitungkan terhadap byte-count untuk lambdas. Jadi totalnya: 380 byte .Don't
sebagai gantiDon' t
.Merah , 367 byte
Cobalah online!
Tampaknya tidak benar-benar acak di TIO (meskipun berfungsi dengan baik di Konsol Merah), itu sebabnya saya menambahkan acak / seed ke header.
sumber
Excel, 399 Bytes
Karena
CHOOSE(X.Y,<>)
sama denganCHOOSE(X,<>)
, tidak perlu untukINT
Tidak banyak bermain golf yang bisa Anda lakukan di sini ...
sumber
Aceto , 345 +1 = 346 byte (+1 untuk
-l
bendera)Cobalah online!
Tidak terlalu menarik, tapi saya tidak bisa memikirkan sesuatu yang lebih pendek dalam bahasa ini, tidak ada string terkompresi atau apa pun.
sumber
C - 426 byte
Menggunakan variabel mod 20 yang tidak diinisialisasi untuk mengindeks ke dalam array string yang berisi semua kemungkinan output. Compiler mengeluh bahwa stdio.h tidak termasuk, tetapi berfungsi dengan baik. Mungkin karena kebetulan memiliki perpustakaan standar yang terhubung di anyways. Beruntung saya.
sumber
Pergi, 530 Bytes
Harap perhatikan bahwa, di Go Playground, karena cara kerja penyemaian, hasilnya selalu sama. Saat dijalankan pada komputer biasa, semuanya berfungsi sebagaimana mestinya.
Saya pikir mungkin untuk menghemat lebih sedikit tetapi pengetahuan saya di Go berhenti di sana :)
Versi yang diformat dan dapat diuji
sumber
Excel-VBA,
362341339 BytesDi mana
A1:T1
berisi opsi yang berbeda. Membaca seluruh baris pertama sheet menjadi arrayv
dan mengindeks titik acak di sepanjang 19 nilai pertama.Terkejut menemukan bahwa pengindeksan array tidak memerlukan nilai integer
sumber
VBA, 358 byte
Fungsi jendela langsung VBE anonim yang tidak mengambil input dan output ke STDOUT.
sumber
Java 8, 379 Bytes
Cobalah online
sumber