キーボードのテスト


13

私の問題

現在の職場では、片手で(手足が足りないので両手でOK)、約700台のラップトップを保守しています。それらの使用の性質と頻度のために、私はしばしばそれらが少しの損傷で返されることを発見します。この問題に関して、私の主な関心事は、ラップトップが壊れたキーボードまたは機能しなくなったキーボードで返品されるときです。ハードウェア修理工がこれらの壊れたキーボードを修理するとき、それらをテストすることが必要になります。テストでは、それぞれ...および...すべて...単一...キーを使用します。なんてドラッグなの?問題は、キーを入力したかどうかを把握できなくなる場合があることです。

解決策?

次のプログラム/スクリプトを作成します。

  1. ユーザー入力を受け取ります
  2. 提出時に(適切と思われる方法で)、各キーが押されたかどうかを判別します。
  3. yesまたはno、またはすべてのキーを押すことに成功したかどうかを示す任意の方法を出力します。(明らかでない場合は、2つの可能な出力を回答に記載してください)。

仮定:

  1. 大文字、小文字、両方?どちらの方が適していると思いますか。[AZ]、[az]、または[A-Za-z]である限り。数字やその他の記号についても同様です。(したがって、=入力された場合、+問題ではありません)。シフト文字を含めるかどうかを選択します。
  2. タブやスペースを気にする必要はありません
  3. ファンクションキー、CTRL、ALT、Esc、または画面に何かを出力しない他のキーは不要
  4. これは、EN-USキーボードを想定しており、ラップトップにテンキーが含まれていません
  5. OSに依存しない、あなたが好む言語
  6. キーが複数回押されたかどうかは関係ありません(テスターが怠laになり、Mortal Kombatのようにボタンが破壊される場合)

以下は、true(またはyes、または "You done it!")を返す可能性のある入力セットです。

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

勝者は、文字の最小数によって決定されます。


各キーストロークが少なくとも1回または正確に1回表示されることを確認する必要がありますか?
xnor

@xnor、複数回表示される場合は問題ありません。質問を更新しました。
SomeShinyMonica

1
さて、それはそれだけの価値はありません。
nyuszika7h 14年

1
@ChristopherWこれが継続的な問題である場合は、このウェブサイトkeyboardtester.comをご覧ください。
gxtaillon 14年

2
@MomemtumMori、その手はサイドバーでペンシルベニア・ダッチのキーボード技術をやっていますか?完全に私のもの。
SomeShinyMonica 14年

回答:


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が終了した14

することで、有効な意味I 範囲たちに対してしているテストで、私はOPを求めたときに、私はより明確に自分自身を表明している必要がありますね...
デニス

6

GolfScript、11

印刷可能なASCIIはそれほど興味深いものではありません…

127,32,-^,!

ルビー、68

-rset4文字のフラグ付き。

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

そして

Python 3、76

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

1
これらを2つの別々の回答に投稿することをお勧めします。
nyuszika7h 14年

3

JavaScript-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- 14年

@minitech「シフト文字を含めるかどうかを選択します。」
SEがEVILであるため、aditsuは終了します14

しかし、その直前に、「大文字または小文字」と言います(排他的ですか?)
Ry- 14年

@minitech、質問を更新しました。ごめんなさい。そのORは誤解を招く。
SomeShinyMonica 14年

@ChristopherW私のプログラムは入力例に0を出力しますが、Shiftキーを押しながらこれらのすべての文字を押すと、1が出力されます。
SEがEVILであるため、aditsuは終了します14

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

文字列の先頭にパディング文字(éまたは何か)を追加し、を削除し!==falseて8文字を保存してから、さらに4つの中括弧を追加できます。register_globalsこれを作ります"é$i"die(NO)も可能です。
Ry- 14年

@minitech-あなたの言うこと、パディング文字がわかりませんか?代わりに私の答えを自由に編集してください
Alireza Fallah 14年


1

Haskell、41(2つのソリューション)

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+が必要です
ザイド

ほとんどのシェルでは、エコーされた文字列の一部の文字をエスケープする必要があるため、サンプルは失敗します。
デニス14年

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.