我是机器人。我购买此键盘的原因是其矩形布局简单:
~` !1 @2 #3 $4 %5 ^6 &7 *8 (9 )0 _- +=
tab Qq Ww Ee Rr Tt Yy Uu Ii Oo Pp {[ }] \|
Aa Ss Dd Ff Gg Hh Jj Kk Ll :; "' [-enter-]
Zz Xx Cc Vv Bb Nn Mm <, >. ?/
[========= space =========]
要打印人工文本,我需要将其转换为操纵器可以解释的命令。我的左机械手悬停在Shift钥匙上。一开始,我的右手将鼠标悬停在~键上。我的操纵器可以理解的命令是:
S : press the shift key
s : release the shift key
L : move the right manipulator left by 1
R : move the right manipulator right by 1
U : move the right manipulator up by 1
D : move the right manipulator down by 1
P : press the key under the right manipulator
p : release the key by the right manipulator
编写代码以将任何ASCII消息转换为命令列表。输入可以包含95个可打印ASCII字符中的任意多个;可能还有TAB和换行符。输出应该是操纵器的命令列表。
因此,例如,键入Hello World!
,命令是
SRRRRRRDDPp
sLLLUPp
RRRRRRDPp
Pp
UPp
LLLLDDDPp
SLLLUUUPp
sRRRRRRRPp
LLLLLPp
RRRRRDPp
LLLLLLPp
SLLUUPp
在打印每条消息之前,我将操纵器重置为初始状态。
通过适当的编程应避免一些机械危险:
LRUD
进行打印(P
)时不允许移动()- 操纵器的无干扰:当一个操纵器被接合(
S
或P
),对于该机械手的下一个命令应该被脱开(s
或p
),并且反之亦然 没有不必要的移位:在每两个shift(
s
,S
)命令之间,应该有一个P
命令因此,要打印
~~
,命令SPpPp
有效,而SPpsSPp
无效不能超出范围:任何移动命令都不应尝试将右机械手向初始位置的右方向移动13个以上或向底部移动4个以上(或在顶部或左侧的任何位置)
补充笔记:
- 按下禁用的键(命令序列如
DDPp
)将导致没有按键被按下并且被允许。 - 按Shift+ Tab无效,但是Shift+ Space和Shift+ Enter与没有相同Shift。
- 在空格键上按任意位置,该Enter键具有相同的效果。
- 输出中的空格键没有任何意义,但是可以用一种漂亮的方式格式化它。
速度有问题吗?我们能否将操纵器返回到每个字符之间的原始位置(当然,只要不包括不必要的移动)?
—
土司工程师
没问题。也许不增加运动就可能更有趣,但是我不喜欢要求最好的输出。
—
anatolyg '18年
您实际上尚未定义任务...输入的字符可以包含什么?实际的任务是什么(基于标题,我想这很明显,但是您仍然应该指定)
—
HyperNeutrino
为什么要打扰
—
orlp
Pp
?至于我可以看到那些总是一个动作既不P
或p
可自行出现。