Ich habe Text geschrieben, aber er sieht zu professionell aus. Ich möchte, dass es so aussieht, als wäre ich wirklich müde, als ich es geschrieben habe. Sie müssen einige Tippfehler einfügen.
Ihre Herausforderung besteht darin, eine beliebige einzelne Textzeile zu verwenden und Tippfehler hinzuzufügen. Dies bedeutet, dass für jeden Charakter eine 10% ige Chance besteht, dass er typisiert wird.
Die Definition von "typofied" ist, dass Sie (nach dem Zufallsprinzip) eine der folgenden Optionen auswählen müssen:
- Dupliziere das Zeichen.
- Löschen Sie den Charakter.
Verschieben Sie das Zeichen um eine Stelle auf der Tastatur. Die "Tastatur" ist definiert als:
qwertyuiop asdfghjkl zxcvbnm
Für die Zeichenverschiebung müssen Sie ein Leerzeichen nach oben, unten, links oder rechts gehen. Dies muss zufällig ausgewählt werden. Die Umschaltoption gilt nur für alphabetische Zeichen. Koffer muss aufbewahrt werden. Seien Sie vorsichtig mit Edge-Cases, wie
m
!
Die Definition von "zufällig" ist, dass das Ergebnis nicht vorhersehbar sein darf (durch Betrachten früherer Ergebnisse). Beispielsweise können Sie nicht jedes zehnte Zeichen typofysieren. Außerdem muss die Zufälligkeit gleichmäßig verteilt sein. Sie können beispielsweise nicht 30% duplizieren, 30% löschen und 40% verschieben. es muss eine 1/3-Chance für jeden sein (1/2 für jeden, wenn es sich um einen nicht-alphabetischen Charakter handelt).
Beispiel Eingabe:
This is some correct text. It is too correct. Please un-correctify it.
Beispielausgabe:
This iissome xorreect tex.. It is too coteect. Please jn-corretify it.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Antworten:
GolfScript, 120 Zeichen
Der Code kann hier getestet werden .
quelle
C 358 Bytes
(Es gibt nur drei Codezeilen, aber aus Gründen der Lesbarkeit habe ich Zeile 3 getrennt.)
Das Array von Zeichenfolgen am Anfang listet die möglichen benachbarten Tasten für jeden Buchstaben des Alphabets auf. Ich musste das "O" (neben "P") verdoppeln, um Berechnungen
random()%1
bei der Auswahl eines verschobenen Zeichens zu vermeiden .Testlauf:
Aktualisieren:
Hier ist eine erweiterte und kommentierte Version desselben Quellcodes:
quelle
char*s[26]
. Der Compiler sollte das selbst herausfinden können.continue
s durchelse
s ersetzen . (Lass das;
wo das erste war).Rubin, 168
Mit einer Array-Indizierungsstrategie etwas kürzer:
Ursprüngliche Version des regulären Ausdrucks (184):
quelle
Kernel#putc
, die Ausgabe auszudrucken, da dies keine Parens erforderte und mir ein Zeichen ersparte. Natürlich wirdputc
nur das erste Zeichen gedruckt, und die Ausgabezeichenfolge kann manchmal zwei Zeichen lang sein. Dummer Fehler. Probieren Sie diese Version aus!Python, 251
Sehr einfache Nachschlagetechnik, für einen Moment hielt ich es für billiger, die Tastatur als ungerichtetes Diagramm zu kodieren, aber der Aufwand für die Erstellung eines solchen Typs in Python erwies sich als unerschwinglich. Da die zufälligen Funktionen von Python zu aussagekräftige Namen haben, benenne ich sie
choice()
ausschließlich in umw
. Die 10% ige Fehlerwahrscheinlichkeit wird behandelt, indem sichw([z]*9+[...])
die neun Kopien eines nicht getippten Zeichens in einer Liste mit einem Tippfehler befinden.-16 Zeichen - danke grc, +2 Zeichen (und Richtigkeit, viel mehr als 2 Zeichen wert) - danke Dhara
quelle
d="SQ VNH XVF...".split()
, entfernen Sie das Leerzeichen danachprint
und ersetzen Sie dasif
/else
durch([...]+[...])*z.isalpha()
. Außerdem benötigen Sie keine Variable,d
da Sie sie nur einmal verwenden.w=__import__('random').choice
(zumindest in Python 3 afaik).input()
undprint()
, um 2 Zeichen zu speichern.C #, 320 Bytes (360 Bytes mit Programmumbruch)
Beinhaltet Unterstützung für "verschobene" Großbuchstaben.
Als eine Funktion (320 Bytes):
Als Programm, das eine Textzeile (360 Bytes) liest:
Eingang ausgang probe:
quelle
Func<int,int> n=x=>r.Next(x);
eine gute Idee zu machen . Wenn nur der Compiler den Typ für Delegierte ableiten könnte ...JS,
303,288,275,273, 274 (Fehlerbehebung)Algorithmus für den Keyslip:
Nicht Golf Version auf Anfrage:
quelle
;
. Nur so kann man sagen, dass es tatsächlich 274 Bytes hat. Außerdem funktioniert es nur mit neueren Javascript- und JScript-Versionen.Perl,
278239197169162156151149Laufen Sie mit
-p
, dann 148 + 1 = 149 Bytes. Z.B:Nicht golfen, mehr oder weniger:
Zuerst dachte ich, dass das zufällige Auswählen eines Elements in einem Array (von 26 Elementen unterschiedlicher Länge) statistisch sauberer (dh zufällig) ist, aber vielleicht war es falsch. (Siehe vorherige Version.) Dieser letzte Versuch folgt den Führern :-), indem Sie eine Zeichenfolge mit -1,1, -11,11 (zufällig) entlanggehen und bis zum gültigen Schritt wiederholen.
Bearbeiten: Dank der Hilfe von tobyink und anderer Optimierungen ist es uns gelungen, die Codegröße erheblich zu reduzieren.
Der letzte Ansatz verwendet einige Tricks bei der Suche nach regulären Ausdrücken, um einen gültigen Schritt entlang der Ersetzungszeichenfolge zu finden und manuelle Überprüfungen zu vermeiden.
Eine weitere Änderung: 5 Bytes aus, weil wir keine Ganzzahlen für Array-Indizes + kleiner Trick mit unzulässigem Array-Index benötigen. Ich habe den gleichen Trick mit
[-4+rand@-]
(dh negativen Indizes) versucht und ein Listenelement entfernt,'',
aber es hat nichts gespeichert.Bearbeiten: Zurück zur Einfachheit - Ersetzen der Bedingung
~~rand 10
durchrand>.1
Spart 2 Bytes ...quelle
sub i
. Sie verwenden kein striktes'QWERTYUIOP0ASDFGHJKL000ZXCVBNM'
Zeichen und können daher als Barewort angegeben werden (speichert zwei Anführungszeichen). Ebenso kann dies'Z'
(obwohl dies bedeutet, dass Sie ein Leerzeichen zwischen und einfügen müssengt
, sodass nur ein Zeichen gespeichert wird). Gesamteinsparung: 4 Zeichen.($n=i$&=~/\pL/?3:2)?--$n?do{...}:$&x2:''
kann umgeschrieben werden als($&x2,'',do{...})[i$&=~/\pL/?3:2]
. Dies bedeutet, dass die Auswertung nicht faul ist (sie berechnet alle drei Möglichkeiten, mit denen das Zeichen ersetzt werden kann, bevor eine Substitutionstechnik festgelegt wird), funktioniert jedoch und speichert nach meinen Berechnungen weitere sieben Zeichen.gt'Z'
- das kann fallengelassen werden. Mit all diesen Änderungen sollten Sie in der Lage sein, es auf 184 Zeichen zu beschränken.$s
zu$,
(diese integrierte Variable ist das Feld Trennzeichen fürprint
, aber Sie sind nicht mehrere Felder überall drucken, so ist es Einbau-Nutzung irrelevant ist, so dass die Variable reif für die Wiederverwendung), dann können Sie den Leerraum beseitigen in$s x3
sie gerade machen$,x3
.PHP, Funktion mit 368 Bytes
Hier ist mein Versuch.
Es ist ein bisschen "Frankencode", aber es funktioniert irgendwie .
Ein "lesbarer" Code:
Der einzige Unterschied zwischen den beiden Codes besteht darin, dass man Tonnen von Tabulatoren und Zeilenumbrüchen hat.
Es erzeugt nicht genau die gleiche Art von "Falschheit", löscht oder ersetzt jedoch ein Zeichen unter den genannten Bedingungen.
Sie können es unter http://writecodeonline.com/php/ ausprobieren .
Kopieren Sie diesen Code und fügen Sie ihn ein:
Bitte sagen Sie mir nach dem Testen, ob es sich um eine gültige Antwort handelt.
quelle
C #, 581 Bytes
und in einem besser lesbaren Format:
quelle
PHP,
326320318315 ZeichenUnd eine besser lesbare und kommentierte Version:
Könnte noch verbessert werden, nehme ich an.
-2, -3 dank Ismael Miguel
quelle
(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)?2:1))
Änderungen für(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)+1))?
und Sie sparen 2 Bytes.($e?0:32)
durch32*!!$e
(ohne Klammern) ersetzen, sparen Sie 2 Byte. Wenn$e
IMMER boolesch ist, können Sie dies tun32*!$e
und 3 Bytes sparen. Dies funktioniert, weil PHP arithmetischen Vorrang hat. Dies bedeutet, dass Multiplikationen und Divisionen vor jeder Addition und Subtraktion durchgeführt werden.Java (475 Byte)
Dies ist mein Versuch in der ausführlichen Sprache, die Java ist. Das Abrufen von Zufallszahlen ist in Java ziemlich lang und das Mapping ist nicht wirklich effizient. Es kann wahrscheinlich verbessert werden.
Verwendungszweck:
Unkomprimiert, Auszeichnungen hinzugefügt:
quelle
AutoHotkey 441 Bytes
Die Eingabe muss als Kommandozeilenparameter angegeben werden, die Ausgabe als Fehlermeldung.
Golf Version
Ungolfing und kommentierte Version (der Unterschied besteht darin, dass diese Version mehr Leerzeichen enthält und die Variablenzuweisungen aus Gründen der Lesbarkeit in separaten Zeilen stehen.)
quelle