Diberikan string yang hanya berisi huruf (tidak peka huruf besar-kecil), pisahkan menjadi kata-kata dengan panjang acak yang seragam, menggunakan distribusi di bawah ini, dengan pengecualian kata terakhir, yang dapat berupa panjang yang valid (1-10). Output Anda adalah kata-kata ini, sebagai string yang dipisahkan spasi ( "test te tests"
), array string ( ["test","te","tests"]
), atau format output serupa lainnya.
Distribusi Panjang Kata
Word Length - Fractional Chance / 72 - Rounded Percentage
1 - 2 / 72 - 2.78%
2 - 14 / 72 - 19.44%
3 - 16 / 72 - 22.22%
4 - 12 / 72 - 16.67%
5 - 8 / 72 - 11.11%
6 - 6 / 72 - 8.33%
7 - 5 / 72 - 6.94%
8 - 4 / 72 - 5.56%
9 - 3 / 72 - 4.17%
10 - 2 / 72 - 2.78%
Peluang Anda tidak perlu sama persis - peluangnya bisa dimatikan oleh 1/144
th, atau .69%
, di kedua arah (tapi jelas mereka masih harus meringkas hingga 72/72
atau 100%
).
Data kira-kira ditebak dari halaman keempat, gambar pertama tulisan ini .
Uji Kasus dengan Output Sampel
Perilaku pada kasus uji yang sangat singkat (panjang <11) tidak ditentukan.
Perhatikan bahwa saya membuat ini dengan tangan, sehingga mereka dapat atau tidak mengikuti distribusi seragam di atas.
abcdefghijklmnopqrstuvwxyz
abcd efgh i jklmnopq rs tu vwx yz
thequickbrownfoxjumpedoverthelazydog
t heq uick brown fo xj ump edo vert helazydog
ascuyoiuawerknbadhcviuahsiduferbfalskdjhvlkcjhaiusdyfajsefbksdbfkalsjcuyasjehflkjhfalksdblhsgdfasudyfekjfalksdjfhlkasefyuiaydskfjashdflkasdhfksd
asc uyoi uawer k nb a dhcviua hsid ufe r bfa lskd jhv lkcj haius dy faj se fbks dbfkals jcuyasjehf lkjh falk sd blhsgdf asudyfekjf alk sdjfhlk asefyu iaydskfja shdflk as dhf ksd
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
sumber
Jawaban:
Jelly , 28 byte
Tautan monadik yang mengambil daftar dan mengembalikan daftar daftar.
Cobalah online! (footer memisahkan daftar daftar yang dihasilkan dengan spasi)
Bagaimana?
Menggunakan semua persentase dalam distribusi dibulatkan ke bilangan bulat terdekat (dengan demikian berada dalam ambang batas yang diizinkan 0,69%).
sumber
PHP, 94 byte
Jalankan sebagai pipa dengan
-nR
atau coba online .kerusakan
Catatan:
ywgSKAF:=?
menunjukkan kemungkinan peningkatan -1:[1,15,31,43,51,57,62,66,69,71]
sumber
rand()
setiap perbandingan? Jika tidak, saya bisa menghemat 5 byte.Run as pipe with -nR
. Yaitu kode ini seharusnya menjadi parameter untuk php, bukan file. Gunakanecho <input> | php -nR '<code>'
pada baris perintah untuk mengeksekusi.Oktaf, 108 byte
Cobalah online!
* Mengambil string sebagai input dan output array string.
* Elemen terakhir dari output mungkin berupa string kosong.
sumber
Python 2,
154150147145 byteBaiklah, ini upaya pertama saya di golf kode. Lurus dengan kode:
Indentasi kedua adalah dengan tab char seperti yang Anda lihat di versi TIO saya: Cobalah Online .
Apa yang saya lakukan adalah menambahkan spasi dalam string sesuai dengan distribusi yang diberikan. Saya sangat mengerti distribusi saya dengan menggunakan:
Yang memberi saya:
Yang menurut saya cukup benar. Saya kemudian ulangi proses menambahkan spasi sampai panjang string saya berhasil. Saya juga menambah indeks posisi saya satu per satu setelah menambahkan spasi. Saya harap seseorang dapat membantu saya mengeluarkan garis ini, tetapi saya tidak melihat bagaimana cara mengeluarkannya tanpa memalsukan ruang pertama.
Ketika saya melihat teks saya, saya menyadari bahwa saya harus belajar banyak tentang Situs ini. Bisakah seseorang menautkan saya panduan cara menggunakan fungsi jawaban Stackoverflow di komentar sehingga saya bisa belajar untuk posting saya berikutnya.
Edit:
Saat membaca ulang postingan saya, saya menemukan cara untuk menghilangkan i + = 1. Jadi saya menyimpan 4 byte dengan melakukan itu. Kode baru terlihat seperti ini:
Cobalah online!
Edit:
Saya menemukan bahwa saya dapat menghapus beberapa linebreak.
Sunting: Saya memodifikasi impor saya dan menempatkan definisi i di dalam fungsi.
Cobalah online!
sumber
Dyalog APL, 90 byte
Cobalah online! Tekan Jalankan beberapa kali untuk melihat perubahannya.
Bagaimana?
72?⍨≢⍵
- roll 72 panjang sisi dadu input kali[...]
- indeks di dalam(2 14 16 12 8,⌽1+⍳5)\⍳10
- perluas rentang 10 dengan2 14 16 12 8 6 5 4 3 2
(untuk membuat pembobotan acak)+\
- jumlah kumulatif⍉2(1-⍨≢⍵)⍴
- bentuk sebagai meja zipx y z
→z x, x y, y z
o←1↓
- Jatuhkan elemen pertama(↓(o[1;2]),0),↓o
- membungkus dengan koordinat pertama dipasangkan dengan 0¨
- untuk setiap pasangan (x, y)(2⊃⍵)↓k↑⍨⊃⍵
- ambil input dari indeks x ke y' '~⍨
- dan menghapus spasisumber
Python 2 , 155 byte
Cobalah online!
sumber
Mathematica, 164 byte
mengambil string sebagai input
output array string
sumber
Arang ,
4339 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Menghasilkan spasi tambahan jika kata terakhir adalah ukuran tepat yang dipilih secara acak.
sumber
Assign(Slice(q, i), q);
tidak bekerja sekalipun.Perl 5 , 107 byte
Cobalah online!
106 byte kode +1 untuk -p
sumber
Ruby , 96 + 1 = 97 byte
Menggunakan
-p
bendera.Cobalah online!
sumber
> <> ,
168152 byteCobalah online , atau tonton di taman bermain ikan !
Keacakan rumit dalam> <>: hanya ada satu instruksi acak
x
,, yang menetapkan arah ikan ke atas, bawah, kiri atau kanan. Ini adalah program yang rumit, jadi inilah diagram kode warna untuk membantu Anda:Saya mencoba untuk membagi probabilitas menjadi potongan-potongan sehingga probabilitas di dalam dan di antara potongan cukup sederhana (lebih suka, katakanlah, 1/3 ke 25/72). Saya melakukan ini sebagai berikut:
Ikan mulai pada bit abu-abu dari kode ( X ). Ini cukup standar> <> kode untuk dibaca di semua input. Semakin menarik, jadi mari kita lanjutkan.
Selanjutnya, ikan datang ke bagian hijau terang dan gelap ( Y ). Anda dapat memperhatikan dari pohon probabilitas bahwa tiga cabang utama masing-masing berjumlah 1/3, dan bahwa masing-masing cabang terbagi menjadi 2/3 cabang pembantu dan 1/3 pembantu cabang. Bagian kode yang berwarna hijau menutupi kedua level pohon ini. Pertama, kita memilih angka acak dari 0, 1, 2 dengan peluang masing-masing, di lobus atas bit hijau muda. Kita dapat mensimulasikan peluang 1/3 menggunakan instruksi empat arah
x
dengan memotong salah satu pintu keluar sehingga hanya mengarahkan ikan kembali kex
- maka hanya ada tiga rute melarikan diri darix
, dan dengan simetri mereka memiliki probabilitas yang sama.Berikutnya
x
, sedikit di bawah yang satu ini, mengirimkan ikan ke^
sebelahnya dengan kesempatan 2/3 - perhatikan bahwa ikan membungkus jika berenang pergi darix
- dan turun ke\
dengan 1/3 kesempatan. Ikan kemudian berenang di sepanjang salah satu dari dua ekor bagian hijau muda. Ekor ini secara fungsional sama: masing-masing memeriksa apakah kita mendorong 0, 1 atau 2 sebelumnya, dan bercabang sesuai. Dan ini melengkapi dua tingkat pertama pohon itu.Enam bagian berikutnya ( A - F ), pada dasarnya, gunakan lebih banyak
x
s untuk melabeli ikan lebih jauh, dan kemudian gunakan beberapao
s untuk mencetak sejumlah huruf dari input. Bagian-bagian ini berkisar dari langsung (misalnya biru tua, C , yang hanya mencetak tiga huruf) hingga, yah, tidak begitu mudah (misalnya oranye, D , yang membutuhkan duax
s untuk mensimulasikan pembagian 3 / 8–5 / 8, mencetak huruf dalam beberapa tahap). Rincian ini dibiarkan sebagai latihan. (Saya sangat senang dengan warna kuning, E , yang mengirimkan ikan dalam satu lingkaran-perulangan!)Setelah masing-masing cabang ini, ikan akhirnya mencapai bagian merah muda ( Z ). Ini menarik semua cabang kembali bersama, mencetak spasi, lalu akhirnya membuat ikan melompat ke posisi (2,2) di kisi dan mulai lagi pada yang pertama
x
.Jika penjelasan "rumit" di atas tidak meyakinkan Anda bahwa ini memberikan probabilitas yang benar, saya juga menguji ini pada panjang 65.000 input string (64 KiB, hanya 13 detik di TIO!), Dan hasil distribusi panjang kata yang dihasilkan dulu
Probabilitas ini paling banyak 0,0044 dari probabilitas yang diharapkan.
sumber