Koreksi Soellign saya

10

Pengantar

Beberapa dari Anda mungkin telah menyadari bahwa saya adalah tipper ceroboh ketika menggunakan ponsel saya. Itu sebabnya saya ingin Anda menulis sebuah program yang mengoreksi kesalahan ketik saya.

Chalkrnge

Diberi kata yang salah eja, tampilkan semua kata yang mungkin ingin saya tulis.

Salah ketik

Penyebab utama kesalahan ketik saya adalah fakta bahwa saya menekan tombol yang salah dan sering menekan tombol di sebelah. Berikut ini adalah tata letak keyboard saya:

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

Perhatikan bahwa baris bawah, , [ space ] .tidak akan pernah digunakan dalam tantangan ini

Untuk beberapa alasan, saya hanya membuat kesalahan secara horizontal: Saya tidak akan pernah menekan n sebagai ganti j , tetapi saya mungkin menekan f bukan d .

Misalnya, saya bisa mengeja kata dengan ceroboh sebagai:

akioot

Di mana saya telah pergi dari setiap tombol.

Namun, jangan lupa bahwa saya mungkin tidak selalu membuat kesalahan pada setiap huruf dalam kata.

Ezsmple

Katakanlah inputnya adalah:

vid

Kemungkinan kata itu bisa adalah:

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

Dari semua itu, berikut ini ada di kamus:

cod
cud
bid
bud
bus

Jadi itu harus menjadi output Anda.

Rulws

Anda hanya harus menggunakan file teks yang ditemukan di sini sebagai kamus Anda: http://mieliestronk.com/corncob_lowercase.txt . Anda tidak harus menghitung file ini sebagai bagian dari jumlah byte Anda.

Semua input akan menjadi satu kata. Anda dapat menampilkan output dengan cara apa pun yang Anda inginkan (selama ada semacam pemisah).

Asumsikan bahwa dengan semua input, Anda akan menemukan varian yang ada di kamus.

Wibninf

Kode terpendek dalam byte menang.

Peluruhan Beta
sumber
11
Ketika saya melihat judulnya, saya pikir ini akan menjadi tantangan lain tentang Welsh ...
Martin Ender
Saya berasumsi bahwa mengompresi kamus adalah bagian dari tantangan, dan bahwa jika saya memilih untuk membaca kamus dari file saya harus menghitung panjangnya terhadap skor saya, tetapi itu harus dibuat eksplisit untuk kepentingan orang-orang yang belum membaca seluruh meta. NB. Jika Anda akan memposting sesuatu ke kotak pasir, biarkan di sana cukup lama untuk mendapatkan umpan balik.
Peter Taylor
@PeterTaylor Yah tidak juga, itu terutama hanya penguraian kamus yang dapat dilakukan tanpa kompresi.
Beta Decay
Jadi jika saya sebaris file, apa yang harus saya hitung? Dua byte untuk pembatas ""?
Peter Taylor
@ PeterTaylor Yah ya
Peluruhan Beta

Jawaban:

1

Japt, 50 47 byte

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

Input adalah kata untuk diperbaiki, dan kamus sebagai string. Uji secara online! (Catatan: Anda harus menempelkan kamus secara manual ke dalam string.)

Bagaimana itu bekerja

;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
Produksi ETH
sumber
2

Python 2.7, 161 159 byte

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 yang mudah dibaca

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
  • Disimpan 1 byte berkat @TuukkaX
tongkat
sumber
Anda memiliki ruang kosong yang tidak berguna di .strip() for.
Yytsi