Corrcey soellign của tôi


10

Giới thiệu

Một số bạn có thể đã nhận ra rằng tôi là một ông trùm cẩu thả khi sử dụng điện thoại của mình. Đó là lý do tại sao tôi muốn bạn viết một chương trình sửa lỗi chính tả của tôi.

Phấn viết

Đưa ra một từ sai chính tả, xuất ra tất cả các từ có thể mà tôi muốn viết.

Đánh máy

Nguyên nhân chính gây ra lỗi chính tả của tôi là do tôi nhấn nhầm phím và thường nhấn phím bên cạnh. Sau đây là cách bố trí bàn phím của tôi:

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

Lưu ý rằng hàng dưới cùng, , [ space ] .sẽ không bao giờ được sử dụng trong thử thách này

Vì một số lý do, tôi chỉ mắc lỗi theo chiều ngang: tôi sẽ không bao giờ đánh n thay vì j , nhưng tôi có thể đánh f thay vì d .

Ví dụ, cuối cùng tôi có thể đánh vần từ cẩu thả là:

akioot

Nơi tôi đã đi bên trái của mỗi phím.

Tuy nhiên, đừng quên rằng tôi có thể không nhất thiết phải mắc lỗi trên mỗi chữ cái trong từ.

Ezsmple

Giả sử đầu vào là:

vid

Các khả năng mà từ này có thể có là:

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

Trong số đó, những điều sau đây có trong từ điển:

cod
cud
bid
bud
bus

Vì vậy, đó nên là đầu ra của bạn.

Rulws

Bạn chỉ nên sử dụng tệp văn bản được tìm thấy ở đây làm từ điển của mình: http://mieliestronk.com/corncob_lowercase.txt . Bạn không phải tính tập tin này là một phần của số byte của bạn.

Tất cả đầu vào sẽ là một từ duy nhất. Bạn có thể hiển thị đầu ra của mình theo bất kỳ cách nào bạn muốn (miễn là có một số loại dấu tách).

Giả sử rằng với tất cả các đầu vào, bạn sẽ tìm thấy một biến thể có trong từ điển.

Wibninf

Mã ngắn nhất tính bằng byte thắng.


11
Khi tôi nhìn thấy tiêu đề, tôi nghĩ đây sẽ là một thử thách khác về xứ Wales ...
Martin Ender

Tôi cho rằng việc nén từ điển là một phần của thử thách và nếu tôi chọn đọc từ điển từ một tập tin, tôi nên tính độ dài của nó đối với điểm số của mình, nhưng điều đó nên được làm rõ vì lợi ích của những người chưa đọc toàn bộ meta. PS Nếu bạn định đăng một cái gì đó lên hộp cát, hãy để nó ở đó đủ lâu để nhận phản hồi.
Peter Taylor

@PeterTaylor Thật ra không phải vậy, chủ yếu chỉ là phân tích cú pháp từ điển có thể được giải nén.
Beta Decay

Vì vậy, nếu tôi nội tuyến các tập tin, tôi phải làm gì? Hai byte cho việc phân định ""?
Peter Taylor

@PeterTaylor Vâng, vâng
Beta Decay

Câu trả lời:


1

Japt, 50 47 byte

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

Đầu vào là từ cần sửa và từ điển dưới dạng chuỗi. Kiểm tra nó trực tuyến! (Lưu ý: bạn sẽ phải tự dán từ điển vào chuỗi.)

Làm thế nào nó hoạt động

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

phiên bản có thể đọc được

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
  • Đã lưu 1 byte nhờ @TuukkaX

Bạn có một khoảng trắng vô dụng tại .strip() for.
Yytsi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.