The monyet Teorema tak terbatas menyatakan bahwa, mengingat waktu yang tak terbatas, mesin mengirimkan seolah tak ada habisnya karakter acak akan selalu ketik teks yang diberikan.
Bagi saya itu terdengar seperti ide yang bagus untuk sebuah tantangan.
Proses
Untuk memonetisasi string A, langkah-langkah berikut harus diambil:
- Ambil string kosong. Kami akan memanggil string ini B.
- Memilih karakter ASCII yang dapat dicetak seragam acak (karakter dalam kisaran
0x20
untuk0x7E
) dan menambahkan karakter yang ke B. - Jika A adalah substring dari B, B adalah string monyet-ized kami. Jika tidak, ulangi langkah 2 hingga A adalah substring dari B.
Proses ini hanya merupakan contoh, metode yang lebih mudah mungkin ada tergantung pada bahasa Anda. Anda tidak perlu mengikuti metode ini dengan tepat, selama distribusi output yang sama tercapai.
Tantangan
Tulis program atau fungsi yang, mengingat string yang tidak kosong dalam format apa pun yang masuk akal , mengembalikan versi string yang di-monyet-kan.
Program Anda hanya perlu bekerja untuk input dengan panjang 3 atau kurang. Untuk input yang lebih lama, itu diperbolehkan untuk mengakhiri lebih awal dengan atau tanpa menghasilkan apa pun.
Contoh
Sayangnya, agak sulit untuk membuat contoh untuk pertanyaan ini karena sifatnya yang acak dan output yang besar.
Namun, saya dapat memberikan satu contoh untuk input hi
, di Hastebin.
Mencetak gol
Karena ini adalah kode-golf , pengiriman dengan byte paling sedikit akan menang.
B
secara langsung dengan menambahkan sejumlahn
karakter acak non-negatif keA
. Satu-satunya masalah sebenarnya adalah untuk mengetahui distribusin
(saya bertaruh pada distribusi geometris).W!}zH+ZOrd\k
, sangat mirip dengan apa yang diketik monyet.Jawaban:
C, 192 byte
Cobalah online!
Ini berantakan sekarang, tapi setidaknya itu berfungsi bahkan untuk kasus-kasus sudut ...
C,636261 byteTerima kasih kepada @Jonathan Frech karena telah menghemat satu byte!
Cobalah online!sumber
i
tumbuh cukup besar yangs[i]
mengacu pada terminator nol dari string (karakter 0).ababc
dan monyet menghasilkan!!abababc
program Anda akan berhenti?Python , 79 byte
Cobalah online!
Secara teori ini masuk akal, tetapi akan macet lebih awal karena batas rekursi python (Anda dapat mengaturnya lebih jauh untuk mendapatkan hasil yang lebih lama)
Python, 84 byte
Cobalah online!
Ini harus bekerja untuk string yang relatif lebih lama, karena tidak bergantung pada rekursi, dengan biaya 5 byte.
sumber
s+'randint(32,126)'
randint(32,126)
akan menghasilkan string nomor tersebut, bukan pemetaan ascii charOhm v2 , 10 byte
Cobalah online!
Penjelasan:
sumber
GNU sed + coreutils, 75 +1 (r flag) = 76 byte
Cobalah online! (Diperlukan banyak upaya untuk mendapatkan jawaban untuk input panjang 2, karena sebagian besar waktu Anda kehabisan waktu perhitungan TIO yang diizinkan.)
Penjelasan:
Benchmark: perkiraan, hanya untuk tujuan penskalaan
sumber
Funky , 64 byte
Ini menggunakan beberapa trik yang saya ingin gunakan di Funky, seperti nama variabel setelah kata kunci seperti dalam
whileS
, dan menggunakan fakta bahwa string secara implisit menjadi induk kestring
pustaka.Tidak disatukan
Cobalah online!
sumber
Haskell , 100 byte
Cobalah online!
Ide dasarnya adalah membuat daftar karakter tanpa batas dengan
randomRs
dan menghentikannya setelah kami menemukan string.sumber
isPrefixOf
tidak ada dalam Prelude standar ...C # (.NET Core) , 86 byte
Saya tidak begitu suka berapa banyak membuat
Random
instance dibutuhkan, tetapi saya tidak berpikir ada jalan keluarnya.Cobalah online!
sumber
Random.Next(Int32,Int32)
adalah eksklusif dan karenanya bukan salah satu dari angka yang dihasilkan. Ini dapat diperbaiki dengan mengganti126
dengan127
.Random
, Anda dapat menghapus deklarasi variabel! 79 bytePerl 5, 31 +2 (-pa) byte
Cobalah online
sumber
\E$
tidak tersediaJapt , 26 byte
Cobalah online!
sumber
R ,
797675 byte-3 byte terima kasih kepada MickyT untuk mengubah sampler acak
Terima kasih -1 byte kepada Robin Ryder karena telah men-tweak sampler acak lagi
Cobalah online!
sumber
intToUtf8(runif(1,32,127))
32+95*runif(1)
sebagai sampler acak Anda.Arang,
151412 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 2 byte karena perbaikan bug selanjutnya di Charcoal. Penjelasan:
sumber
Ruby , 42 byte
Cobalah online!
sumber
Pyth - 14 byte
Cobalah online di sini .
sumber
W!}Qk=+kpOrd\
adalah 14 byte juga, SE mengacaukan pemformatan karena jangkauan yang tidak dapat dicetak tetapi dihasilkan dengan cara yang samaMathematica, 65 byte
Cobalah online!
-3 byte dari Jonathan Frech
sumber
FromCharacterCode[RandomInteger@94+32]
setara dengan yang lebih pendekRandomChoice@CharacterRange[32,126]
.Lua ,
99102 byteCobalah online!
sumber
MATL ,
1716 byteCobalah online!
-1 byte terima kasih kepada Giuseppe
sumber
Oktaf , 62 byte
Cobalah online!
Penjelasan:
Terima kasih banyak kepada Luis Mendo untuk suntingannya!
sumber
isvector
dengannnz
? Danstrfind
olehregexp
. Juga, Anda dapat menggunakanrandi(95)+31
, atau mungkin mengganti seluruhsprintf
pernyataan dengano=[o,randi(95)+31];
(konversi implisit ke char)Japt ,
161411 byteCobalah
sumber
Alice , 21 byte
Cobalah online!
Penjelasan
Ini adalah kerangka kerja untuk sebagian besar program linier yang beroperasi sepenuhnya dalam mode Ordinal (pemrosesan string). IP memantul secara diagonal ke atas dan ke bawah melalui program dua kali, yang berarti bahwa kode sebenarnya agak aneh disisipkan. Perintah dalam urutan sebenarnya dieksekusi adalah:
Mari kita lalui ini:
sumber
Perl 6 , 39 byte
Cobalah online!
(...)[*-1]
mengembalikan elemen terakhir dari urutan yang ditentukan oleh...
, di antaranya:""
adalah elemen pertama;* ~ (" " .. "~").pick
menghasilkan elemen berikutnya dengan menambahkan karakter acak dalam rentang yang sesuai dengan elemen sebelumnya; dan* ~~ /$_/
adalah kondisi akhir, yaitu elemen saat ini cocok dengan argumen input fungsi utama$_
sebagai substring literal.sumber
*~~
for -3 tio.run/##K0gtyjH7n1upoJamYPu/…Java 8,
817978 byte-1 byte terima kasih kepada @ OlivierGrégoire karena menunjukkan saya pada kesalahan (besar>. <) Yang saya buat ..
Penjelasan:
Coba di sini.
sumber
32+Math.random()*95
. Di sana ... bug diperbaiki dan satu byte disimpan! ;-)05AB1E ,
109 byte (-1 @ Emigna)Cobalah online!
Lakukan monyet dengan saya.
sumber
Ω
bukan.R
.QBIC , 33 byte
Penjelasan
Contoh dijalankan:
sumber
PHP, 55 +1 byte
Jalankan sebagai pipa dengan
-nR
. Tidak cocok untuk TIO karena kemungkinan batas waktu habis.Masukkan spasi antara tanda kutip untuk PHP yang lebih tua dari 7.1.
Versi 51 + 1 byte ini akan gagal jika inputnya adalah
0
:sumber
Javascript 74 byte
sebut seperti ini:
sumber
~b.search
sebagai gantinyab.includes
.Julia 0,6 , 53 byte
Cobalah online!
sumber
Pushy ,
2018 byteCobalah online!
Program menyimpan setumpuk
len(input)
karakter yang panjang, dan secara konstan menghapus karakter pertama dan menambahkan karakter acak baru, hingga string input awal tercapai. Setiap karakter dicetak saat ditambahkan, menciptakan efek yang diinginkan.Penjelasan:
sumber
Brachylog , 17 byte
Cobalah online!
Dapat menumpuk overflow secara acak. Ini memanfaatkan dua fitur yang baru ditambahkan di Brachylog: variabel global, dan metapredicate apply-to-tail
ᵗ
.sumber
Pyth, 13 byte
di mana karakter yang tidak patut dicetak adalah 0x7F.
Uji
sumber
Bash 94 byte
Cobalah online
sumber