首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模拟我的键盘波浪灯!

模拟我的键盘波浪灯!
EN

Code Golf用户
提问于 2020-10-28 07:29:06
回答 2查看 1.8K关注 0票数 19

(以下文本中的框架一词并不是指实际框架,而是用作未定义时间单位的占位符)

任务

想象一下,您的键盘布局只有如下所示的字母:

代码语言:javascript
运行
复制
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 ),键盘就会按下每个帧周围的键(无序,每一行都是一个单独的帧):

代码语言:javascript
运行
复制
F
RTGVCD
YHBXSE
UJNWAZ
IKMQ
OL
P

正如你所看到的,每一帧都会亮起先前点亮的键,而不是以前已经亮过的键。

在确定了需要按下每个帧的键之后,您需要将它们可视化。对于每一帧,都打印出默认的键盘布局(带有所有空格),但将显示亮起的键。在我们的例子中:

代码语言:javascript
运行
复制
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

规则

  1. 输入将是一个字母,您可以选择它是否将大写。
  2. 输出可以是: a.表示可视化键盘b的每秒钟的多行字符串数组。a.表示可视化键盘每帧的单个多行字符串,该字符串至少由一条换行符分隔。
  3. 当不再亮起键时,您可以输出尾随的换行符或/和最后的键盘可视化。

测试用例

代码语言:javascript
运行
复制
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
EN

回答 2

Code Golf用户

发布于 2020-10-28 13:33:22

哈斯克尔,229个字节

代码语言:javascript
运行
复制
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)。以下是这个度量下的点周围的一些距离:

代码语言:javascript
运行
复制
   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
票数 9
EN

Code Golf用户

发布于 2020-10-28 15:04:02

木炭,82字节

代码语言:javascript
运行
复制
≔⪪”&±=K≕⦃Vj@η⟲.w\`o:7➙1”¶υ≔⊟Φυ№ιθηΦEχEυ⁺× μ⪫⭆λ⎇⁼ι⌈↔⊟E⟦⟦⁻μ⌕υη⁻ξ⌕ηθ⟧⟧⊞OπΣπ↥νν ⊙ι⊙λ№αν

在网上试试!链接是详细的代码版本。接受小写输入。解释:

代码语言:javascript
运行
复制
≔⪪”&±=K≕⦃Vj@η⟲.w\`o:7➙1”¶υ

通过拆分压缩字符串获得列表qwertyuiopasdfghjklzxcvbnm

代码语言:javascript
运行
复制
≔⊟Φυ№ιθη

查找上面列表中包含输入的元素。

代码语言:javascript
运行
复制
Eχ

创建一个列表,该列表对应于交错网格上从0到9之间的输入的每一步。

代码语言:javascript
运行
复制
Eυ⁺× μ⪫⭆λ⎇⁼ι⌈↔⊟E⟦⟦⁻μ⌕υη⁻ξ⌕ηθ⟧⟧⊞OπΣπ↥νν 

大写字母,即从交错网格上输入的所需距离,然后用增加的空格和双间距对每一行进行前缀,以错开结果。

代码语言:javascript
运行
复制
Φ...⊙ι⊙λ№αν

只打印包含大写字母的列表。

我使用的距离公式是|x_2-x_1||y_2-y_1||x_2-x_1+y_2-y_1|之和的最大值,其中y是(0索引的)行向下计数,x是(倾斜的)列:

代码语言:javascript
运行
复制
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
票数 7
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/214276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档