Corrcey mein Soellign

10

Einführung

Einige von Ihnen haben vielleicht bemerkt, dass ich ein schlampiger Typ bin, wenn ich mein Telefon benutze. Deshalb möchte ich, dass Sie ein Programm schreiben, das meine Tippfehler korrigiert.

Chalkrnge

Geben Sie bei einem falsch geschriebenen Wort alle möglichen Wörter aus, die ich schreiben wollte.

Typso

Die Hauptursache für meine Tippfehler ist die Tatsache, dass ich die falschen Tasten und oft die Taste nebenan gedrückt habe. Folgendes ist mein Tastaturlayout:

q w e r t y u i o p
 a s d f g h j k l
   z x c v b n m
   , [ space ] .

Beachten Sie, dass die unterste Reihe , [ space ] .bei dieser Herausforderung niemals verwendet wird

Aus irgendeinem Grund mache ich nur horizontal Fehler: Ich würde niemals das n anstelle des j treffen, aber ich könnte ein f anstelle eines d treffen .

Zum Beispiel könnte ich das Wort schlampig wie folgt buchstabieren :

akioot

Wo ich von jedem Schlüssel links gegangen bin.

Vergessen Sie jedoch nicht, dass ich nicht unbedingt bei jedem Buchstaben des Wortes einen Fehler machen muss .

Ezsmple

Angenommen, die Eingabe lautet:

vid

Die Möglichkeiten, die das Wort hätte haben können, sind:

vid cid bid
vis cis bis
vif cif bif
vod cod bod
vos cos bos
vof cof bof
vud cud bud
vus cus bus
vuf cuf buf

Von diesen befinden sich die folgenden im Wörterbuch:

cod
cud
bid
bud
bus

Das sollte also Ihre Ausgabe sein.

Regeln

Sie sollten nur die hier gefundene Textdatei als Wörterbuch verwenden: http://mieliestronk.com/corncob_lowercase.txt . Sie müssen diese Datei nicht als Teil Ihrer Byteanzahl zählen.

Alle Eingaben sind ein einzelnes Wort. Sie können Ihre Ausgabe beliebig anzeigen (sofern ein Trennzeichen vorhanden ist).

Angenommen, Sie finden bei allen Eingaben eine Variante, die sich im Wörterbuch befindet.

Wibninf

Der kürzeste Code in Bytes gewinnt.

Beta-Zerfall
quelle
11
Als ich den Titel sah, dachte ich, dass dies eine weitere Herausforderung für Walisisch sein würde ...
Martin Ender
Ich gehe davon aus, dass das Komprimieren des Wörterbuchs Teil der Herausforderung ist und dass ich, wenn ich das Wörterbuch aus einer Datei lese, seine Länge auf meine Punktzahl angerechnet habe, dies jedoch zum Nutzen von Personen explizit angegeben werden sollte, die das Wörterbuch nicht gelesen haben ganz meta. PS Wenn Sie etwas in die Sandbox posten möchten, lassen Sie es dort lange genug, um Feedback zu erhalten.
Peter Taylor
@PeterTaylor Nun, nicht wirklich, es ist hauptsächlich nur das Parsen des Wörterbuchs, das unkomprimiert durchgeführt werden kann.
Beta Decay
Was zähle ich, wenn ich die Datei einbinde? Zwei Bytes für die Abgrenzung ""?
Peter Taylor
@ PeterTaylor Nun ja
Beta Decay

Antworten:

1

Japt, 50 47 Bytes

;D=R+Dv;W=3pUl¹óW ®s3 s1 £DgDbUgY)-X+1}Ãf@~V·bX

Eingabe ist das zu fixierende Wort und das Wörterbuch als Zeichenfolge. Testen Sie es online! (Hinweis: Sie müssen das Wörterbuch manuell in die Zeichenfolge einfügen.)

Wie es funktioniert

;D=R+Dv;W=3pUl¹óW ®s3 s1 £DgDbUgY)-X+1}Ãf@~V·bX  // Implicit: U = input, V = dictionary, R = newline
;                                                // Re-assign preset variables. D = "QWERTYUIOP\nASDFGHJKL\nZXCVBNM";
 D=R+Dv;                                         // Convert D to lowercase and prepend a newline.
        W=3pUl¹                                  // Set W to 3 to the power of U.length.
               óW                                // Create the range [W, W+W).
                  ®                       Ã      // Map each item Z in the range by this function:
                   s3                            //  Take Z.toString(3).
                      s1                         //  Remove the first character.
                                                 //  If the input is two chars long, e.g. "id", the array is now
                                                 //  ["00", "01", "02", "10", "11", "12", "20", "21", "22"].
                         £            }          //  Map each char X and index Y in the string by this function:
                              UgY                //   Get the char at position Y in U.
                            Db   )               //   Take the index of the char in D.
                                  -X+1           //   Subtract X and add 1.
                          Dg                     //   Get the char at that position in D.
                                                 // This maps our array for "id" to:
                                                 // ["of", "od", "os", "if", "id", "is", "uf", "ud", "us"].
                                        f@       // Filter to only the items X where
                                             bX  //  the index of X in
                                           V·    //  the dictionary, split at newlines,
                                          ~      //  is not -1.
                                                 // This filters our array for "id" to:
                                                 // ["of", "if", "id", "is", "us"].
                                                 // Implicit: output last expression
ETH-Produktionen
quelle
2

Python 2.7, 161 159 Bytes

from itertools import*
lambda a,k=' qwertyuiop asdfghjkl zxcvbnm ':set(map(''.join,product(*[k[k.index(l)-1:k.index(l)+2].strip()for l in a])))&set("<dictionary>".split())

lesbare Version

from itertools import *
dictionary=set("<dictionary>".split())
keyboard=' qwertyuiop asdfghjkl zxcvbnm '
x=[]
for letter in input():
 index=keyboard.index(letter)
 x.append(keyboard[index-1:index+2].strip())

words=set(map(''.join,product(*x)))
print words&dictionary
  • 1 Byte dank @TuukkaX gespeichert
Stange
quelle
Sie haben ein nutzloses Leerzeichen an .strip() for.
Yytsi