Corrcey benim Soellign


10

Introduciton

Bazılarınız telefonumu kullanırken özensiz bir yazıcı olduğumu fark etmiş olabilirsiniz. Bu yüzden yazım hatalarımı düzelten bir program yazmanızı istiyorum.

Chalkrnge

Yanlış yazılmış bir kelime göz önüne alındığında, yazmak istediğim tüm olası kelimeleri çıktı.

Typso

Yazım hatalarının ana nedeni, yanlış anahtarlara ve sıklıkla yandaki tuşa basmam gerçeğidir. Klavye düzenim aşağıdadır:

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

Alt satırın, , [ space ] .bu meydan okumada asla kullanılmayacağını unutmayın

Bazı nedenlerden ötürü, sadece yatay olarak hata yaparım: j yerine n'ye asla vurmazdım , ancak d yerine f'ye çarpabilirim .

Örneğin, özensiz kelime yazım sonunda olabilir :

akioot

Her anahtarın soluna gittiğim yer.

Ancak, kelimenin her harfinde mutlaka bir hata yapmayabileceğimi unutmayın .

Ezsmple

Diyelim ki girdi:

vid

Sözün olabileceği olasılıklar:

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

Bunlardan, sözlükte aşağıdakiler var:

cod
cud
bid
bud
bus

Yani bu sizin çıktınız olmalıdır.

Rulws

Burada bulunan metin dosyasını yalnızca sözlüğünüz olarak kullanmalısınız: http://mieliestronk.com/corncob_lowercase.txt . Bu dosyayı bayt sayımınızın bir parçası olarak saymanız gerekmez.

Tüm girdiler tek bir sözcük olacaktır. Çıktınızı istediğiniz şekilde görüntüleyebilirsiniz (bir çeşit ayırıcı olduğu sürece).

Tüm girdilerle, sözlükte bir varyant bulacağınızı varsayın.

Wibninf

Bayt cinsinden en kısa kod kazanır.


11
Başlığı gördüğümde, bunun Galce ile ilgili başka bir zorluk olacağını düşündüm ...
Martin Ender

Sözlüğü sıkıştırmanın zorluğun bir parçası olduğunu ve sözlüğü bir dosyadan okumayı seçersem uzunluğunu skoruma doğru saymalıyım, ancak bunu okumamış insanların yararına açıkça belirtilmelidir. tüm meta. Not Sandbox'a bir şey gönderecekseniz, geri bildirim almak için yeterince uzun bırakın.
Peter Taylor

@PeterTaylor Aslında değil, esasen sadece sıkıştırılmamış yapılabilen sözlüğün ayrıştırılması.
Beta Çürümesi

Dosyayı satır içine alırsam ne sayırım? Sınırlama için iki bayt ""?
Peter Taylor

@PeterTaylor Şey evet
Beta

Yanıtlar:


1

Japt, 50 47 bayt

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

Girdi düzeltilecek kelimedir ve dize olarak sözlüktür. Çevrimiçi test edin! (Not: sözlüğü manuel olarak dizeye yapıştırmanız gerekir.)

Nasıl çalışır

;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, 161159 bayt

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

okunabilir versiyon

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
  • @TuukkaX sayesinde 1 bayt kaydedildi

Konumunda yararsız bir boşluğunuz var .strip() for.
Yytsi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.