Jest to wyzwanie kodowe z niestandardowym systemem punktacji, w którym wygrywa najniższy wynik.
Wprowadzenie
Wiele smartfonów pozwala wprowadzać tekst, przesuwając palcem po wirtualnej klawiaturze 2D. Ta technologia jest zwykle łączona z algorytmem przewidywania, który wyświetla listę odgadniętych słów, posortowaną od najbardziej prawdopodobnej do najmniej prawdopodobnej.
W tym wyzwaniu:
- Przeciągniemy po jednowymiarowej klawiaturze ograniczonej do podzbioru 26 liter.
- Nie będzie algorytmu przewidywania : chcemy, aby każde słowo było jednoznacznie identyfikowane przez „sekwencję przeciągania”.
- Chcemy, aby klawiatura była zoptymalizowana w taki sposób, aby całkowita liczba ruchów dla danej listy słów była zminimalizowana.
Przesuwanie w jednym wymiarze
Poniżej znajduje się posortowana leksykograficznie klawiatura 1D ze wszystkimi literami:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Uwaga: może to być wyświetlane w kilku wierszach, jeśli przeglądasz z telefonu komórkowego. Pomyśl o tym jak o pojedynczym rzędzie.
Aby wprowadzić słowo „ GOLF ” na takiej klawiaturze, będziemy:
- zacznij o G
- przesuń w prawo do O
- przesuń w lewo, aby F
Ponieważ Lznajduje się pomiędzy OiF , po prostu przesuwamy palcem, nie zatrzymując się.
Tak więc sekwencja przeciągania „ GOLF ” na tej klawiaturze jest następującaGOF .
Bardziej ogólnie:
- Pierwsza i ostatnia litera są zawsze uwzględniane.
- Inne litery są uwzględniane tylko wtedy, gdy wymagana jest zmiana kierunku tuż po nich.
Powtarzane litery należy traktować tak samo jak pojedyncze litery. Na przykład na powyższej klawiaturze:
- „ LOOP ” byłoby zakodowane jako LP(bez zatrzymania na O)
- „ GOOFY ” byłoby zakodowane jako GOFY( Ojest uwzględnione, ponieważ istnieje zmiana kierunku - nie dlatego, że jest podwojona)
Optymalizacja klawiatury
Rozważmy następującą listę słów: [„ PROGRAMOWANIE ”, „ PUZZLES ”, „ AND ”, „ CODE ”, „ GOLF ”].
Potrzebujemy 16 różnych liter, aby wpisać te słowa, więc potrzebujemy tylko 16-literowej klawiatury. Poniższy jest - ponownie - posortowany leksykograficznie:
ACDEFGILMNOPRSUZ
Za pomocą tej klawiatury słowa zostaną zakodowane w następujący sposób:
- PROGRAMOWANIE :PRGRAMING (9 ruchów)
- PUZZLE : PZES(4 ruchy)
- AND : AND(3 ruchy)
- KOD :CODE (4 ruchy)
- GOLF : GOF(3 ruchy)
To łącznie 23 ruchy dla wszystkich słów.
Ale dzięki tej klawiaturze możemy znacznie lepiej:
CGODSELZNUIFRPAM
Co daje:
- PROGRAMOWANIE :PGMG (4 ruchy)
- PUZZLE :PS (2 ruchy)
- I :AD (2 ruchy)
- KOD :CE (2 ruchy)
- GOLF : GF(2 ruchy)
w sumie tylko 12 ruchów .
Punktacja klawiatury
słowa.
Im niższy, tym lepiej.
Wyzwanie
- Biorąc pod uwagę listę słów, kod musi wypisać prawidłowy klawiaturę dla tej listy. Klawiatura jest uważana za prawidłową, jeśli każde słowo generuje unikalną sekwencję machnięcia.
Otrzymasz 11 niezależnych list słów. Twój wynik będzie równy:
jest długością twojego kodu w bajtach.Możesz użyć tego skryptu, aby sprawdzić swój wynik . The
score()
Funkcja oczekuje swoją długość kodu jako pierwszy parametr i tablicę łańcuchów 11 klawiaturze drugiego parametru (w przypadku nie ma znaczenia).Zgłoszenie z najniższą oceną wygrywa. W przypadku remisu zgłoszenie przesłane jako pierwsze wygrywa.
Dodatkowe zasady
- Twój kod musi być deterministyczny (tzn. Zawsze musi zwracać ten sam wynik dla danego wejścia).
- Musisz albo A) podać link testowy (np. W TIO), który nie przekroczył limitu czasu, albo B) dołączyć wygenerowane klawiatury w treści odpowiedzi.
- Możesz wziąć słowa w całości dużymi lub małymi literami. Mieszane przypadki są zabronione.
- Gwarantujemy, że dane wejściowe mają co najmniej jedno rozwiązanie.
- Wszystkie słowa składają się z co najmniej 2 różnych liter.
- Twój kod musi działać dla każdego poprawnego wejścia. Zostanie przetestowany z nieujawnioną listą słów, aby upewnić się, że nie opiera się na wynikach zakodowanych na stałe.
- Zastrzegam sobie prawo do zwiększenia wielkości pakietu testowego w dowolnym momencie, aby upewnić się, że zgłoszenia nie są zoptymalizowane dla początkowych przypadków testowych.
Listy słów
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