键盘乒乓
这个问题是受到CaucasianJames 在 X 上的
挑战
给定一串字母,确定单词“ping-pongs”是否在键盘上。(字母在键盘两侧交替出现)
使用您想要的任何现有的
是采用 QWERTY 布局的乒乓球侧面图。左侧由最左侧的 5 个字母组成,右侧由剩余的字母组成。
测试用例(QWERTY)
skepticism - true
ENDOWMENT - true
quantity - true
dispel - true
kayaks - true
a - true
aa - false
test - false
WRONG - false
thiswillfail - false
ε - false
评论:
- 长度的字符串
1
应返回 true。代表一张王牌! - 长度的字符串
0
应该返回 false。在真正的乒乓球比赛中不会得分。 - 应该不区分大小写
这个问题被标记为,因此以字节为单位的最短答案获胜!
\endgroup
17
9 个回答
9
-p
5,31 字节
$_&&=!/[h-puy]{2}|[^h-puy]{2}/i
采用 QWERTY 布局。
\endgroup
|
-r,30 字节
/[^h-puy]{2}|[h-puy]{2}|^$/IQ1
答案的移植版。我原本有自己的,但我的正则表达式更糟糕。如果无效,则退出代码为 1 的错误,如果是乒乓,则正常退出
我刚刚看到我们可以使用任何我们想要的键盘,这是我的键盘,colemak:
,30 字节
/[^eh-uy]{2}|[eh-uy]{2}|^$/IQ1
这是 dvorak,最流行的替代布局:
,42 字节
/[aeijkopquxy]{2}|[^aeijkopquxy]{2}|^$/IQ1
这是工人,怪人的第三个选择:
,40 字节
/[^efi-lnopuy]{2}|[efi-lnopuy]{2}|^$/IQ1
\endgroup
1
-
\begingroup
(如果你想知道的话,我确实浏览过该 wiki 页面上的其他键盘,但没有一个像 qwerty 和 colemak 那样短。)
\endgroup
–
|
,69 62 60 58 55 字节
感谢 ,减少了 7 个字节。我独立得出了一个类似的解决方案(尽管只有前 4 个字节),因为我有一段时间没有注意到他们的评论。
将输入作为字节串
lambda x,n=35782400:len({(n:=~n)>>j%32&1for j in x})==1
\endgroup
2
-
1\begingroup
使用海象
\endgroup
–
-
1\begingroup
\endgroup
–
|
,23字节
∧θ№…01⊕Lθ⭆θ№⁺⪫…h¦qωuy↧ι
链接为代码的详细版本。输出 Charcoal 布尔值,即-
如果单词是 ping-pong,则输出任何值,如果不是则不输出任何值。说明:
θ Input word
∧ Logical And
№ Count of
θ Input word
⭆ Map over characters and join
№ Count of
ι Current letter
↧ Lowercased
…h q In range `h`...`q` (exclusive)
⪫ ω Joined
⁺ Concatenated with
uy Literal string `uy`
01 In literal string `01`
… Cyclically extended to length
θ Input word
L Length
⊕ Incremented
Implicitly print
\endgroup
|
, 89 83 76 字节
-6 字节,由 walrusing 提供 'yuiophjklnm'
。
-7 字节,由 Mukundan314 提供。
lambda x:x and all((i in(r:='yuiophjklnm'))^(j in r)for i,j in zip(x,x[1:]))
\endgroup
1
-
\begingroup
\endgroup
–
|
Google 表格,76 字节
=SORT(AND(1=LEN(IFERROR(SPLIT(REGEXREPLACE(A2,"(?i)[h-puy]"," $0 ")," ")))))
Google 表格,47 字节
使用
=REGEXMATCH(A2,"(?i)[h-puy]{2}|[^h-puy]{2}|^$")
\endgroup
|
JavaScript(ES6),51 字节
需要字符数组。如果是“乒乓”,则返回0;如果是“空或非乒乓”,则返回1。
a=>a<1|a.some(q=c=>q-(q=/[h-puy]/i.test(c)^(a^=1)))
JavaScript (ES6),39 字节
使用了一个更直接的解决方案,可以移植如下。需要一个字符串并返回一个布尔值(“ping-pong”为false)。
s=>/^$|[h-puy]{2}|[^h-puy]{2}/i.test(s)
\endgroup
|
, 2019
žV5δôøJIlδå€üαßIgΘM
以字符列表形式输入。
使用 QWERTY 键盘。
或。
解释:
žV # Push ["qwertyuiop","asdfghjkl","zxcvbnm"]
δ # Map over each string:
5 ô # Split it into parts of size 5
ø # Zip/transpose; swapping rows/columns
J # Join the inner lists together:
# ["qwertasdfgzxcvb","yuiophjklnm"]
I # Push the input-list
l # Lowercase each inner character
δ # Double-vectorized over the two lists:
å # Contains-check
€ # Map over each inner list:
ü # For each overlapping pair in this list:
α # Take the absolute difference of the pair
ß # Pop and push the flattened minimum
# (1 if all are truthy; 0 if any are falsey; "" if empty)
Ig # Push the length of the input-list
Θ # Check whether this length is exactly 1
M # Push a copy of the largest value of the stack
# (which is output implicitly as result)
\endgroup
|
,121字节
[⇩ƛk•5vẇ∑vFT;f¯AI
位串:
0110100000110010000101110000101100010110000010110110100110101011010101011111000101101010010111000001110111100000010110110
输出空格表示 true,输出空字符串表示 false。为方便起见,链接中的页脚将结果转换为0
或1
。使用 qwerty 布局。
解释
[⇩ƛk•5vẇ∑vFT;f¯AI
[ # Only execute the following if the input isn't the empty string.
# Why else do you think false is represented as the empty string? :p
# It was easier to special case it
⇩ƛ # To each character in the lowercased input:
k• # Push a list of each row of qwerty
5vẇ # Split each into [first 5 characters, rest]
∑ # And fold the list by addition. This gives a list of [left keys, right keys]
vFT # Determine whether the character is a left or right key.
vF # Filter out the key from each side
f¯ # Flatten that and get the forward differences
# This will be used to determine whether there's a pattern of left/right or right/left.
# A 0 in this list means that two characters in a row are from the same side.
A # Check whether all numbers are non-0, as per the above explanation of why. This will return either 0 or 1
I # Push that many spaces. This is to be consistent with the empty string output.
💎
的帮助下创建。
\endgroup
|
空字符串为假的说法似乎值得怀疑。请参阅。
\endgroup
–
@squareroot12621 回答你的第一个问题,是的。我澄清了。至于你的第二个问题,它从哪一侧开始并不重要。我会将其添加到测试用例中。
\endgroup
–
我认为,通过排除空字符串作为可能的输入,并将键盘布局固定为 QWERTY,这个问题会得到改善。“已建立”含糊不清,“等等”甚至更含糊不清——就目前情况而言,根本不清楚哪种键盘布局能给出有效的答案。问题最好是自成体系的,所以我建议您将每种可接受布局的一半字母作为字符串包含在内,而不是链接到图形。
\endgroup
–
也许你可以这样表述这个问题:“给定一个非空的 ASCII 字母字符串,确定它是否在字母之间
QWERTASDFGZXCVB
和其他字母之间交替,忽略大小写。”\endgroup
–
我投票关闭此应用,因为此应用存在多个问题:既定的键盘布局定义不明确,并且未提及可接受的输出格式。修复后我很乐意将其恢复。
\endgroup
–
|