(以下文本中的框架一词并不是指实际框架,而是用作未定义时间单位的占位符)
想象一下,您的键盘布局只有如下所示的字母:
q w e r t y u i o p
a s d f g h j k l
z x c v b n m
每当您按下一个键(例如,f
),键盘就会按下每个帧周围的键(无序,每一行都是一个单独的帧):
F
RTGVCD
YHBXSE
UJNWAZ
IKMQ
OL
P
正如你所看到的,每一帧都会亮起先前点亮的键,而不是以前已经亮过的键。
在确定了需要按下每个帧的键之后,您需要将它们可视化。对于每一帧,都打印出默认的键盘布局(带有所有空格),但将显示亮起的键。在我们的例子中:
q w e r t y u i o p
a s d F g h j k l
z x c v b n m
q w e R T y u i o p
a s D f G h j k l
z x C V b n m
q w E r t Y u i o p
a S d f g H j k l
z X c v B n m
q W e r t y U i o p
A s d f g h J k l
Z x c v b N m
Q w e r t y u I o p
a s d f g h j K l
z x c v b n M
q w e r t y u i O p
a s d f g h j k L
z x c v b n m
q w e r t y u i o P
a s d f g h j k l
z x c v b n m
Input: F
Output:
q w e r t y u i o p
a s d F g h j k l
z x c v b n m
q w e R T y u i o p
a s D f G h j k l
z x C V b n m
q w E r t Y u i o p
a S d f g H j k l
z X c v B n m
q W e r t y U i o p
A s d f g h J k l
Z x c v b N m
Q w e r t y u I o p
a s d f g h j K l
z x c v b n M
q w e r t y u i O p
a s d f g h j k L
z x c v b n m
q w e r t y u i o P
a s d f g h j k l
z x c v b n m
Input: Q
Output:
Q w e r t y u i o p
a s d f g h j k l
z x c v b n m
q W e r t y u i o p
A s d f g h j k l
z x c v b n m
q w E r t y u i o p
a S d f g h j k l
Z x c v b n m
q w e R t y u i o p
a s D f g h j k l
z X c v b n m
q w e r T y u i o p
a s d F g h j k l
z x C v b n m
q w e r t Y u i o p
a s d f G h j k l
z x c V b n m
q w e r t y U i o p
a s d f g H j k l
z x c v B n m
q w e r t y u I o p
a s d f g h J k l
z x c v b N m
q w e r t y u i O p
a s d f g h j K l
z x c v b n M
q w e r t y u i o P
a s d f g h j k L
z x c v b n m
Input: Z
Output:
q w e r t y u i o p
a s d f g h j k l
Z x c v b n m
q w e r t y u i o p
A S d f g h j k l
z X c v b n m
Q W E r t y u i o p
a s D f g h j k l
z x C v b n m
q w e R t y u i o p
a s d F g h j k l
z x c V b n m
q w e r T y u i o p
a s d f G h j k l
z x c v B n m
q w e r t Y u i o p
a s d f g H j k l
z x c v b N m
q w e r t y U i o p
a s d f g h J k l
z x c v b n M
q w e r t y u I o p
a s d f g h j K l
z x c v b n m
q w e r t y u i O p
a s d f g h j k L
z x c v b n m
q w e r t y u i o P
a s d f g h j k l
z x c v b n m
发布于 2020-10-28 13:33:22
e=zip[0..]
x!y=abs$x-y
k=e["Q W E R T Y U I O P"," A S D F G H J K L"," Z X C V B N M"]
f c=filter(any(<"a").words)[unlines[[[z..]!!sum[32|z>'@',max(2*y!i)(y!i+x!j)/=d*2]|(x,z)<-e m]|(y,m)<-k]|(i,l)<-k,(j,h)<-e l,c==h,d<-[0..9]]
f
采用大写字符参数,并返回多行字符串的列表。
它在键盘布局上循环查找(i,j)
,即给定字符的位置。当它找到它时,它会为每个d<-[0..9]
生成一个字符串(unlines[…]
),所有的字母都不是d
十六进制从没有超过10步的波离开键盘,所以这是可以的。最后,不包含大写字母的字符串被过滤掉。
我计算键盘上两个点之间的十六进制距离为:\max\left(2|y_1-y_2|, |x_1-x_2|+|y_1-y_2|\right)。以下是这个度量下的点周围的一些距离:
6666666 6 6 6 6
654444456 6 4 4 4 6
65432223456 6 4 2 2 4 6
6543210123456 --> on staggered grid: 6 4 2 0 2 4 6
65432223456 6 4 2 2 4 6
654444456 6 4 4 4 6
6666666 6 6 6 6
发布于 2020-10-28 15:04:02
≔⪪”&±=K≕⦃Vj@η⟲.w\`o:7➙1”¶υ≔⊟Φυ№ιθηΦEχEυ⁺× μ⪫⭆λ⎇⁼ι⌈↔⊟E⟦⟦⁻μ⌕υη⁻ξ⌕ηθ⟧⟧⊞OπΣπ↥νν ⊙ι⊙λ№αν
在网上试试!链接是详细的代码版本。接受小写输入。解释:
≔⪪”&±=K≕⦃Vj@η⟲.w\`o:7➙1”¶υ
通过拆分压缩字符串获得列表qwertyuiop
、asdfghjkl
、zxcvbnm
。
≔⊟Φυ№ιθη
查找上面列表中包含输入的元素。
Eχ
创建一个列表,该列表对应于交错网格上从0到9之间的输入的每一步。
Eυ⁺× μ⪫⭆λ⎇⁼ι⌈↔⊟E⟦⟦⁻μ⌕υη⁻ξ⌕ηθ⟧⟧⊞OπΣπ↥νν
大写字母,即从交错网格上输入的所需距离,然后用增加的空格和双间距对每一行进行前缀,以错开结果。
Φ...⊙ι⊙λ№αν
只打印包含大写字母的列表。
我使用的距离公式是|x_2-x_1|、|y_2-y_1|和|x_2-x_1+y_2-y_1|之和的最大值,其中y是(0索引的)行向下计数,x是(倾斜的)列:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6
https://codegolf.stackexchange.com/questions/214276
复制相似问题