Коррсі, мій Солінгн


10

Інтроцитон

Хтось із вас, можливо, зрозумів, що я неохайний машинописець під час використання телефону. Тому я хочу, щоб ви написали програму, яка виправляє мої помилки.

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

Отже, це має бути вашим результатом.

Правила

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

Весь вхід буде одним словом. Ви можете відображати свій вихід будь-яким способом (доки є якийсь роздільник).

Припустимо, що з усім введенням ви знайдете варіант, який є у словнику.

Wibninf

Виграє найкоротший код у байтах.


11
Побачивши назву, я подумав, що це стане ще одним викликом щодо валлійців ...
Мартін Ендер

Я припускаю, що стиснення словника є частиною завдання, і якщо я вирішу прочитати словник з файлу, я повинен рахувати його довжину до моєї оцінки, але це має бути явним для користі людям, які не читали ціле мета. PS Якщо ви збираєтесь розмістити щось у пісочниці, залиште його там досить довго, щоб отримати зворотній зв'язок.
Пітер Тейлор

@PeterTaylor Ну не дуже, це в основному лише розбір словника, який можна зробити нестисненим.
Бета-розпад

Тож якщо я вкладу файл, що я рахую? Два байти для розмежування ""?
Пітер Тейлор

@PeterTaylor Ну так
Beta Decay

Відповіді:


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

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.