Corrcey mi Soellign

10

Introduciton

Algunos de ustedes se habrán dado cuenta de que soy un tipo descuidado cuando uso mi teléfono. Es por eso que quiero que escribas un programa que corrija mis errores tipográficos.

Chalkrnge

Dada una palabra mal escrita, muestra todas las palabras posibles que quería escribir.

Typso

La causa principal de mis errores tipográficos se debe al hecho de que presiono las teclas incorrectas y, a menudo, presiono la tecla de al lado. El siguiente es mi diseño de teclado:

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

Tenga en cuenta que la fila inferior , [ space ] .nunca se utilizará en este desafío

Por alguna razón, solo cometo errores horizontalmente: nunca golpearía la n en lugar de la j , pero podría golpear una f en lugar de una d .

Por ejemplo, podría terminar deletreando la palabra descuidada como:

akioot

Donde he ido a la izquierda de cada tecla.

Sin embargo, no olvide que no necesariamente cometo un error en cada letra de la palabra.

Ezsmple

Digamos que la entrada es:

vid

Las posibilidades que podría haber sido la palabra son:

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

De ellos, los siguientes están en el diccionario:

cod
cud
bid
bud
bus

Entonces esa debería ser su salida.

Rulws

Solo debe usar el archivo de texto que se encuentra aquí como su diccionario: http://mieliestronk.com/corncob_lowercase.txt . No tiene que contar este archivo como parte de su recuento de bytes.

Toda entrada será una sola palabra. Puede mostrar su salida de la forma que desee (siempre que haya algún tipo de separador).

Suponga que con todas las entradas, encontrará una variante que está en el diccionario.

Wibninf

El código más corto en bytes gana.

Decaimiento Beta
fuente
11
Cuando vi el título, pensé que este sería otro desafío sobre Gales ...
Martin Ender
Supongo que comprimir el diccionario es parte del desafío, y que si elijo leer el diccionario de un archivo, debería contar su longitud para mi puntaje, pero eso debería hacerse explícito en beneficio de las personas que no han leído el diccionario. todo de meta. PD: si va a publicar algo en el sandbox, déjelo allí el tiempo suficiente para recibir comentarios.
Peter Taylor
@PeterTaylor Bueno, en realidad no, es solo el análisis del diccionario que se puede hacer sin comprimir.
Beta Decay
Entonces, si incluyo el archivo, ¿qué cuento? ¿Dos bytes para la delimitación ""?
Peter Taylor
@PeterTaylor Bueno, sí
Beta Decay

Respuestas:

1

Japt, 50 47 bytes

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

La entrada es la palabra para corregir, y el diccionario como una cadena. ¡Pruébalo en línea! (Nota: tendrá que pegar manualmente el diccionario en la cadena).

Cómo funciona

;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
ETHproductions
fuente
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())

versión legible

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
  • Guardado 1 byte gracias a @TuukkaX
varilla
fuente
Tienes un espacio en blanco inútil en .strip() for.
Yytsi