Testen von Tastaturen

13

Mein Problem

An meinem jetzigen Arbeitsplatz pflege ich im Alleingang (ok im Alleingang, weil mir keine Gliedmaßen fehlen) ungefähr 700 Laptops. Aufgrund der Art und Häufigkeit ihrer Verwendung stelle ich häufig fest, dass sie mit ein wenig Schaden zurückgegeben werden. Für dieses Problem ist mein Hauptanliegen, wenn ein Laptop mit einer kaputten oder defekten Tastatur zurückgegeben wird. Wenn der Hardware-Mechaniker diese defekten Tastaturen repariert, müssen sie getestet werden. Bei diesem Test wird jeder ... und ... jeder ... einzelne ... Schlüssel verwendet. Was für ein Widerstand, oder? Das Problem ist, dass ich manchmal den Überblick verliere, ob ich einen Schlüssel eingegeben habe oder nicht.

Eine Lösung?

Schreiben Sie ein Programm / Skript, das:

  1. Übernimmt Benutzereingaben
  2. Bestimmt bei der Übermittlung (wie auch immer Sie es für richtig halten), ob jede Taste gedrückt wurde.
  3. Gibt "Ja" oder "Nein" oder eine andere Art aus, um anzuzeigen, dass es mir gelungen ist, alle Tasten zu drücken oder nicht. (Geben Sie in Ihrer Antwort die zwei möglichen Ausgaben an, wenn dies nicht offensichtlich ist).

Annahmen:

  1. Großbuchstaben, Kleinbuchstaben, beide? Egal wie Sie es für richtig halten. Solange es sich um [AZ], [az] oder [A-Za-z] handelt. Gleiches gilt für Zahlen und andere Symbole. (Also, wenn =eingetippt wurde, +spielt es keine Rolle). Sie können wählen, ob Sie verschobene Zeichen einfügen möchten oder nicht.
  2. Sie brauchen sich keine Gedanken über Tabulatoren oder Leerzeichen zu machen
  3. Es werden keine Funktionstasten, STRG, ALT, Esc oder andere Tasten benötigt, die nichts auf dem Bildschirm ausgeben
  4. Dies setzt eine EN-US-Tastatur voraus und die Laptops enthalten keinen Nummernblock.
  5. Betriebssystemunabhängig, egal welche Sprache Sie bevorzugen
  6. Es spielt keine Rolle, ob die Taste mehrmals gedrückt wurde.

Hier ist ein potenzieller Eingabesatz, der true zurückgibt (oder yes oder "You did it!")

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

Der Gewinner wird durch die geringste Anzahl von Zeichen bestimmt.

SomeShinyMonica
quelle
Müssen wir überprüfen, ob jeder Tastenanschlag mindestens einmal oder genau einmal erscheint?
Xnor
@ xnor, Wenn es mehrmals erscheint, ist es in Ordnung. Ich habe die Frage aktualisiert.
SomeShinyMonica
1
Okay, das ist es nicht wert.
nyuszika7h
1
@ChristopherW Wenn dies ein aktuelles Problem für Sie ist, sollten Sie einen Blick auf diese Website werfen keyboardtester.com .
Gxtaillon
2
@MomemtumMori, diese Hand, die die Pennsylvania Dutch-Tastaturtechnik in der Seitenleiste ausführt? Ganz meins.
SomeShinyMonica

Antworten:

1

GolfScript, 6 Bytes

.&,94=

Wenn alle ASCII-Zeichen mit Codes zwischen 33 und 127 vorhanden sind, wird 1 ausgegeben. Andernfalls wird 0 ausgegeben.

Dieser Ansatz schlägt fehl, wenn die Eingabe andere Zeichen enthält (einschließlich einer letzten neuen Zeile), was vom OP zugelassen wurde und auch für die vorhandene GolfScript-Lösung gilt.

Verwendung

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

Wie es funktioniert

.&  # 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.
Dennis
quelle
Der von Ihnen verknüpfte Kommentar besagt nicht, dass die Eingabe keine Zeilenumbrüche (oder andere Zeichen außerhalb von 33-126) enthält, sondern nur, dass sie nur gültige Zeichen enthält. Ist Newline ein ungültiges Zeichen?
Aditsu
Mit " gültig" meine ich den Bereich, gegen den wir testen , aber ich denke, ich hätte mich klarer ausdrücken sollen, wenn ich das OP gefragt hätte ...
Dennis
6

GolfScript, 11

Druckfähiges ASCII ist nicht so interessant ...

127,32,-^,!

Rubin, 68

Mit Flagge -rsetfür 4 Zeichen.

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

und

Python 3, 76

print(set("`1234567890-=qwertyuiop[]\\asdfghjkl;'zxcvbnm,./")==set(input()))
Ry-
quelle
1
Ich würde vorschlagen, diese in zwei separaten Antworten zu veröffentlichen.
nyuszika7h
3

JavaScript - 62 70

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

Und ein bisschen kürzer:

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

CJam - 9

',33>q-!

Es prüft auch die "verschobenen" Zeichen (einschließlich Großbuchstaben).
Versuchen Sie es unter http://cjam.aditsu.net/

Hinweis: Nach dem Apostroph befindet sich ein unsichtbares Zeichen (mit Code 127).

aditsu
quelle
"Es prüft auch die" verschobenen "Zeichen (einschließlich Großbuchstaben)." Ich würde sagen, das ist falsches Verhalten.
Ry
@minitech "Sie können wählen, ob Sie verschobene Zeichen einfügen möchten oder nicht."
Aditsu
Aber kurz davor steht „Groß- ODER Kleinschreibung“ (das ist exklusiv, oder?)
Ry-
@minitech, ich habe die Frage aktualisiert. Es tut uns leid. Dieser OP ist irreführend.
SomeShinyMonica
@ChristopherW Mein Programm gibt in Ihrer Beispieleingabe 0 aus. Wenn Sie jedoch auch alle diese Zeichen bei gedrückter Umschalttaste drücken, wird 1 ausgegeben. Ist das in Ordnung?
Aditsu
2

PHP

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

$_GET['i'] ist der Eingang

Alireza Fallah
quelle
1
Verwenden Sie $_GETdiese Option , um 1 Zeichen zu speichern, wenn dies zulässig ist.
Tomsmeding
@ Tomsmeding, ja, ich habe :)
Alireza Fallah
Sie können ein Füllzeichen (é oder so) an der Vorderseite Ihrer Zeichenfolge einfügen und das entfernen !==false, um 8 Zeichen zu speichern, und dann die geschweiften Klammern für weitere 4 Zeichen. register_globalsmacht das "é$i". die(NO)ist auch möglich.
Ry
@minitech - Ich weiß nicht, was du sagst, Füllzeichen? Fühlen Sie sich frei, meine Antwort stattdessen zu bearbeiten
Alireza Fallah
1

Python 72:

f=lambda x:set(x)==set("`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./")
ɐɔıɐɔuʇǝɥʇs
quelle
3
Das OP fragte nach einem Programm, das Benutzereingaben entgegennimmt.
nyuszika7h
1

Haskell, 41 (zwei Lösungen)

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

oder (Punktefreier Stil)

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

Müssen Sie mindestens diese Zeichen eingeben:

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

in beliebiger Reihenfolge und beliebig oft. Zusätzliche Zeichen sind erlaubt. Führen Sie einen Interpreter ein. Wenn Sie fertig sind, müssen Sie die Eingabetaste drücken. Wenn Sie jedoch die Eingabetaste drücken, bevor Sie fertig sind, können Sie weiterhin Zeichen eingeben und die Eingabetaste erneut drücken. Wird gedruckt, Truewenn Sie jedes Zeichen getroffen haben, andernfalls wird nichts gedruckt.

YawarRaza7349
quelle
0

Perl, 70 Zeichen

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

Verwendung:

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

Druckt 1, wenn alle Tastenanschläge vorhanden sind, sonst wird nichts gedruckt.

Zaid
quelle
Benötigt Perl 5.10+
Zaid
In den meisten Shells schlägt Ihr Beispiel fehl, da einige der Zeichen in der Echozeichenfolge ein Escape-Zeichen erfordern.
Dennis
0

C 97 Zeichen

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

Das Programm muss mit einem Argument aufgerufen werden, das mindestens die Buchstaben enthält:

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

und bekomme Antwort 1 (wahr). Der Zeichensatz kann geändert werden, indem der Initialisierungswert von a geändert wird.

Franzzzzzzzz
quelle