Zainspirowany tym pytaniem CR (proszę nie zabijaj mnie za przeglądanie CR)
Spec
Prawdopodobieństwa błędnej pisowni słowa to:
- 1/3 czasu nie zmienia wyniku
- 1/3 czasu usuwa losową postać
- 1/3 czasu duplikuje losową postać
Szansa na usunięcie / zduplikowanie danego znaku na wejściu powinna być taka sama dla wszystkich znaków.
Jeśli dwa kolejne znaki są takie same (rozróżnia małe i wielkie litery), prawdopodobieństwo modyfikacji jednego z nich powinno być takie samo, jak gdyby były jednym znakiem. To znaczy, że wyniki dla AA
(które są AA
lub A
lub AAA
) powinny mieć takie samo prawdopodobieństwo.
Wprowadzanie będzie zawierać tylko litery dla uproszczenia.
Przykłady
Wprowadzany jest pierwszy wiersz, kolejne wiersze to wszystkie możliwe błędy ortograficzne. Każda linia powinna mieć takie samo prawdopodobieństwo wyjścia, dane wejściowe są wykluczone w przykładach, ale nadal powinno mieć 1/3 prawdopodobieństwa wyjścia.
foo
fo
oo
ffoo
fooo
PPCG
PPC
PPG
PCG
PPPCG
PPCCG
PPCGG
foo
: jeśli usuniesz znak, może on stać się (-f) oo, f (-o) o i fo (-o). Takfo
powinno być dwa razy częściejoo
, ale trzeba powiedzieć, każda linia ma równe prawdopodobieństwo.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.
Odpowiedzi:
Pip ,
3827 bajtówTo była frajda - skorzystałem z możliwości wyrażania regularnego Pipa i zmiennych ciągów, których od dłuższego czasu nie wyciągałem. Pobiera dane wejściowe za pomocą argumentu wiersza polecenia.
Wyjaśnienie:
Wypróbuj online!
źródło
Ruby,
6455 + 1 (p
flaga) = 56 bajtówDane wejściowe są wprowadzane do linii STDIN bez końca nowej linii.
źródło
CJam (21 bajtów)
Demo online
Sekcja
źródło
JavaScript (ES6), 107
Mniej golfa
Test
źródło
Java 7,
189180178 bajtówPrzypadki bez golfa i testy:
Wypróbuj tutaj.
Możliwe wyjście:
źródło
Python 2, 134 bajty
Białe spacje w pętli for to tabulatory.
Wypróbuj na Ideone
źródło
Pyth - 17 bajtów
Ten faktycznie właściwie obsługuje specjalne przypadki z kolejnymi znakami.
Pakiet testowy .
źródło
APL, 21
Zaczyna się to od utworzenia wektora zer z 1 w losowej pozycji. Następnie mnoży go przez losową liczbę od 1 do 3. +1 i mod 3 uzyskuje wektor ze wszystkimi 1s i jedną losową pozycją 0,1 lub 2.
Wreszcie ⍵ / ⍨ mówi, że każdą literę należy pisać n razy, gdzie n to liczby w wektorze.
Wypróbuj na tryapl.org
źródło
Python 2, 123 bajty
źródło
JavaScript (ES6), 103
źródło
APL, 27 bajtów
Wyjaśnienie:
Test:
źródło