Corrcey mój Soellign

10

Introduciton

Niektórzy z was mogli zdać sobie sprawę, że jestem niechlujny typer podczas korzystania z mojego telefonu. Dlatego chcę, żebyś napisał program, który poprawia moje literówki.

Chalkrnge

Biorąc pod uwagę źle napisane słowo, wypisz wszystkie możliwe słowa, które chciałem napisać.

Typso

Główną przyczyną moich literówek jest to, że uderzam w niewłaściwe klawisze i często uderzam w klawisz obok. Oto mój układ klawiatury:

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 ] .

Pamiętaj, że dolny rząd , [ space ] .nigdy nie będzie używany w tym wyzwaniu

Z jakiegoś powodu popełniam błędy tylko w poziomie: nigdy nie uderzyłbym n zamiast j , ale mógłbym trafić f zamiast d .

Na przykład mógłbym przeliterować słowo niechlujny jako:

akioot

Gdzie po lewej stronie każdego klucza.

Nie zapominaj jednak, że niekoniecznie popełniam błąd przy każdej literze tego słowa.

Ezsmple

Powiedzmy, że dane wejściowe to:

vid

Możliwościami tego słowa były:

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

Spośród nich w słowniku znajdują się:

cod
cud
bid
bud
bus

To powinno być twoje wyjście.

Rulws

Powinieneś używać tylko pliku tekstowego znalezionego tutaj jako słownika: http://mieliestronk.com/corncob_lowercase.txt . Nie musisz liczyć tego pliku jako części liczby bajtów.

Wszystkie dane wejściowe będą jednym słowem. Możesz wyświetlać swoje wyniki w dowolny sposób (o ile istnieje jakiś separator).

Załóżmy, że przy wszystkich danych wejściowych znajdziesz wariant, który znajduje się w słowniku.

Wibninf

Najkrótszy kod w bajtach wygrywa.

Rozpad beta
źródło
11
Kiedy zobaczyłem tytuł, pomyślałem, że będzie to kolejne wyzwanie dotyczące Walijczyków ...
Martin Ender
Zakładam, że skompresowanie słownika jest częścią wyzwania i jeśli wybiorę odczytanie słownika z pliku, powinienem policzyć jego długość do mojego wyniku, ale należy to wyraźnie zaznaczyć na korzyść osób, które nie przeczytały cała meta. PS Jeśli masz zamiar opublikować coś w piaskownicy, zostaw to tam wystarczająco długo, aby uzyskać informację zwrotną.
Peter Taylor
@PeterTaylor Cóż, nie do końca, to głównie parsowanie słownika, które można wykonać bez kompresji.
Beta Decay
Więc jeśli wstawię plik, co liczę? Dwa bajty do rozgraniczenia ""?
Peter Taylor
@PeterTaylor No tak
Beta

Odpowiedzi:

1

Japt, 50 47 bajtów

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

Wejście to słowo do naprawienia, a słownik jako ciąg. Przetestuj online! (Uwaga: musisz ręcznie wkleić słownik do ciągu).

Jak to działa

;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
ETHprodukcje
źródło
2

Python 2.7, 161 159 bajtów

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())

wersja czytelna

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
  • Zapisano 1 bajt dzięki @TuukkaX
Pręt
źródło
Masz bezużyteczne białe znaki w .strip() for.
Yytsi