测试键盘


13

我的问题

在我目前的工作地点,我一手维护(因为我没有四肢,所以两手就可以了)维护着大约700台笔记本电脑。由于使用它们的性质和频率,我经常发现它们的损坏还不大。对于此问题,我主要关心的是笔记本电脑退回时,键盘损坏或失效的情况。当硬件维修人员修复这些损坏的键盘时,有必要对其进行测试。该测试涉及使用每个键以及每个键。多么拖累吧?问题是,有时我会忘记是否键入了密钥。

一个办法?

编写一个程序/脚本来:

  1. 接受用户输入
  2. 提交后(以您认为合适的任何方式),确定是否按下了每个键。
  3. 输出yes或no或以任何方式指示我是否成功按了所有键。(如果答案不明显,请在答案中指出两个可能的输出)。

假设:

  1. 大写,小写都一样?您认为适合的任何一种方式。只要是[AZ],[az]或[A-Za-z]。数字和其他符号也一样。(因此,如果=键入,+没关系)。您是否要包含移位字符的选择。
  2. 您不必担心制表符或空格
  3. 不需要功能键,CTRL,ALT,Esc或任何其他在屏幕上不输出内容的键
  4. 假定使用EN-US键盘,且笔记本电脑包含数字键盘。
  5. 与操作系统无关,无论您喜欢哪种语言
  6. 多次按下该键无关紧要(因为当测试仪变得懒惰并像Mortal Kombat一样开始粉碎按钮时)

这是一个可能返回true的潜在输入集(或者是,或者是“您做到了!”)

`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./

获胜者取决于最少的字符数。


我们是否需要检查每个击键至少出现一次或恰好出现一次?
xnor 2014年

@xnor,如果它出现多次,没关系。我更新了问题。
SomeShinyObject 2014年

1
好吧,那是不值得的。
nyuszika7h 2014年

1
@ChristopherW如果这是您遇到的持续性问题,则应访问此网站keyboardtester.com
gxtaillon 2014年

2
@MomemtumMori,那只手在侧边栏上做着宾夕法尼亚荷兰语键盘技术?完全是我的。
SomeShinyObject 2014年

Answers:


1

GolfScript,6个字节

.&,94=

如果存在代码在33到127之间的所有ASCII字符,则打印1。否则,打印0。

如果输入包含其他字符(包括最后的换行符),则该方法将失败,这是OP允许的,并且对于现有的GolfScript解决方案也是如此。

用法

$ echo -n '!"#$%&'"'"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~' |
> golfscript <(echo '.&,94=')
1

怎么运行的

.&  # Compute the intersection of the input string with itself. This removes duplicates.
,   # Compute the length of the resulting string.
94= # Push 1 if the length is 94, otherwise push 0.

您链接的评论并没有说输入将不包含换行符(或33-126以外的其他字符),而只是说它将仅包含有效字符。换行符是无效字符吗?
aidtsu退出是因为SE为EVIL,2014年

通过有效意味着我在我们对测试的范围内,但我想询问OP时候我应该更清楚地表达自己...
丹尼斯

6

GolfScript,11岁

可打印的ASCII并不是那么有趣……

127,32,-^,!

Ruby,68岁

-rset4个字符的标志。

p Set.new(?`..?z)+(?,..?9)+%w{[ ] \\ ; '}==Set.new(gets.split'')

Python 3、76

print(set("`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./")==set(input()))

1
我建议将它们发布在两个单独的答案中。
nyuszika7h 2014年

3

JavaScript-62 70

alert(!(47-prompt().match(/([',-\/\d;=a-z\[-\]`]?)(?!.*\1)/g).length))

还有一点点:

alert(!!prompt().match(/([',-\/\d;=a-z\[-\]`])(?!.*\1)/g)[46])

2

果酱-9

',33>q-!

它也检查“移位”字符(包括大写字母)。
http://cjam.aditsu.net/上尝试

注意:撇号后有一个不可见的字符(代码127)。


“它也检查“移位”字符(包括大写字母)。” 我会说这是不正确的行为。
Ry-

@minitech“您的选择,是否要包含转换字符。”
aidtsu退出是因为SE为EVIL,2014年

但是在此之前,它说“大写或小写”(这是专有的,对吗?)
Ry-

@minitech,我更新了问题。抱歉。该OR具有误导性。
SomeShinyObject 2014年

@ChristopherW我的程序将在您的示例输入上显示0,但是如果您在按住shift键的同时还按下所有这些字符,它将显示1。可以吗?
aidtsu退出是因为SE为EVIL,2014年

2

的PHP

    foreach (str_split("`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./") as $v) {
        if (strpos($_GET['i'],$v)!==false)die(NO);
    }

$_GET['i'] 是输入


1
使用$_GET保存1个字符,如果它是可以接受的。
tomsmeding

@tomsmeding,是的,我做到了:)
Alireza Fallah

您可以在字符串的前面添加填充字符(é或其他字符),并删除!==false来保存8个字符,然后再将大括号保留4个字符。register_globals做这个"é$i"die(NO)也有可能。
Ry-

@minitech-我不知道你说什么,填充字符?请随意编辑我的答案
Alireza Fallah 2014年


1

Haskell,41岁(两种解决方案)

interact(\y->show$all(`elem`y)[' '..'`'])

或(无点样式)

interact$show.(`all`[' '..'`']).flip elem

需要至少输入以下字符:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`

以任何顺序,任何次数。允许额外的字符。在解释器中运行。完成后必须按Enter键,但是如果在完成之前按Enter键,则可以继续输入字符,然后再次按Enter键。将打印True,如果你有打的每一个字符,否则将无法打印出任何东西。


0

Perl,70个字符

say[sort grep!$s{$_}++,<>=~/\S/g]~~[sort"',-./;=[\]`"=~/./g,0..9,a..z]

用法:

echo `134223423567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./ | perl -E 'say[sort grep!$s{$_}++,pop=~/\S/g]~~[sort"',-./;=[\]`"=~/./g,0..9,a..z]'

如果存在所有击键,则输出1,否则不输出。


需要Perl 5.10+
Zaid

在大多数shell中,您的示例将失败,因为回显的字符串中的某些字符需要转义。
丹尼斯

0

C,97个字符

main(long a,char**u){a=0xfb0000000750003d;for(u++;**u;a|=2L<<*(*u)++-39);a=48+!~a;write(1,&a,1);}

需要使用至少包含字母的参数来调用程序:

`1234567890-=AZERTYUIOPQSDFGHJKLMWXCVBN[]\;',./

并得到答案1(是)。可以通过更改a的初始化值来更改字符集。

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.