Dies ist eine Code-Herausforderung mit einem benutzerdefinierten Bewertungssystem, bei dem die niedrigste Punktzahl gewinnt.
Einführung
Auf vielen Smartphones können Sie Text eingeben, indem Sie mit dem Finger über die virtuelle 2D-Tastatur fahren. Diese Technologie wird normalerweise mit einem Vorhersagealgorithmus kombiniert, der eine Liste von erratenen Wörtern ausgibt, die von höchstwahrscheinlich nach niedrigstwahrscheinlich sortiert sind.
In dieser Herausforderung:
- Wir streichen über eine eindimensionale Tastatur, die auf eine Teilmenge der 26 Buchstaben beschränkt ist.
- Es wird keinen Vorhersagealgorithmus geben : Wir möchten, dass jedes Wort durch seine "Wischsequenz" eindeutig identifiziert wird.
- Wir möchten, dass die Tastatur so optimiert wird , dass die Gesamtanzahl der Bewegungen für eine bestimmte Liste von Wörtern minimiert wird.
Wischen in einer Dimension
Nachfolgend finden Sie eine lexikographisch sortierte 1D-Tastatur mit allen Buchstaben:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
NB: Dies kann in mehreren Zeilen angezeigt werden, wenn Sie vom Handy aus surfen. Stellen Sie es sich bitte als eine einzelne Zeile vor.
Um das Wort " GOLF " auf einer solchen Tastatur einzugeben, werden wir:
- beginne bei G
- wische nach rechts zu O
- wische nach links zu F
Weil Lsich zwischen Ound befindet F, wischen wir einfach weiter, ohne dort anzuhalten.
Die Wischsequenz von ' GOLF ' auf dieser Tastatur ist also GOF.
Allgemeiner:
- Der erste und der letzte Buchstabe sind immer enthalten.
- Andere Buchstaben sind nur dann enthalten, wenn eine Richtungsänderung unmittelbar danach erforderlich ist.
Wiederholte Buchstaben müssen wie einzelne Buchstaben behandelt werden. Zum Beispiel auf der obigen Tastatur:
- ' LOOP ' würde codiert werden als LP(ohne Stopp O)
- ' GOOFY ' würde codiert als GOFY(das Oist enthalten, weil es dort eine Richtungsänderung gibt - nicht, weil es verdoppelt ist)
Tastaturoptimierung
Betrachten wir die folgende Liste von Wörtern: [' PROGRAMMIERUNG ', ' PUZZLES ', ' UND ', ' CODE ', ' GOLF '].
Wir brauchen 16 verschiedene Buchstaben, um diese Wörter zu tippen, also brauchen wir nur eine Tastatur mit 16 Buchstaben. Das folgende ist - wieder - lexikographisch sortiert:
ACDEFGILMNOPRSUZ
Mit dieser Tastatur werden die Wörter folgendermaßen codiert:
- PROGRAMMIERUNG : PRGRAMING(9 Züge)
- PUZZLES : PZES(4 Züge)
- UND : AND(3 Züge)
- CODE : CODE(4 Züge)
- GOLF : GOF(3 Züge)
Das sind insgesamt 23 Züge für alle Wörter.
Aber wir können mit dieser Tastatur viel besser machen:
CGODSELZNUIFRPAM
Welches gibt:
- PROGRAMMIERUNG : PGMG(4 Züge)
- PUZZLES : PS(2 Züge)
- UND : AD(2 Züge)
- CODE : CE(2 Züge)
- GOLF : GF(2 Züge)
für insgesamt nur 12 Züge .
Tastaturbewertung
Je niedriger, desto besser.
Die Herausforderung
- Bei einer gegebenen Wortliste muss Ihr Code eine gültige Tastatur für diese Liste ausgeben . Eine Tastatur gilt als gültig, wenn jedes Wort eine eindeutige Wischsequenz erzeugt.
Sie erhalten 11 unabhängige Wortlisten. Ihre Punktzahl wird gleich sein mit:
Mit diesem Skript können Sie Ihre Punktzahl überprüfen . Die
score()
Funktion erwartet Ihre Codelänge als ersten Parameter und ein Array von 11 Tastaturzeichenfolgen als zweiten Parameter (der Fall spielt keine Rolle).Die Einsendung mit der niedrigsten Punktzahl gewinnt. Bei einem Unentschieden gewinnt die Einsendung, die zuerst eingereicht wurde.
Zusätzliche Regeln
- Ihr Code muss deterministisch sein (dh er muss für eine bestimmte Eingabe immer dieselbe Ausgabe zurückgeben).
- Sie müssen entweder A) einen Testlink (z. B. auf TIO) bereitstellen, der keine Zeitüberschreitung aufweist, oder B) die generierten Tastaturen in den Hauptteil Ihrer Antwort aufnehmen.
- Sie können die Wörter entweder in Groß- oder Kleinbuchstaben eingeben. Mischfälle sind verboten.
- Die Eingabe hat garantiert mindestens eine Lösung.
- Alle Wörter bestehen aus mindestens 2 verschiedenen Buchstaben.
- Ihr Code muss für eine gültige Eingabe funktionieren. Es wird mit einer geheimen Liste von Wörtern getestet, um sicherzustellen, dass es nicht auf fest codierten Ergebnissen beruht.
- Ich behalte mir das Recht vor, die Größe der Testsuite jederzeit zu erhöhen, um sicherzustellen, dass die Einsendungen nicht für die ersten Testfälle optimiert sind.
Wortlisten
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