एक 1 डी कीबोर्ड में स्वाइपिंग का अनुकूलन


16

यह एक कस्टम स्कोरिंग प्रणाली के साथ एक है, जहां सबसे कम स्कोर जीतता है।

परिचय

कई स्मार्टफोन 2 डी वर्चुअल कीबोर्ड पर अपनी उंगली को स्वाइप करके टेक्स्ट दर्ज करने की अनुमति देते हैं । यह तकनीक आमतौर पर एक भविष्यवाणी एल्गोरिथ्म के साथ संयुक्त होती है जो अनुमानित शब्दों की एक सूची को आउटपुट करती है, कम से कम संभावना से छंटनी की जाती है।

इस चुनौती में:

  • हम एक भर में स्वाइप करने जा रहे हैं 26 अक्षरों के सबसेट तक सीमित एक आयामी कीबोर्ड
  • वहां होगा कोई भविष्यवाणी एल्गोरिथ्म नहीं : हम चाहते हैं कि प्रत्येक शब्द विशिष्ट रूप से इसके 'स्वाइप अनुक्रम' द्वारा पहचाना जाए।
  • हम चाहते हैं कि कीबोर्ड अनुकूलित हो इस तरह से किया कि शब्दों की दी गई सूची के लिए कुल चालों की संख्या कम से कम हो।

एक आयाम में स्वाइप करना

नीचे एक लेक्सोग्राफिक रूप से सभी अक्षरों के साथ 1 डी कीबोर्ड है:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

NB: यदि आप मोबाइल से ब्राउज़ कर रहे हैं तो यह कई पंक्तियों पर प्रदर्शित हो सकता है। कृपया इसे एक पंक्ति के रूप में सोचें।

ऐसे कीबोर्ड पर ' GOLF ' शब्द दर्ज करने के लिए , हम करेंगे:

  • शुरू करे G
  • के दाईं ओर स्वाइप करें O
  • बाईं ओर स्वाइप करें F

क्योंकि और के Lबीच स्थित हैOF , हम बस वहाँ रोके बिना स्वाइप पर चलते हैं।

तो इस कीबोर्ड पर ' GOLF ' का स्वाइप क्रम है GOF

आम तौर पर:

  • पहले और आखिरी अक्षर हमेशा शामिल होते हैं।
  • अन्य अक्षरों को शामिल किया गया है यदि और केवल उनके बाद एक दिशा परिवर्तन की आवश्यकता होती है।
  • बार-बार लिखे जाने वाले अक्षरों को एक ही अक्षर माना जाना चाहिए। उदाहरण के लिए, उपरोक्त कीबोर्ड पर:

    • ' LOOP ' को इनकोड किया जाएगा LP(बिना रुके O)
    • ' GOOFY ' को एन्कोड किया जाएगा GOFY( Oइसमें शामिल है क्योंकि वहां एक दिशा परिवर्तन है - इसलिए नहीं कि यह दोगुना है)

कीबोर्ड अनुकूलन

चलिए शब्दों की निम्नलिखित सूची पर विचार करते हैं: [' PROGRAMMING ', ' PUZZLES ', ' AND ', ' CODE ', ' GOLF ']।

इन शब्दों को टाइप करने के लिए हमें 16 अलग-अलग अक्षरों की आवश्यकता होती है, इसलिए हमें केवल 16-अक्षर वाले कीबोर्ड की आवश्यकता होती है। निम्नलिखित एक है - फिर से - lexicographically सॉर्ट किया गया:

ACDEFGILMNOPRSUZ

इस कीबोर्ड के साथ, इस तरह से शब्दों को इनकोड किया जाएगा:

  • कार्यक्रम :PRGRAMING (9 चाल)
  • पजल्स :PZES (4 चाल)
  • और :AND (3 चाल)
  • कोड : CODE(4 चाल)
  • GOLF : GOF(3 चाल)

कि सभी शब्दों के लिए कुल 23 चालें हैं

लेकिन हम इस कीबोर्ड से बहुत बेहतर कर सकते हैं:

CGODSELZNUIFRPAM

जो देता है:

  • प्रगति : PGMG(4 चाल)
  • PUZZLES : PS(2 चाल)
  • और : AD(2 चाल)
  • कोड : CE(2 चाल)
  • GOLF : GF(2 चाल)

केवल 12 चालों की कुल के लिए ।

कीबोर्ड स्कोरिंग

n

Σ=1n2

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

कम, बेहतर।

चुनौती

  • शब्दों की एक सूची को देखते हुए, आपका कोड एक मान्य आउटपुट होना चाहिए इस सूची के लिए कीबोर्ड का । यदि प्रत्येक शब्द एक अद्वितीय स्वाइप अनुक्रम उत्पन्न करता है, तो एक कीबोर्ड वैध माना जाता है।
  • आपको शब्दों की 11 स्वतंत्र सूचियाँ दी जाएंगी। आपका स्कोर इसके बराबर होगा:

    एस+एल
    एसएल

    आप अपने स्कोर की जांच करने के लिए इस स्क्रिप्ट का उपयोग कर सकते हैंscore()समारोह पहले पैरामीटर और दूसरा पैरामीटर के रूप में 11 कुंजीपटल तार की एक सरणी (मामले फर्क नहीं पड़ता) के रूप में अपने कोड लंबाई की उम्मीद है।

  • सबसे कम स्कोर के साथ सबमिशन जीत जाता है। एक टाई के मामले में, जो सबमिट किया गया था वह पहले जीत गया था।

अतिरिक्त नियम

  • आपका कोड निर्धारक होना चाहिए (यानी किसी दिए गए इनपुट के लिए हमेशा वही आउटपुट लौटाया जाना चाहिए)।
  • आपको या तो ए) एक परीक्षण लिंक प्रदान करना चाहिए (जैसे टीआईओ पर) जो समय समाप्त नहीं करता है, या बी) आपके उत्तर के शरीर के भीतर उत्पन्न कीबोर्ड शामिल करता है।
  • आप शब्दों को पूर्ण अपरकेस या पूर्ण लोअरकेस में ले सकते हैं। मिश्रित मामलों की मनाही है।
  • इनपुट में कम से कम एक समाधान होने की गारंटी है।
  • सभी शब्द कम से कम 2 अलग-अलग अक्षरों से बने होते हैं।
  • आपका कोड किसी भी मान्य इनपुट के लिए काम करना चाहिए। यह सुनिश्चित करने के लिए शब्दों की एक अज्ञात सूची के साथ परीक्षण किया जाएगा कि यह हार्ड-कोडित परिणामों पर निर्भर नहीं है।
  • मैं किसी भी समय परीक्षण सूट के आकार को बढ़ाने का अधिकार सुरक्षित रखता हूं ताकि यह सुनिश्चित किया जा सके कि प्रस्तुतियाँ प्रारंभिक परीक्षण मामलों के लिए अनुकूलित नहीं हैं।

शब्द सूची

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

सैंडबॉक्स (अब हटा दिया गया)।
अरनौलड

लगता है कि और कौन संघर्ष जानता है ...
आउटगॉल्फर को एरिक करें

यदि आप इस नियम को शामिल करने जा रहे हैं: "आपका कोड प्रत्येक सूची के लिए 1 मिनट से कम समय में चलना चाहिए", यह निर्दिष्ट करना अच्छा हो सकता है कि यह कहाँ चल रहा होगा। एक मिनट में एक कंप्यूटर पर चलने वाला कोड दूसरे पर घंटों लग सकता है।
म्युटेलियन

@mypetlion वास्तव में यहां क्या मायने रखता है कि कोड वास्तव में कुछ आउटपुट करता है (और हमेशा के लिए नहीं चलता है), इसलिए मैंने इस नियम को शिथिल कर दिया है।
अरनौलड

" यदि प्रत्येक शब्द एक अद्वितीय स्वाइप अनुक्रम उत्पन्न करता है, तो एक कीबोर्ड वैध माना जाता है। " - यहाँ अद्वितीय का क्या अर्थ है? उदाहरण के लिए, क्या अक्षर शब्द 'अब्दा', 'अकड़ा' के लिए एक अमान्य समाधान है?
ngn

जवाबों:


5

पायथन 3 + Google OR-Tools , 1076 + 1971 = 3047

यह हमेशा इष्टतम समाधान पाता है (लेकिन ऐसा करने के लिए बहुत सारे कोड खर्च करता है)। यह कुछ सेकंड में 1-9 टेस्ट करता है, छह मिनट में 10 टेस्ट करता है और एक मिनट में 11 टेस्ट करता है।

कोड

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="")

परिणाम

  1. सेह, १३
  2. DOLC, 20
  3. TNSECA, 13
  4. राशन, ,०
  5. TYKCIDBRFHJUEVOXWNGZALQMPS, 32
  6. 66 वर्षीय रॉफबॉम्पी
  7. FYCWORTMHAGINDKVESULB, 125
  8. TSHRDABXLYOWUPMIENGCF, 213
  9. PVKEFDLBMUSWOIHACNYTRG, 212
  10. XHGTPMCKSUABYORDLJEIWNFV, 596
  11. PYLFNAVEKBOCHTRGDSIZUM, 601

जांच अंक

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.