输入,但在左侧[关闭]


14

背景

您已被赋予记录会议笔记的任务。您开始在Google文档中输入内容,但是在会议期间您没有足够的时间在输入时看着键盘。

幸运的是,您无需看键盘即可键入内容。会议结束后,您意识到键入的所有内容都是左侧的一个键。

挑战

对于此挑战,您将使用QWERTY键盘布局的字母,数字和空格键。

  • 给定文本输入(通过任何标准输入方法),输出结果文本,其中每个字符在键盘上向左移动一个。

    • 对于广大的信,只是看看书,并转换为信向左(cxtr,等等)。

    • 对于letter q,请转换为文字制表符(\t)。

    • 对于letter a,启用大写锁定,因此其余字符串的大小写相反。

    • 对于letter z,请大写字符串中的下一个字母。

    • 空格键不需要翻译。

  • 在翻译时保留大小写,并注意大写锁定(如果启用了大写锁定,请确保大小写相反)。

  • 输入字符串中的所有字符均为字母,数字或空格。不能包含标点符号或其他字符。

测试用例

\t 是文字的制表符

Hello world    -> Gwkki qieks
Code Golf      -> Xisw Fikd
Queried apples -> \tyweuws OOKWA

计分

最低得分(以字节为单位)获胜。玩得开心!


11
快速参考QWERTY键盘的相关行将很有用,并使挑战自成一体
Jo King

4
如果数字前面有“ Z”,数字会升到标点符号吗?
ErikF

10
但是Z对应于移位...?
不相关的字串

4
建议的测试用例:Azerty->wERT
Jitse,

5
对于letter z,将字符串中的下一个字母大写 ->是否意味着我们只需要关心字母的大写,而不必在数字和符号之间切换?什么是对预期的输出0123456789a0123456789z0z1z2z3z4z5z6z7z8z9?(此外,在许多非QWERTY键盘上,“ Caps Lock”实际上起着“ Shift Lock”的作用。我相信QWERTY不会遵循这种模式,但应该为不熟悉它的我们指定这种模式。 )
Arnauld

Answers:


11

JavaScript(V8),271字节

f=(s,k='~!@#$%^&*()_+`1234567890-=\tQWERTYUIOP{}|\tqwertyuiop[]\\ASDFGHJKL:"\n\\asdfghjkl;\'ZXCVBNM<>?zxcvbnm,./')=>s.replace(/[^ ]/g,c=>k[k.indexOf(c)-1]).replace(/\\([^\\]*)\\?/g,(m,c)=>c.replace(/[a-zA-z]/g,l=>l>'Z'?l.toUpperCase():l.toLowerCase())).replace(/[?']/,"")

在线尝试! 我的第一本JavaScript代码。它肯定可以缩短,但是我认为这是一个好的开始。
它基本上会找到k字符串中的每个字符并将其替换为前一个字符,然后在A或之间交换所有大小写的情况a,并删除所有出现的Zz(因为Shift键本身不会执行任何操作)。
这应该是正常的QWERTY键盘布局,但如果没有,请告知我。


在您自己的TIO链接中,zebras=>wveA测试用例似乎是错误的。第一个z应该使e打印大写w。在OP中:“对于字母z,请大写字符串中的下一个字母。”
2

@ Night2干杯,我在OP进行澄清之前发布。我以为按一下Shift键不会有任何作用。
马修·詹森

5

Python 3,211字节

d=' ~!@#$%^&*()`~1!2@3#4$5%6^7&8*9(0)		qQwWeErRtTyYuUiIoOpPaAsSdDfFgGhHjJkKlLzZxXcCvVbBnNmM  '
c=s=0
for i in input():k=d.find(i);print(end=d[k-2+(c*i.isalpha()^s)*(1-k%2*2)][i in'aAzZ':]);c^=i in'aA';s=i in'zZ'

在线尝试!

使用一个查找字符串,在该字符串中正常字符及其移位修改版本组合在一起。对于输入中的每个字符,它将向后退到左边两个位置。当移位XOR大写锁定处于活动状态时,通过在查找值中添加1(或-1如果当前字符为大写)来更改大小写。数字不受大写锁定修饰符的影响。


2

PHP,227字节

for(;''<$s=$argn[$i++];)$s!=a&&$s!=A?$s!=z&&$s!=Z?($t=$m[stripos($m='~1!2@3#4$5%6^7&8*9(0	qwertyuiopasdfghjklzxcvbnm',$s)-1])+(print$s>' '?$s<A?!$h?$s-1?$s?$s-1:9:'`':$t:($t>=A&&(($s<a)+$h+$c)%2?$t^' ':$t):$s)+$h=0:$h=1:$c=!$c;

在线尝试!

我创建了一个映射字符串(~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnm),每个数字的左侧都有SHIFT模式,每个字母的左侧都有字母/键。

我遍历输入字符,并针对每个字符:

  • 如果character是aA,则大写锁定标志被反转(逻辑非)。
  • 如果character是zor Z,则将shift标志设置为1
  • 当字符不在时aAzZ
    • 映射字符串中当前字符左侧的字符存储在中$t
    • 如果当前字符是空格,则将其打印出来。
    • 如果当前字符是一个数字,并且如果打印了移位标志1$t则打印,否则,如果数字是1`则打印,如果数字是09则打印,否则,digit-1则打印。
    • 如果当前字符是字母,则根据移位标志,大写锁定标志和当前字符(大写/小写)的$t大小写打印字母。唯一的特殊情况是制表符,它按原样打印。
    • 移位标志始终设置0在末尾。

2

红色,218字节

func[t][c: z: 0 rejoin collect[foreach s t[case[find"Aa"s[c: c xor 32]find"Zz"s[z: 32]on
[keep(select/case"  poiuytrewq^-lkjhgfdsamnbvcxzPOIUYTREWQ^-LKJHGFDSAMNBVCXZ0987654321~"s)xor either s <#"Z"[0][c xor z]z: 0]]]]]

在线尝试!

目前AaZz不影响数字。


这似乎不适用于'A pear' -> ' OWe'
Jitse

@Jitse Hmm
Galen Ivanov

@Jitse但实际上不能很好地与数字配合使用,在操作流程中尚不完全清楚
Galen Ivanov

2
我同意,挑战是非常模棱两可的。
吉特(Jitse)

2

C(gcc),276字节

i;j;k;h;l;m;n;o;f(char*b){char*c=calloc(m=strlen(b),1),*a=" \tqwertyuiop\aasdfghjkl\nzxcvbnm\tQWERTYUIOP\aASDFGHJKL\nZXCVBNM`1234567890";for(i=k=j=n=0;j<=m;l=a[i=index(a,b[j++])-a-1])k=l^7?k:!k,o=l>64&l<91?a[i-30*k]:l<97?h=i?l^7?l?l^10?l:0:32:0:0:a[i+29*k],o?c[n++]=o:n;b=c;}

感谢天花板猫-33字节。

在线尝试!


建议k^=!(l^7)而不是k=l^7?k:!k
ceilingcat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.