Inspiriert von dieser CR-Frage (bitte töte mich nicht, wenn ich CR durchstöbere)
Spec
Die Wahrscheinlichkeiten für einen Rechtschreibfehler sind:
- 1/3 der Zeit ändert sich nicht die Ausgabe
- 1/3 der Zeit entfernt ein zufälliges Zeichen
- 1/3 der Zeit dupliziert ein zufälliges Zeichen
Die Chance, ein bestimmtes Zeichen in der Eingabe zu entfernen / zu duplizieren, sollte für alle Zeichen gleich sein.
Wenn zwei aufeinanderfolgende Zeichen gleich sind (Groß- und Kleinschreibung beachten), sollte die Wahrscheinlichkeit, dass eines von ihnen geändert wird, so sein, als ob es sich um ein Zeichen handelt. Dh die Ausgänge für AA
(die AA
oder A
oder sind AAA
) sollten alle die gleiche Wahrscheinlichkeit haben.
Die Eingabe enthält der Einfachheit halber nur Buchstaben.
Beispiele
Die erste Zeile wird eingegeben, die folgenden Zeilen sind mögliche Rechtschreibfehler. Jede Zeile sollte die gleiche Ausgabewahrscheinlichkeit haben, die Eingabe wird in den Beispielen ausgeschlossen, sollte jedoch eine Ausgabewahrscheinlichkeit von 1/3 haben.
foo
fo
oo
ffoo
fooo
PPCG
PPC
PPG
PCG
PPPCG
PPCCG
PPCGG
foo
: Wenn Sie ein Zeichen entfernen, kann es zu (-f) oo, f (-o) o und fo (-o) werden. Solltefo
also doppelt so wahrscheinlich seinoo
, aber du sagst, jede Zeile hat die gleiche Wahrscheinlichkeit.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.
Antworten:
Pip ,
3827 BytesDas hat Spaß gemacht - ich musste Pips Regex und veränderbare String-Fähigkeiten verwenden, die ich eine Weile nicht mehr herausgezogen hatte. Übernimmt die Eingabe über das Befehlszeilenargument.
Erläuterung:
Probieren Sie es online!
quelle
Ruby,
6455 + 1 (p
Flag) = 56 BytesInput ist eine Zeile von STDIN, die ohne Zeilenumbruch eingespeist wird.
quelle
CJam (21 Bytes)
Online-Demo
Präparation
quelle
JavaScript (ES6), 107
Weniger golfen
Prüfung
quelle
Java 7,
189180178 BytesUngolfed & Testfälle:
Probieren Sie es hier aus.
Mögliche Ausgabe:
quelle
Python 2, 134 Bytes
Leerzeichen in der for-Schleife sind Tabulatoren.
Probieren Sie es auf Ideone
quelle
Pyth - 17 Bytes
Dieser behandelt die Sonderfälle mit fortlaufenden Zeichen tatsächlich korrekt.
Test Suite .
quelle
APL, 21
Dies beginnt mit der Erzeugung eines Nullvektors mit einer 1 in zufälliger Position. Dann multipliziert man es mit einer Zufallszahl zwischen 1 und 3. +1 und mod 3 erhält einen Vektor mit allen Einsen und einer zufälligen Position von 0,1 oder 2.
Schließlich sagt ⍵ / ⍨, dass jeder Buchstabe n-mal geschrieben werden sollte, wobei n die Zahlen im Vektor sind.
Probieren Sie es auf tryapl.org
quelle
Python 2, 123 Bytes
quelle
JavaScript (ES6), 103
quelle
APL, 27 Bytes
Erläuterung:
Prüfung:
quelle