1D klavyede kaydırmayı optimize etme


16

Bu, en düşük puanın kazandığı özel bir puanlama sistemi ile 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ı

n

Σk=1nmk2

mkk

92+42+32+42+32=13142+22+22+22+22=32

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:

    S+L
    SL

    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

Korumalı alan (şimdi silindi).
Arnauld

Bilin bakalım mücadeleyi başka kim biliyor ...
Outgolfer Erik

Bu kuralı ekleyecekseniz: "Kodunuz her liste için 1 dakikadan daha kısa sürede çalıştırılmalıdır", nerede çalışacağını belirtmek iyi olabilir. Bir bilgisayarda bir dakika içinde çalışan kodun başka bir bilgisayarda saatlerce sürebilir.
mypetlion

@ mypetlion Burada gerçekten önemli olan kod aslında bir şey çıktı (ve sadece sonsuza kadar çalışır), bu yüzden bu kural rahatladım.
Arnauld

" Her sözcük benzersiz bir kaydırma dizisi oluşturuyorsa bir klavye geçerli kabul edilir. " - burada benzersiz olan ne anlama geliyor? örneğin, alfabetik sıra, 'abda', 'acda' kelimeleri için geçersiz bir çözüm mü?
ngn

Yanıtlar:


5

Python 3 + Google OR Araçları , 1076 + 1971 = 3047

Bu her zaman en uygun çözümleri bulur (ancak bunu yapmak için çok fazla kod harcar). Birkaç saniye içinde 1-9 testlerini gerçekleştirir, altı dakikada 10 testini ve 11 dakikada bir testini yapar.

kod

from ortools.sat.python.cp_model import*
from itertools import*
C=combinations
R=range
L=len
T=lambda w:[*zip(w,w[1:],w[2:])]
W=[(*(g[0]for g in groupby(w)),)for w in input().split()]
K={*sum(W,())}
m=CpModel()
V=m.NewBoolVar
B={c:V(f"B{c}")for c in C(K,2)}
for a,b in[*B]:B[b,a]=B[a,b].Not()
for a,b,c in permutations(K,3):m.AddBoolOr([B[a,b],B[b,c],B[c,a]])
M={t:V(f"M{t}")for t in{*sum(map(T,W),[])}}
for a,b,c in M:m.AddBoolXOr([B[a,b],B[b,c],M[a,b,c].Not()])
N={(w,n):V(f"N{w,n}")for w in W for n in R(1,L(w))}
for w in W:
 for n in R(1,L(w)-1):s=sum(M[t]for t in T(w));m.Add(s>=n).OnlyEnforceIf(N[w,n]);m.Add(s<n).OnlyEnforceIf(N[w,n].Not())
for a,b in C(W,2):
 if(a[0],a[-1])==(b[0],b[-1]):m.AddForbiddenAssignments([M[t]for t in T(a)+T(b)],[[x in X for x in R(L(a)-2)]+[y in Y for y in R(L(b)-2)]for n in R(L(a))for X in C(R(L(a)-2),n)for Y in C(R(L(b)-2),n)if[a[x+1]for x in X]==[b[y+1]for y in Y]])
m.Minimize(sum((2*n+3)*N[w,n]for w,n in N))
s=CpSolver()
s.Solve(m)
o={k:0for k in K}
for c in C(K,2):o[c[s.Value(B[c])]]+=1
print(*sorted(K,key=lambda k:o[k]),sep="")

Sonuç

  1. SEH, 13
  2. DOLC, 20
  3. TNSECA, 13
  4. RASYON, 80
  5. TYKCIDBRFHJUEVOXWNGZALQMPS, 32
  6. REWINTHUVOFABMPY, 66
  7. FYCWORTMHAGINDKVESULB, 125
  8. TSHRDABXLYOWUPMIENGCF, 213
  9. PVKEFDLBMUSWOIHACNYTRG, 212
  10. XHGTPMCKSUABYORDLJEIWNFV, 596
  11. PYLFNAVEKBOCHTRGDSIZUM, 601

Skoru kontrol edin

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.