这是具有自定义评分系统的代码挑战,评分最低者获胜。
介绍
许多智能手机允许通过在2D虚拟键盘上滑动手指来输入文本。该技术通常与预测算法结合,该预测算法输出从最可能到最不可能排序的猜词列表。
在这个挑战中:
- 我们将在仅限于26个字母的子集的一维键盘上滑动。
- 不会有预测算法:我们希望每个单词都通过其“滑动顺序”来唯一标识。
- 我们希望对键盘进行优化,以使给定单词列表的移动总数最小化。
一维扫动
以下是按字母顺序排序的一维键盘,其中包含所有字母:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
注意:如果您是通过手机浏览的,则可能显示在多行上。请认为它是单行。
要在这样的键盘上输入单词“ GOLF ”,我们将:
- 开始于 G
- 向右滑动至 O
- 向左滑动 F
因为L位于O和之间F,所以我们只是继续刷卡而不停在那。
因此,此键盘上的“ GOLF ” 滑动顺序为GOF。
更普遍:
- 始终包含首字母和尾字母。
- 当且仅当紧随其后需要换向时,才包括其他字母。
重复字母必须与单个字母一样对待。例如,在上面的键盘上:
- “ LOOP ”将被编码为LP(不停止O)
- “ GOOFY ”将被编码为GOFY(O之所以包含在内,是因为那里的方向发生了变化-并不是因为它被加倍了)
键盘优化
让我们考虑以下单词列表:[' PROGRAMMING ',' PUZZLES ',' AND ',' CODE ',' GOLF ']。
我们需要16个不同的字母来键入这些单词,因此我们只需要一个16个字母的键盘即可。以下是-再次-按字典顺序排序:
ACDEFGILMNOPRSUZ
使用此键盘,单词将以这种方式编码:
- 编程:PRGRAMING(9个动作)
- 拼图:PZES(4个动作)
- AND:AND(3个动作)
- CODE:CODE(4个移动)
- 高尔夫球:GOF(3个动作)
所有单词总共有23个动作。
但是我们可以使用此键盘做得更好:
CGODSELZNUIFRPAM
这使:
- 编程:PGMG(4个动作)
- 拼图:PS(2个动作)
- AND:AD(2个动作)
- CODE:CE(2个移动)
- 高尔夫球:GF(2个动作)
总共只有12个动作。
键盘计分
越低越好。
挑战
- 给定单词列表,您的代码必须为该列表输出有效的键盘。如果每个单词生成唯一的滑动序列,则认为键盘有效。
您将获得11个独立的单词列表。您的分数将等于:
您可以使用此脚本检查分数。该
score()
函数将您的代码长度作为第一个参数,并将11个键盘字符串的数组作为第二个参数(大小写无关紧要)。得分最低的提交者获胜。如果是平局,则首先提交的提交将获胜。
附加规则
- 您的代码必须是确定性的(即,对于给定的输入,它必须始终返回相同的输出)。
- 您必须A)提供一个不会超时的测试链接(例如,在TIO上),或B)将生成的键盘包含在答案的正文中。
- 您可以将单词全部大写或全部小写。禁止混合使用。
- 输入保证至少有一个解决方案。
- 所有单词均由至少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
沙箱(现已删除)。
—
Arnauld
猜猜还有谁知道这斗争吗……
—
Egg the Outgolfer
如果要包括以下规则:“每个列表的代码必须在1分钟内运行”,则最好指定它将在哪里运行。一分钟在一台计算机上运行的代码在另一台计算机上可能要花费数小时。
—
mypetlion
@mypetlion在这里真正重要的是代码实际上输出了一些内容(而不是永远运行),因此我放宽了此规则。
—
Arnauld
“ 如果每个单词生成唯一的滑动序列,则认为键盘有效。 ”-唯一在这里意味着什么?例如,字母顺序对于单词“ abda”,“ acda”是否无效?
—
ngn