ยืนยัน 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แทนของเจแต่ผมอาจจะโดนแทน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
เมื่อผมได้เห็นชื่อผมคิดว่านี้คือจะเป็นสิ่งที่ท้าทายเกี่ยวกับเวลส์อื่น ...
มาร์ตินเอนเดอร์

ฉันคิดว่าการบีบอัดพจนานุกรมเป็นส่วนหนึ่งของความท้าทายและถ้าฉันเลือกที่จะอ่านพจนานุกรมจากไฟล์ฉันควรนับความยาวของมันที่มีต่อคะแนนของฉัน แต่ควรทำให้ชัดเจนเพื่อประโยชน์ของผู้ที่ไม่ได้อ่าน เมตาทั้งหมด ป.ล. ถ้าคุณกำลังจะโพสต์บางสิ่งลงในกล่องทรายให้ปล่อยไว้นานพอที่จะรับข้อเสนอแนะ
Peter Taylor

@PeterTaylor ไม่อย่างนั้นจริงๆแล้วมันเป็นเพียงการแยกวิเคราะห์พจนานุกรมที่สามารถทำได้โดยไม่ถูกบีบอัด
สลายตัวเบต้า

ดังนั้นถ้าฉันอินไลน์ไฟล์ฉันจะนับอะไร สองไบต์สำหรับ delimiting ""?
Peter Taylor

@PeterTaylor ใช่แล้ว
Beta Decay

คำตอบ:


1

Japtap, 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.