当爱丽丝在她的QWERTY键盘上触摸输入时(图1),她不小心用一个键把双手向右移动,所以q变成了w,w变成了e等等(p变成了[)。空格没有受到影响,因为空格键很大。
您的任务是帮助她使用最短的字节数来修复她的消息,即取消她的手势移动。更准确地说,您将得到一个由wertyuiop[sdfghjkl;xcvbnm,中的空格和字符组成的字符串,您需要将这些字符映射到qwertyuiopasdfghjklzxcvbnm,并保持空格不变。
下面是一些测试用例来测试您的程序:
input output
----------------------
s[[;r apple
s gom a fin
werty qwert
uiop[ yuiop
sdfgh asdfg
jkl; hjkl
xcvb zxcv
nm, bnm
;p;;o[p[ lollipop
[2 spaces] [2 spaces]( lollipop测试用例以空格开头)
图1: Alice的QWERTY键盘

我是密码-高尔夫。最短答案(以字节为单位)获胜。
发布于 2021-07-01 21:29:00
ØqḊ€ż“[;,”F,Fyɠ通过STDIN获取输入
ØqḊ€ż“[;,”F,Fyɠ - Main link. Takes no arguments
Øq - Set the return value to ['qwertyuiop', 'asdfghjkl', 'zxcvbnm']
Ḋ€ - Dequeue each; ['wertyuiop', 'sdfghjkl', 'xcvbnm']
ż“[;,” - Zip with "[;,"; [['wertyuiop', '['], ['sdfghjkl', ';'], ['xcvbnm', ',']]
F - Flatten; "wertyuiop[sdfghjkl;xcvbnm,"
F - Flatten the return value; "qwertyuiopasdfghjklzxcvbnm"
, - Pair; ['wertyuiop[sdfghjkl;xcvbnm,', 'qwertyuiopasdfghjklzxcvbnm']
ɠ - Read a line from STDIN
y - Translate. Map w -> q, e -> w, etc.发布于 2021-07-01 22:01:07
'qwertyuiop[asdfghjkl;zxcvbnm, '(<:@i:{[)]'qwertyuiop[asdfghjkl;zxcvbnm, '完整的键盘,包括移走的最左边的字符和额外的字符[;,,以及两个额外的空格。<:@i:在其中找到输入的索引,从右边搜索,然后减去一个。{[在步骤1中从字符串中提取那些移位的索引。发布于 2021-07-02 02:56:47
#include<Windows.h>
void f(PCH s){for(;*s;)*s++=MapVirtualKey(OemKeyScan(*s)-(*s>32),1)|32;}将输入作为一个char* (PCH是char*的the ),通过修改字符串来输出。
想利用一些内置的东西。但似乎不太短。也许有人会采纳这个想法,在其他语言中做一个更短的想法。
OemKeyScan将密钥转换为其扫描代码,'q' -> 16、'w' -> 17、'e' -> 18、.、'p' -> 25、'a' -> 30、.、'l' -> 38、'z' -> 44、.、'm' -> 50。MapVirtualKey将扫描代码转换回(大写)字符。
被ErikF保存了一个字节。
https://codegolf.stackexchange.com/questions/230873
复制相似问题