Corrcey мой Soellign

10

Introduciton

Некоторые из вас, возможно, поняли, что я небрежный типер при использовании моего телефона. Вот почему я хочу, чтобы вы написали программу, которая исправляет мои опечатки.

Chalkrnge

Учитывая слово с ошибкой, выведите все возможные слова, которые я хотел написать.

Typso

Основная причина моих опечаток заключается в том, что я нажимаю не на те ключи и часто нажимаю на ключ по соседству. Вот моя раскладка клавиатуры:

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

Обратите внимание, что нижний ряд , [ space ] .никогда не будет использоваться в этом задании

По какой-то причине я делаю ошибки только по горизонтали: я бы никогда не нажал n вместо j , но мог бы нажать f вместо d .

Например, я мог бы написать слово небрежный как:

akioot

Куда я пошел слева от каждого ключа.

Однако не забывайте, что я не обязательно могу ошибиться в каждой букве слова.

Ezsmple

Допустим, вход:

vid

Возможности этого слова:

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

Из них в словаре есть следующие:

cod
cud
bid
bud
bus

Так что это должно быть вашим выходом.

Rulws

В качестве словаря вы должны использовать только текстовый файл, найденный здесь: http://mieliestronk.com/corncob_lowercase.txt . Вам не нужно считать этот файл как часть вашего количества байтов.

Весь ввод будет одним словом. Вы можете отображать свой вывод любым удобным для вас способом (при условии наличия какого-либо разделителя).

Предположим, что при всем вводе вы найдете вариант, который есть в словаре.

Wibninf

Самый короткий код в байтах побеждает.

Бета распад
источник
11
Когда я увидел название, я подумал, что это будет еще одна проблема с валлийцами ...
Мартин Эндер
Я предполагаю, что сжатие словаря является частью проблемы, и что, если я решу прочитать словарь из файла, я должен посчитать его длину по моему счету, но это следует сделать явным в пользу людей, которые не читали вся мета. PS Если вы собираетесь что-то опубликовать в песочнице, оставьте ее там достаточно долго, чтобы получить обратную связь.
Питер Тейлор,
@PeterTaylor Ну, не совсем, это в основном просто разбор словаря, который можно сделать без сжатия.
Бета-распад
Так что, если я включу файл, что я считаю? Два байта для разграничения ""?
Питер Тейлор
@PeterTaylor Ну да
бета-распад

Ответы:

1

Japt, 50 47 байтов

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

Ввод - это слово, которое нужно исправить, а словарь - как строка. Проверьте это онлайн! (Примечание: вам придется вручную вставить словарь в строку.)

Как это работает

;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
источник
2

Python 2,7, 161 159 байт

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

читаемая версия

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 байт благодаря @TuukkaX
прут
источник
У вас есть бесполезные пробелы в .strip() for.
Yytsi