Это вызов кода с пользовательской системой подсчета очков, где выигрывает самый низкий балл.
Вступление
Многие смартфоны позволяют вводить текст, проводя пальцем по виртуальной клавиатуре 2D. Эта технология обычно сочетается с алгоритмом прогнозирования, который выводит список угаданных слов, отсортированный от наиболее вероятного к наименее вероятному.
В этом вызове:
- Мы проведем пальцем по одномерной клавиатуре, ограниченной подмножеством из 26 букв.
- Не будет никакого алгоритма прогнозирования : мы хотим, чтобы каждое слово было уникально идентифицировано его «последовательностью пролистывания».
- Мы хотим, чтобы клавиатура была оптимизирована таким образом, чтобы общее количество ходов для данного списка слов было минимальным.
Смахивание в одном измерении
Ниже представлена лексикографически отсортированная 1D клавиатура со всеми буквами:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Примечание: это может отображаться в нескольких строках, если вы просматриваете с мобильного. Пожалуйста, подумайте об этом как один ряд.
Чтобы ввести слово « ГОЛЬФ » на такой клавиатуре, мы будем:
- начать с G
- проведите вправо до O
- проведите влево, чтобы F
Потому Lчто расположен между Oи F, мы просто продолжаем смахивать, не останавливаясь там.
Таким образом, последовательность « GOLF » на этой клавиатуре GOF.
В более общем смысле:
- Первые и последние буквы всегда включены.
- Другие буквы включаются тогда и только тогда, когда сразу после них требуется изменение направления.
Повторяющиеся буквы должны обрабатываться так же, как отдельные буквы. Например, на приведенной выше клавиатуре:
- ' LOOP ' будет закодирован как LP(без остановки на O)
- « GOOFY » будет кодироваться как GOFY( Oвключено, потому что там есть изменение направления, а не потому, что оно удвоено)
Оптимизация клавиатуры
Давайте рассмотрим следующий список слов: [« ПРОГРАММИРОВАНИЕ », « ГОЛОВОЛОМКИ », « И », « КОД », « ГОЛЬФ »].
Нам нужно 16 различных букв для ввода этих слов, поэтому нам просто нужна 16-буквенная клавиатура. Следующий снова - лексикографически отсортирован:
ACDEFGILMNOPRSUZ
С этой клавиатурой слова будут закодированы следующим образом:
- ПРОГРАММИРОВАНИЕ : PRGRAMING(9 ходов)
- ЗАГАДКИ : PZES(4 хода)
- И : AND(3 хода)
- КОД : CODE(4 хода)
- ГОЛЬФ : GOF(3 хода)
Это всего 23 хода для всех слов.
Но мы можем сделать намного лучше с этой клавиатурой:
CGODSELZNUIFRPAM
Который дает:
- ПРОГРАММИРОВАНИЕ : PGMG(4 хода)
- ЗАГАДКИ : PS(2 хода)
- И : AD(2 хода)
- КОД : CE(2 хода)
- ГОЛЬФ : GF(2 хода)
всего 12 ходов .
Оценка клавиатуры
Чем ниже, тем лучше.
Соревнование
- Учитывая список слов, ваш код должен вывести действительную клавиатуру для этого списка. Клавиатура считается действительной, если каждое слово генерирует уникальную последовательность пролистывания.
Вам дадут 11 независимых списков слов. Ваша оценка будет равна:
Вы можете использовать этот скрипт, чтобы проверить свой счет .
score()
Функция ожидает вашу длину кода в качестве первого параметра и массив 11 клавишных строк в качестве второго параметра (в случае не имеет значения).Представление с самым низким счетом выигрывает. В случае ничьей первая заявка выигрывает.
Дополнительные правила
- Ваш код должен быть детерминированным (т. Е. Он всегда должен возвращать один и тот же вывод для данного ввода).
- Вы должны либо A) предоставить тестовую ссылку (например, на TIO), которая не имеет времени ожидания, либо B) включить сгенерированные клавиатуры в текст вашего ответа.
- Вы можете взять слова в верхнем или нижнем регистре. Смешанные случаи запрещены.
- У входа гарантированно есть хотя бы одно решение.
- Все слова состоят как минимум из двух разных букв.
- Ваш код должен работать для любого допустимого ввода. Он будет протестирован с нераскрытым списком слов, чтобы убедиться, что он не полагается на жестко закодированные результаты.
- Я оставляю за собой право в любое время увеличить размер набора тестов, чтобы убедиться, что представленные материалы не оптимизированы для первоначальных тестовых случаев.
Списки слов
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