Bu, en düşük puanın kazandığı özel bir puanlama sistemi ile kod zorluğudur.
Giriş
Birçok akıllı telefon , parmağınızı 2B sanal klavyede kaydırarak metin girmeye izin verir . Bu teknoloji genellikle, büyük olasılıkla en az muhtemel olarak sıralanmış, tahmin edilen kelimelerin bir listesini çıkaran bir tahmin algoritması ile birleştirilir.
Bu mücadelede:
- Biz karşısında tokatlamak için gidiyoruz tek boyutlu klavyenin 26 harf bir alt kümesi ile sınırlıdır.
- Herhangi bir tahmin algoritması olmayacaktır : her kelimenin "kaydırma sırası" ile benzersiz bir şekilde tanımlanmasını istiyoruz.
- Klavyenin, belirli bir kelime listesi için toplam hareket sayısının en aza indirileceği şekilde optimize edilmesini istiyoruz .
Bir boyutta kaydırma
Aşağıda, tüm harfleri içeren sözlükbilimsel olarak sıralanmış 1D klavye bulunmaktadır:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Not: Cep telefonundan göz atıyorsanız, bu birkaç satırda görüntülenebilir. Lütfen tek bir satır olarak düşünün.
Böyle bir klavyede ' GOLF ' kelimesini girmek için :
- başlamak G
- için sağa kaydırın O
- sola kaydırın F
Çünkü ve Larasında bulunur , orada durmadan kaydırmaya devam ederiz.OF
Yani bu klavyedeki ' GOLF ' tokatlamak sırası GOF.
Daha genel olarak:
- İlk ve son harfler her zaman dahil edilir.
- Diğer harfler, yalnızca ve onlardan hemen sonra yön değişikliği gerektiğinde dahil edilir.
Tekrarlanan harfler tek harflerle aynı şekilde ele alınmalıdır. Örneğin, yukarıdaki klavyede:
- ' LOOP ' şu şekilde kodlanır LP(durma olmadan O)
- ' GOOFY ' olarak kodlanır GOFY( Odahil edilir çünkü orada bir yön değişikliği vardır - iki katına çıkmadığı için değil)
Klavye optimizasyonu
Aşağıdaki kelime listesini düşünelim: [' PROGRAMMING ', ' PUZZLES ', ' AND ', ' CODE ', ' GOLF '].
Bu kelimeleri yazmak için 16 ayrı harfe ihtiyacımız var, bu yüzden sadece 16 harfli klavyeye ihtiyacımız var. Aşağıdakiler - tekrar - sözlükbilimsel olarak sıralanmıştır:
ACDEFGILMNOPRSUZ
Bu klavye ile kelimeler şu şekilde kodlanır:
- PROGRAMLAMA : PRGRAMING(9 hareket)
- BULMACALAR : PZES(4 hareket)
- VE : AND(3 hamle)
- KOD : CODE(4 hamle)
- GOLF : GOF(3 hamle)
Bu , tüm kelimeler için toplam 23 hamle .
Ancak bu klavye ile çok daha iyisini yapabiliriz:
CGODSELZNUIFRPAM
Hangi verir:
- PROGRAMLAMA : PGMG(4 hareket)
- BULMACALAR : PS(2 hareket)
- VE : AD(2 hareket)
- KOD : CE(2 hamle)
- GOLF : GF(2 hareket)
toplamda sadece 12 hamle .
Klavye puanlaması
Daha düşük, daha iyi.
Meydan okuma
- Bir kelime listesi verildiğinde, kodunuzun bu liste için geçerli bir klavye çıkarması gerekir . Her sözcük benzersiz bir kaydırma dizisi oluşturuyorsa, klavye geçerli sayılır.
Size 11 bağımsız kelime listesi verilecektir. Puanınız şuna eşit olacaktır:
Sen edebilirsiniz puanınızı kontrol etmek için bu komut dosyasını kullanmak .
score()
Fonksiyon ilk parametre ve ikinci parametre olarak 11 klavye dize dizisi (olgu fark etmez) gibi kod uzunluğunu bekliyor.En düşük puana sahip sunum kazanır. Beraberlik durumunda, ilk gönderilen başvuru kazanır.
Ek kurallar
- Kodunuz deterministik olmalıdır (yani belirli bir giriş için her zaman aynı çıktıyı döndürmelidir).
- A) zaman aşımına uğramayan bir test bağlantısı (örn. TIO'da) sağlamalısınız veya B) cevabınızın gövdesinde oluşturulan klavyeleri içermelidir.
- Kelimeleri tam büyük veya küçük harf olarak alabilirsiniz. Karışık vakalar yasaktır.
- Girişin en az bir çözümü olduğu garanti edilmektedir.
- Tüm kelimeler en az 2 ayrı harften oluşur.
- Geçerli bir giriş için kodunuzun çalışması gerekir. Sabit kodlu sonuçlara dayanmadığından emin olmak için açıklanmayan bir kelime listesi ile test edilecektir.
- Gönderimlerin ilk test senaryoları için optimize edilmediğinden emin olmak için herhangi bir zamanda test paketinin boyutunu artırma hakkını saklı tutarım.
Kelime listeleri
1) Sanity check #1 (only 4 valid solutions: HES, SEH, ESH or HSE)
SEE, SHE
2) Sanity check #2 (16 valid solutions, of which 4 are optimal: COLD, DOLC, DLOC or CLOD)
COLD, CLOD
3) Sanity check #3
ACCENTS, ACCESS
4) Warm-up
RATIO, NATION, NITRO, RIOT, IOTA, AIR, ART, RAT, TRIO, TRAIN
5) Pangram
THE, QUICK, BROWN, FOX, JUMPS, OVER, LAZY, DOG
6) Common prepositions
TO, OF, IN, FOR, ON, WITH, AT, BY, FROM, UP, ABOUT, INTO, OVER, AFTER
7) Common verbs
BE, HAVE, DO, SAY, GET, MAKE, GO, KNOW, TAKE, SEE, COME, THINK, LOOK, WANT, GIVE, USE, FIND, TELL, ASK, WORK, SEEM, FEEL, TRY, LEAVE, CALL
8) Common adjectives
GOOD, NEW, FIRST, LAST, LONG, GREAT, LITTLE, OWN, OTHER, OLD, RIGHT, BIG, HIGH, DIFFERENT, SMALL, LARGE, NEXT, EARLY, YOUNG, IMPORTANT, FEW, PUBLIC, BAD, SAME, ABLE
9) Common nouns
TIME, PERSON, YEAR, WAY, DAY, THING, MAN, WORLD, LIFE, HAND, PART, CHILD, EYE, WOMAN, PLACE, WORK, WEEK, CASE, POINT, GOVERNMENT, COMPANY, NUMBER, GROUP, PROBLEM, FACT
10) POTUS
ADAMS, ARTHUR, BUCHANAN, BUREN, BUSH, CARTER, CLEVELAND, CLINTON, COOLIDGE, EISENHOWER, FILLMORE, FORD, GARFIELD, GRANT, HARDING, HARRISON, HAYES, HOOVER, JACKSON, JEFFERSON, JOHNSON, KENNEDY, LINCOLN, MADISON, MCKINLEY, MONROE, NIXON, OBAMA, PIERCE, POLK, REAGAN, ROOSEVELT, TAFT, TAYLOR, TRUMAN, TRUMP, TYLER, WASHINGTON, WILSON
11) Transition metals
SCANDIUM, TITANIUM, VANADIUM, CHROMIUM, MANGANESE, IRON, COBALT, NICKEL, COPPER, ZINC, YTTRIUM, ZIRCONIUM, PLATINUM, GOLD, MERCURY, RUTHERFORDIUM, DUBNIUM, SEABORGIUM, BOHRIUM, HASSIUM, MEITNERIUM, UNUNBIUM, NIOBIUM, IRIDIUM, MOLYBDENUM, TECHNETIUM, RUTHENIUM, RHODIUM, PALLADIUM, SILVER, CADMIUM, HAFNIUM, TANTALUM, TUNGSTEN, RHENIUM, OSMIUM