Ingat permainan anak-anak, 'Bebek, Bebek, Angsa' ? Tidak? Aku juga tidak.
Tantangan
- Cetak kata 'bebek' pada setiap baris dalam jumlah tak tentu.
- Cetak kata 'angsa'.
- Program Anda berakhir.
Aturan
- Coba mainkan game dalam byte paling sedikit.
- Setidaknya harus ada satu bebek.
- Pasti ada satu angsa, di akhir daftar.
- Pasti ada satu burung di setiap baris. Tidak ada garis kosong.
- Kasus string yang dihasilkan tidak relevan.
- Ruang putih di dalam garis baik-baik saja.
- Program Anda harus selesai.
- Program Anda tidak harus secara konsisten menghasilkan jumlah itik yang sama.
Selamat bersenang-senang!
Harap dicatat: Pertanyaan ini bukan duplikat dari kode terpendek untuk menghasilkan keluaran yang tidak deterministik
Alasannya termasuk:
- Asosiasi ke permainan anak-anak
- Persyaratan awal dan akhir yang ditentukan dari string hasil. Tidak ada output yang ditentukan dalam tantangan lainnya.
- Jawaban Untuk yang lain, tantangan non-duplikat berada dalam jumlah byte satu digit. Rata-rata untuk yang ini adalah sekitar 30, atau ada sekitar.
- Dengan jumlah tumpang tindih antara tantangan ini dan yang itu, setiap pertanyaan kode-golf termasuk tag 'acak' adalah duplikat. Haruskah kita menghapus semuanya?
- Kode jawaban untuk tantangan ini akan cocok dengan tantangan lain (dengan cara yang sangat menggelikan), tetapi jawaban untuk tantangan itu tidak cocok dengan yang ini.
Jawaban:
Jelly , 13 byte
Cobalah online!
Penjelasan:
Versi yang lebih mudah dibaca: Cobalah online!
Akan selalu mengembalikan 1 atau 2 bebek.
sumber
Operasi bahasa skrip Flashpoint , 48 byte
Selalu mencetak satu atau dua bebek.
random 1
mengembalikan angka (floating point) antara 0 dan 1. Angka itu dilewatkan sebagai argumen untukselect
bersama dengan array[s,""]
. Angka acak kemudian dibulatkan ke bilangan bulat terdekat (0 atau 1), dan elemen array pada indeks itu dipilih dari array.Telepon dengan:
Keluaran:
Alternatif versi 56 byte:
sumber
World of Warcraft 81 Bytes
Inilah makro yang bisa Anda jalankan di World of Warcraft.
sumber
/run for x=1,random(1,9)do print("Duck")end print("Goose")
Minecraft <1,13,
7254 byteMaaf saya harus.
Instruksi:
data/functions/minecraft/ddg.mcfunction
/function ddg
di konsol gameBagaimana itu bekerja:
Menghasilkan kata "bebek" untuk setiap entitas di dunia, lalu mengeluarkan kata "angsa". Karena entitas terus-menerus memijah dan meremehkan, jumlah "bebek" tidak akan konsisten. Saya menggunakan
tellraw
bukan yang jauh lebih pendeksay
karenasay
menampilkan nama entitas, sedangkantellraw
output persis seperti yang diceritakan.Tangkapan layar
Sunting: Mengubah {"teks": "bebek"} menjadi "bebek" (dan sama dengan "angsa")
sumber
JavaScript,
4544423937 byteMemiliki potensi untuk menghasilkan kesalahan overflow.
Menguji
sumber
Oktaf ,
3833 byteIni bukan yang terpendek (ini 36 byte), tapi ini favorit saya. Penjelasannya ada di bawah.
Cobalah online!
Beberapa variasi lebih pendek:
Ini bekerja pada prinsipnya (33 byte), tetapi waktu penerjemah online habis:
Menambahkan beberapa byte untuk membuat output lebih pendek membuatnya 35 atau 36 byte:
Penjelasan:
Saya hanya akan menjelaskan yang acak terakhir. Yang lainnya serupa, tetapi menggunakan jumlah hari sejak 1 Januari 0000 hingga hari ini.
rand
mengembalikan nomor acak pada interval (0, 1) . Dengan demikian,1/rand
mengembalikan angka yang lebih besar dari 1 . Karena rentang1:f
, di manaf
float acak yang lebih besar dari 1 identik dengan1:floor(f)
,1:1/rand
menciptakan kisaran 1 .. x , di mana x> = 1 .Saya akan mencoba menjelaskan ini seolah-olah Oktaf adalah bahasa berbasis stack.
sumber
disp(['duck '+~pwd';'goose'])
? Tidak yakin apakah ini cukup "tidak pasti"Perl 5 , 20 byte
Pertama, 26 byte praktis:
Bebek 1 hingga 9 kali sebelum menjadi angsa.
Cobalah online!
Tetapi jika Anda memiliki banyak memori dan waktu versi 20 byte ini (seperti yang disarankan oleh Chris ) juga berfungsi:
Ini juga mengasumsikan Masalah Tahun 2038 akan diselesaikan untuk Perl 5 , jika tidak maka tidak berlaku untuk 1 detik 20 tahun karenanya.
sumber
1+$^T%9
menjadi adil$^T
, itu masih berfungsi, dan Anda menghemat 4 byte.Python 2 ,
3634 byteCobalah secara Online!
Saran dari Kevin Cruijssen membuat kita mencapai 34 byte:
sumber
((id(id)%5)+1)
untuk-~(id(id)%5)
menyingkirkan tanda kurung. Tip untuk bermain golf di <semua bahasa> dan Tips untuk bermain golf di Python mungkin menarik untuk dibaca. Selamat menikmati!id(id)
dapatid(0)
atau aku melewatkan sesuatu?id(0)
pada beberapa komputer yang berbeda menunjukkan itu konstan.id([])
. Ini harus menginisialisasi daftar yang berbeda setiap kali program berjalan, yang secara teori harus secara konsisten menghasilkan alamat memori yang berbeda.Z Shell (+ wget & Netpbm),
168160150148145135120 byteBukan solusi terpendek, tapi saya merasa ingin memberikan semacam tantangan untuk tantangan ini (terinspirasi oleh solusi @ AlexG untuk masalah lain ini ).
Script ini menghasilkan gambar PPM yang berisi antara 1-8 gambar bebek dan gambar angsa di bagian bawah pada output standar. Ini mengunduh dua gambar sumber dari Wikipedia, sehingga akses internet diperlukan agar bisa berfungsi.
Output sampel dikonversi ke JPEG melalui pnmtojpeg :
sumber
R , 35 byte
Cobalah online!
rexp()
menghasilkan angka acak dari fungsi peluruhan eksponensial.+1
untuk memastikan setidaknya satu bebek. Semua baris setelah yang pertama menyertakan spasi terdepan (yang merupakan pemisah default untukcat
) tetapi ini diizinkan.sumber
exp(-1)
sekitar 36,8%.\n
karena satu byte lebih pendek. Jika Anda mengunjungi "Coba online!" Tautan Anda dapat melihat bahwa efeknya sama.Bash ,
393837 byteCobalah online!
Mencetak sejumlah bebek yang sama dengan jumlah digit dalam bilangan bulat yang terdistribusi secara merata pada [0,32767] (jadi, lebih sering daripada tidak, lima bebek (jumlah bebek yang baik)).
-1 byte masing-masing berkat @Chris dan @sch menunjukkan pasangan tanda kutip yang tidak menarik bobotnya.
sumber
\n
dengan\\n
.sed s/[0-9]/duck\\n/g<<<$RANDOM\goose
dapat mengurangi satu bytesed
sepenuhnya portabel. Pada beberapa platform Anda mungkin lolos dengan backslash tunggal\n
. Pada orang lain Anda tidak akan mendapatkan baris baru apa pun yang Anda lakukan.Bash Murni (tidak ada utilitas eksternal), 25
Berdasarkan jawaban @ SophiaLechner , ini juga mencetak sejumlah bebek .
Ide @ OlivierDulac untuk menggunakan skrip shell PID yang disimpan dalam
$
parameter menghemat 5 byte.Cobalah online .
sumber
RANDOM
ke$
mencukur 5 byte? Dan kita juga bisa melakukan itik yang sangat panjang:yes duck|head -n $$;echo goose
$$
diterima - terima kasih!yes duck | head -n $$;echo goose
) sebagai alternatif (lebih lama dari milik Anda, tetapi satu mendapat BANYAK bebek untuk 5 karakter tambahan ^^)Ruby , 30 byte
Cobalah online!
Catatan: benar-benar 31 byte tanpa
\n
cheat.sumber
Bash + Coreutils,
3627 byteMencetak terlalu banyak bebek (antara 2 dan
cat /proc/sys/kernel/pid_max
), lalu satu angsa.Disimpan sembilan byte berkat Digital Trauma dan Olivier Dulac.
Cobalah online! (tapi perlu diingat bahwa mungkin terpotong sesekali)
Panjang yang sama, tetapi tanpa
echo
:Cobalah online!
a
adalah perintah appendsed
, danq
berhenti. Keduanya hanya berjalan pada baris$$
, yang sesuai dengan PID.sumber
head -n $((1+(RANDOM % 5)))
$$
alih-alih$RANDOM
untuk jawaban saya . Saya pikir Anda bisa menggunakan yang sama untuk menghemat 5 byte. Oh dan cobased
juga:yes duck|sed 1$$q;echo goose
yes duck|sed $$q;echo goose
baik-baik saja - Saya tidak berpikir skrip Anda akan pernah mendapatkan PID <1.PowerShell ,
353028 byteCobalah online! (versi modifikasi)
Menghasilkan array
Get-Random
jumlah item. Mungkin butuh beberapa saat. Ini menambahkan+1
untuk memastikan kami mendapatkan setidaknya satuduck
. Versi yang dimodifikasi juga menyertakan-ma
flag ximum5
sehingga Anda dapat melihat program berfungsi seperti yang diharapkan (versi yang dimodifikasi akan mencetak 1, 2, 3, atau 4duck
s sebelumgoose
).Array dan
goose
string soliter dibiarkan pada pipa, dan implisitWrite-Output
memberi kita nilai yang dipisahkan baris baru secara gratis.Anda tidak tahu betapa sulitnya bagi saya untuk tidak mengubah baris terakhir menjadi "bebek abu-abu" ...
sumber
0..(random)|%{'duck'};'goose'
tampak seperti 29, dan juga akan menghasilkan suatu tempat hingga [int] :: MaxValue (2,1 miliar) bebek sebelum angsa. (Dan0..0
mencetak bebek)Python 2 , 54 byte
Cobalah secara Online!
sumber
C # (Visual C # Interactive Compiler) , 55 byte
Cobalah online!
sumber
Brachylog ,
2421 byte-3 byte terima kasih kepada Erik the Outgolfer
Cobalah online!
Dalam perayaan Bahasa bulan ini , posting brachylog pertama saya. Aliran kontrol dalam bahasa ini keren.
Bagaimana itu bekerja:
sumber
Geometry Dash World 2.2 Editor - 4 objek
Penjelasan:
Pemicu BG adalah pemicu acak 2.2 saat ini, sehingga memicu ID Grup 1 atau 2.
"DUCK" pertama memiliki id grup 1, yang membuatnya memiliki peluang 50% untuk dihapus atau tidak (toggle).
Tidak ada objek dengan ID Grup 2 di level ini, jadi ada kemungkinan 50% dari 2 "DUCK" ditampilkan.
Bagaimana cara mereproduksi ini:
"DUCK" pertama memiliki ID Grup 1.
Angsa dan bebek ke-2 tidak memiliki ID Grup
Di dalam pemicu acak.
sumber
05AB1E ,
1514 byteCobalah online!
Akan mencetak 2, 5 atau 6 bebek dan kemudian angsa.
-1 byte berkat @Emigna menggunakan 'untuk satu kata terkompresi (bebek)
sumber
'М
karena bebek adalah satu kata.['ÐœTΩ#].•zíΘ•»
'Ðœ₁Ω.D.•zíΘ•»
APL (Dyalog) , 22 byte
1 byte disimpan berkat @EriktheOutgolfer
Cobalah online!
sumber
'Goose'⊣⎕←⍣(?9)⊢'Duck'
Retina , 17 byte
Cobalah online!
Cobalah online!
Mencetak 1 atau 2 bebek, dengan probabilitas yang sama.
Penjelasan
Tetapkan string yang berfungsi ke
duck
dan cetaklah dengan linefeed baris tambahan (\
). Kemudian ini dibungkus dalam tahap output lain, tetapi yang ini memiliki flag acak (?
) yang diterapkan padanya, jadi ia hanya mencetak dengan probabilitas 50%.Ganti
duck
dengangoose
, yang dicetak secara implisit di akhir program.Inilah alternatif yang menyenangkan yang mencetak 1 bebek dengan probabilitas 50%, 2 bebek dengan 25%, 3 bebek dengan 12,5% ...:
sumber
Vim (skrip) di Linux,
4643 byte (4946 dengan:
di awal baris)Dieksekusi sebagai
vim -S filename
atau disisipkan ke dalam menjalankanvim
dengan:
sebelum setiap baris.sumber
\d
lebih[0-9]
. Juga, sepertinya vim tidak memerlukan baris baru, jadi ini bisa 45 byte :)> <> ,
3122 byteCobalah online!
-9 byte berdasarkan revisi Bukan pohon
sumber
l?!;
dan keluar dengan kesalahan.Befunge 98 ,
383025 bytesCobalah online!
Duck
cocok dalam satu stringsumber
#
di baris keduawhitespace within a line is fine
sehingga Anda dapat memotong beberapa tanda kutip (bahkan jika outputnya terlihat aneh)T-SQL ,
70 4443 byte (Banyak bebek)Terima kasih @ Zak Faragher!
Versi Revisi,
54 4340 byte (1 atau 2 bebek)Terima kasih @BradC!
Sepertinya saya tidak bisa menjalankan ini dengan benar di SQL Fiddle , tetapi berfungsi dengan baik di LINQPad dan SSMS.
Tidak yakin apakah ini adalah batasan yang diketahui dari SQL Fiddle atau saya hanya melakukan sesuatu yang salah
sumber
select
keprint
dan mengganti final'duck'select'goose'
dengan'duck(linebreak)goose'
(dengan linebreak literal, tentu saja)while rand()<.5print'duck'print'duck(linebreak)goose'
untuk 43.while
menjadiif
. Cetakan (secara acak) baik satu atau dua bebek, yang (saya percaya) masih memenuhi tantangan.Powershell -
3130 bytePeringatan : Anda kemungkinan besar akan berakhir dengan banyak bebek.
Random
termasuk nilai 0 hinggaInt32.MaxValue
jadi, tergantung pada seberapa acak nomor Anda, ini bisa jadi banyak quacking.sumber
$
di depan(Random)
. Cobalah online!Fission ,
2419 byteCobalah online!
-5 byte terima kasih kepada Martin Ender
sumber
Brachylog , 21 byte
Cobalah online!
Hei, bahasa bulan ini tidak aktif, mari kita mulai sedikit!
sumber
Dibalik
5735 byte (perimeter seluruh bidang adalah19x317x2 charachters) Berkat karhell untuk perbaikannya.Baris kedua menempatkan bebek dan baris baru di tumpukan (mundur) dan mengeluarkannya sebagai string. Setelah 75% kemungkinan untuk kembali ke awal dan mencetak bebek lagi, 25% (ketika tanda tanya memutuskan untuk turun) untuk mencetak angsa dan berhenti.
sumber
55+"kcud",,,,,#v?(linebreak here) @,,,,,"goose"<
akan memotong kode Anda menjadi 35 byte