키보드 테스트


13

내 문제

현재 직장에서는 한 손으로 (사지가 없기 때문에 양손으로) 약 700 대의 노트북을 유지 관리합니다. 사용의 본질과 빈도로 인해 종종 약간의 손상으로 반환되는 것을 발견했습니다. 이 문제에 대한 나의 주요 관심사는 노트북이 고장 나거나 손상된 키보드와 함께 반환 될 때입니다. 하드웨어 수리공이 고장난 키보드를 고치면 테스트해야합니다. 이 테스트에는 각각 ... 단일 ... 단일 ... 키를 사용해야합니다. 무슨 드래그? 문제는 때로는 키를 입력했는지 여부를 추적하지 못하는 것입니다.

해결책?

다음과 같은 프로그램 / 스크립트를 작성하십시오.

  1. 사용자 입력을받습니다
  2. 제출할 때 (어떤 방식 으로든), 각 키를 눌렀는지 여부를 결정합니다.
  3. 예 또는 아니오를 출력하거나 모든 키를 성공적으로 눌렀는지 여부를 나타내는 방법을 출력합니다. (명백하지 않은 경우 가능한 두 가지 출력을 답변에 표시하십시오).

가정 :

  1. 대문자, 소문자 모두? 어느 쪽이든 당신이 적합하다고 생각합니다. [AZ], [az] 또는 [A-Za-z] 인 한. 숫자와 다른 기호도 마찬가지입니다. (따라서 =입력 하면 +중요하지 않습니다). 이동 된 문자 포함 여부를 선택하십시오.
  2. 탭이나 공백에 대해 걱정할 필요가 없습니다.
  3. 기능 키, CTRL, ALT, Esc 또는 화면에 무언가를 출력하지 않는 다른 키가 필요 없음
  4. 이것은 EN-US 키보드와 랩톱 에 숫자 키패드가 포함되어 있지 않다고 가정합니다 .
  5. OS에 구애받지 않고 원하는 언어
  6. 키를 여러 번 눌렀는지는 중요하지 않습니다.

다음은 true를 리턴 할 수있는 잠재적 입력 세트입니다 (또는 예 또는 "You did it!").

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

우승자는 가장 적은 수의 문자로 결정됩니다.


각 키 입력이 적어도 한 번 또는 정확히 한 번 나타나는지 확인해야합니까?
xnor

@xnor, 여러 번 나타나면 괜찮습니다. 질문을 업데이트했습니다.
SomeShinyObject

1
그렇다면 그만한 가치가 없습니다.
nyuszika7 시간

1
@ChristopherW이 문제가 계속 발생하면이 웹 사이트 keyboardtester.com을 살펴보십시오 .
gxtaillon 2018 년

2
@MomemtumMori, 펜실베니아 네덜란드어 키보드 기술을 사이드 바에서 넘겨주는 그 손? 완전히 내 꺼야
SomeShinyObject 2016 년

답변:


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 이외의 다른 문자)가 포함되지 않는다고 말하고 유효한 문자 만 포함한다고 말합니다. 줄 바꿈이 잘못된 문자입니까?
SE가 EVIL이기 때문에 aditsu가

으로 유효한 의미 나 범위 우리에있는 거 테스트 ,하지만 난 OP를 요청할 때 좀 더 명확하게 자신을 표현해야 것 같아요 ...
데니스

6

골프 스크립트, 11

인쇄 가능한 ASCII는 그리 흥미롭지 않습니다…

127,32,-^,!

루비, 68

-rset4 문자 플래그 포함 .

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

파이썬 3, 76

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

1
두 가지 별도의 답변으로 게시하는 것이 좋습니다.
nyuszika7 시간

3

자바 스크립트-62 70

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

그리고 조금 더 짧습니다 :

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

2

CJam-9

',33>q-!

"이동 된"문자 (대문자 포함)도 검사합니다. http://cjam.aditsu.net/
에서 시도 하십시오

참고 : 아포스트로피 뒤에는 보이지 않는 문자 (코드 127)가 있습니다.


"또한"이동 된 "문자 (대문자 포함)를 확인합니다." 나는 그것이 잘못된 행동이라고 말하고 싶습니다.
Ry-

@minitech "전환 된 문자를 포함 시키려면 선택하십시오."
SE가 EVIL이기 때문에 aditsu가

그러나 그 직전에“대문자 또는 소문자”라고 표시됩니다 (독점적입니까?)
Ry-

@ minitech, 질문을 업데이트했습니다. 죄송합니다. OR은 오도의 소지가 있습니다.
SomeShinyObject 2016 년

@ChristopherW 내 프로그램은 예제 입력에 0을 인쇄하지만 shift를 누른 상태에서 모든 문자를 누르면 1이 인쇄됩니다. 괜찮습니까?
SE가 EVIL이기 때문에 aditsu가

2

PHP

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

$_GET['i'] 입력입니다


1
$_GET허용되는 경우 1 개의 문자를 저장하는 데 사용하십시오 .
22:53에

@tomsmeding, 그래 내가 했어 :)
Alireza Fallah

문자열 앞에 패딩 문자 (é 또는 무언가)를 추가하고을 제거하여 !==false8자를 저장 한 다음 중괄호를 4 개 더 저장할 수 있습니다. register_globals이것을 만든다 "é$i". die(NO)가능합니다.
Ry-

@ minitech-나는 당신이 무슨 말을하는지, 패딩 문자를 모른다? 대신 내 대답을 편집 할 수 주시기 바랍니다
알리레자 Fallah에게


1

Haskell, 41 (2 가지 솔루션)

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

또는 (포인트 프리 스타일)

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

최소한 다음 문자를 입력해야합니다.

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

어떤 순서로도 여러 번. 추가 문자가 허용됩니다. 통역사를 운영하십시오. 완료되면 Enter 키를 눌러야하지만 완료하기 전에 Enter 키를 누르면 문자를 계속 입력하고 Enter 키를 다시 누를 수 있습니다. True당신이 모든 문자를 명중하면 인쇄 합니다, 그렇지 않으면 아무것도 인쇄하지 않습니다.


0

펄, 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

대부분의 셸에서는 반향 된 문자열의 일부 문자를 이스케이프해야하므로 예제가 실패합니다.
데니스

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을 얻습니다 (true). a의 초기화 값을 변경하여 문자 세트를 변경할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.