Terinspirasi oleh pertanyaan CR ini (tolong jangan bunuh saya karena menjelajahi CR)
Spec
Peluang salah mengeja kata adalah:
- 1/3 dari waktu tidak mengubah output
- 1/3 dari waktu menghapus karakter acak
- 1/3 dari waktu duplikat karakter acak
Kesempatan untuk menghapus / menduplikasi karakter yang diberikan dalam input harus sama untuk semua karakter.
Jika dua karakter berurutan adalah sama (peka huruf besar kecil), kemungkinan salah satu dari mereka harus diubah sama seperti jika mereka adalah satu karakter. Yaitu output untuk AA
(yang AA
atau A
atau AAA
) semua harus memiliki probabilitas yang sama.
Masukan hanya akan berisi huruf untuk kesederhanaan.
Contohnya
Baris pertama adalah input, baris berikut semuanya kemungkinan salah eja. Setiap baris harus memiliki probabilitas yang sama untuk menjadi output, input tidak termasuk dalam contoh tetapi masih harus memiliki probabilitas 1/3 dari output.
foo
fo
oo
ffoo
fooo
PPCG
PPC
PPG
PCG
PPPCG
PPCCG
PPCGG
foo
: jika Anda menghapus karakter, karakter itu bisa menjadi (-f) oo, f (-o) o, dan fo (-o). Jadifo
harus dua kali lebih mungkinoo
, tetapi Anda mengatakan setiap baris memiliki probabilitas yang sama.If two consecutive characters are the same (case-sensitive), the probability of one of them being modified should be the same as if they are one character. I.e. the outputs for AA (which are AA or A or AAA) should all have the same probability.
Jawaban:
Pip ,
3827 byteIni menyenangkan - harus menggunakan regex Pip dan kemampuan string yang bisa berubah, yang tidak saya tarik dalam beberapa saat. Mengambil input melalui argumen baris perintah.
Penjelasan:
Cobalah online!
sumber
Ruby,
6455 +1 (p
bendera) = 56 byteInput adalah garis STDIN yang disalurkan tanpa tertinggal baris baru.
sumber
CJam (21 byte)
Demo online
Pembedahan
sumber
JavaScript (ES6), 107
Kurang golf
Uji
sumber
Java 7,
189180178 byteKasus yang tidak disatukan & uji:
Coba di sini.
Output yang mungkin:
sumber
Python 2, 134 byte
Spasi putih di dalam untuk loop adalah tab.
Cobalah di Ideone
sumber
Pyth - 17 byte
Yang ini benar-benar menangani kasus khusus dengan karakter berturut-turut dengan benar.
Test Suite .
sumber
APL, 21
Ini dimulai dengan membuat vektor nol dengan 1 pada posisi acak. Kemudian gandakan dengan angka acak antara 1 dan 3. +1 dan mod 3 memperoleh vektor dengan semua 1s dan satu posisi acak 0,1 atau 2.
Akhirnya, ⍵ / ⍨ mengatakan bahwa setiap huruf harus ditulis n kali, di mana n adalah angka dalam vektor.
Cobalah di tryapl.org
sumber
Python 2, 123 byte
sumber
JavaScript (ES6), 103
sumber
APL, 27 byte
Penjelasan:
Uji:
sumber