Tugas
Tugas ini adalah untuk menulis sebuah program yang output konsisten tetapi sebaliknya sewenang-wenang bilangan bulat positif (begitu ketat lebih besar dari 0). Inilah intinya: ketika sumber diulang kali (kode ditambahkan / digabungkan ke dirinya sendiri), program harus memiliki Probabilitas N untuk menghasilkandan probabilitas yang tersisa dari untuk menghasilkantidak berubah.
Contoh
Mari kita asumsikan bahwa sumber awal Anda adalah XYZ
dan menghasilkan integer 3
. Kemudian:
Untuk :
XYZXYZ
harus menghasilkan dengan probabilitas (50% dari waktu) dandengan probabilitas juga (50% dari waktu).Untuk :
XYZXYZXYZ
harus menghasilkan dengan probabilitas (66.666% dari waktu) dandengan probabilitas (33,333% dari waktu)Untuk :
XYZXYZXYZXYZ
harus menghasilkan dengan probabilitas (75% dari waktu) dan dengan probabilitas (25% dari waktu)
dan seterusnya....
Aturan
Anda harus membangun program lengkap . Outputnya harus dicetak ke STDOUT.
Program Anda, secara teori, harus menghasilkan setiap nilai yang mungkin dengan probabilitas yang disebutkan di atas, tetapi sedikit penyimpangan dari hal ini karena penerapan acak baik-baik saja ( asalkan implementasi bukan dari distribusi yang berbeda - Anda tidak dapat menggunakan distribusi normal untuk menghemat byte ) .
Program harus (sekali lagi, dalam teori) bekerja untuk nilai besar secara sewenang-wenang , tetapi batasan teknis karena ketepatannya baik untuk besar .
Output harus dalam basis 10 (dilarang di basis lain atau dengan notasi ilmiah dilarang). Trailing / spasi terdepan dan nol terkemuka diizinkan.
Sumber awal harus (tentu saja) setidaknya sepanjang 1 byte. Anda mungkin tidak menganggap baris baru antara salinan sumber Anda. Program tidak boleh mengambil input (atau memiliki input kosong yang tidak digunakan).
Ini adalah kode-golf , jadi skor jawaban adalah panjang dari sumber (asli) dalam byte, dengan skor yang lebih rendah lebih baik.
Catatan: Tantangan ini adalah versi yang lebih sulit dari ini .
sumber
Jawaban:
R ,
6635 byte-29 byte terima kasih untuk digEmAll .
-2 byte terima kasih kepada Giuseppe .
Cobalah online!
Periksa distribusi untuk N = 4.
Kuncinya adalah tugas ke kananN kali, panggilan N−1 pertama
->
. Ketika kode ini dikalikansample
akan ditetapkanA
, dan hanya panggilan terakhir yang akan dicetak.Asli, solusi yang lebih berbelit-belit:
R , 66 byte
Cobalah online!
Coba online (diulang 3 kali)!
Menggunakan dua trik: 1) memanggil fungsi utama yang menarik
?
, sehingga kita dapat memanggilnya tanpa mengakhiri program dengan braket, dan 2) menggunakan variabelT
danTT
, dengan kode yang dimulai denganT
dan diakhiri dengan?T
.F
adalah penghitung iterasi.?
didefinisikan ulang sebagai fungsi yang mengambil argumen boolean: jika inputnya?
adalahTRUE
(atauT
), ia melakukan pengambilan sampel acak yang diperlukan; jika inputnya adalahFALSE
(atau0
), itu tidak melakukan apa-apa. NilaiTT
didefinisikan sebagai0
, sehingga?T
melakukan pengambilan sampel tetapi?TT
tidak melakukan apa pun.Ketika sumber diulang, terlihat seperti ini:
jadi panggilan tengah
?TT
tidak menghasilkan apa-apa selain panggilan akhir?T
menghasilkan hasil acak.sumber
->
digunakan dalam kode golf dalam situasi di mana<-
tidak bisa; ini sangat keren!!Python 3 ,
8179 byteCobalah online!
-1 byte terima kasih kepada @Nishioka
Ini adalah salah satu solusi Python 3 yang tidak mengakses sumber program secara langsung. Melakukan ini dalam Python 3 lebih menantang daripada Python 2 karena pernyataan pencetakan normal diakhiri dengan tanda kurung tutup sehingga tidak ada banyak pilihan untuk mengubah perilakunya di blok sumber awal berikutnya. Akan menarik untuk melihat lebih banyak solusi kreatif dalam Python 3.
sumber
+0 if[]else 1
Bash , 31 byte
Cobalah online!
trap ... 0
akan menjalankan kode yang terdapat pada saat keluar. Berulangtrap
akan menimpa yang lama. Tanda kutip$[arithmetic expansion]
dijalankan setiap kali perangkap baru diatur.Zsh dapat menyimpan satu byte dengan
<<<
:sumber
Jelly , 7 byte
Cobalah online!
sumber
05AB1E , 7 byte
Cobalah online!
sumber
Python 3 ,
787675 byteMenggunakan trik yang sama seperti pada tautan yang diposting, ini Python (dengan x = 1).
Cobalah online!
-2 byte terima kasih kepada Tn. Xcoder untuk
(n-1)
formulanya~-n
yang memiliki prioritas lebih tinggi dari*
-1 byte berkat Nishioka
sumber
import random;n=len(*open(__file__))//76;print(1+~-n*(random.random()<1/n))#
harus bekerja untuk -2 byterandom()<1/n
;-)Dyalog APL,
2524232221 byteCobalah online!
sumber
Gaia ,
17151413 byteCobalah online!
Saya secara acak memperhatikan perilaku
Øg
kemarin ketika melihat melalui dokumen, yang sangat membantu.sumber
Perl 5,
2826 byte-2 byte terima kasih kepada @Grimy
TIO
sumber
1 if!++$x;say 1<rand$x||$x
Ruby , 40 byte
Cobalah online!
Cobalah online (disalin 3 kali)!
Port ruby dari jawaban Python ini .
Rubi , 38 byte
2 byte disimpan dengan membaca file:
Cobalah online!
sumber
Pesona Rise , 31 byte
Cobalah online!
Gunakan struktur yang sama dengan jawaban ini untuk menghitung berapa kali sumber telah digandakan:
Hanya alih-alih mengeluarkan nomor ke-n dalam daftar, kami menggunakan nilai itu untuk secara acak menghasilkan angka, jika hasilnya bukan 0, cetak 1, atau cetak nomor itu.
sumber
Japt ,
98 byteUji itu | Gandakan | Tripled,
Verifikasi distribusi 10.000 kali setelah 10 kali
Asli,
1311109 bytePerhatikan ruang trailing.
Uji itu | Gandakan | Tripled,
Verifikasi distribusi 10.000 kali setelah 10 kali
sumber
JavaScript ( JavaScript shell 71 ), 78 byte
Tidak ada tautan tio, spidermonkey di tio terlalu tua ...
Firefox (Spidermonkey) menganggap komentar sebagai bagian dari fungsi
f
. Hasilnya,(''+f).length
akan menjadib+79n
tempat b <78, dan (n +1) adalah waktu kode sumber diulang.Buggy ini (? Saya tidak yakin. Saya lebih suka bug dari spesifikasi JavaScript daripada interpreter mana pun ) perilaku telah dikirimkan ke BMO oleh orang lain tepat setelah jawaban ini diposting: https://bugzilla.mozilla.org/ show_bug.cgi? id = 1579792 . (Baik dari bmo thread maupun tweet yang diposting oleh saya.)
sumber
(async x=>x)()
? Mengapa async?async
hronous. Jadi panggilan balikx=>f(...)
akan dipanggil setelah fungsif
didefinisikan.C # (Visual C # Interactive Compiler) ,
133114112 byteIni adalah pertama (dan mudah-mudahan terakhir) saya pernah menggunakan arahan C # preprocessor.
Cobalah online!
sumber
Arang , 12 byte
Cobalah online! Berdasarkan jawaban saya untuk pertanyaan terkait. Keluaran
n
dengan probabilitas¹/ₙ
, jika tidak1
. Penjelasan:sumber