Test delle tastiere


13

Il mio problema

Nel mio attuale posto di lavoro, da solo (ok da solo perché non mi mancano gli arti) mantengo circa 700 laptop. A causa della natura e della frequenza del loro utilizzo, trovo spesso che vengano restituiti con un po 'di danno. Per questo problema, la mia preoccupazione principale è quando un laptop viene restituito con una tastiera rotta o defunta. Quando il riparatore hardware corregge queste tastiere rotte, diventa necessario testarle. Il test prevede l'utilizzo di ogni tasto ... e ... ogni ... singolo .... Che trascinamento giusto? Il problema è che a volte perdo la traccia se ho digitato una chiave o meno.

Una soluzione?

Scrivi un programma / script che:

  1. Accetta l'input dell'utente
  2. Al momento dell'invio (nel modo che ritieni opportuno), determina se è stato premuto ciascun tasto.
  3. Emette sì o no o qualsiasi modo per indicare che o sono riuscito a premere tutti i tasti oppure no. (Indica nella tua risposta i due possibili output se non è qualcosa di ovvio).

ipotesi:

  1. Maiuscole, minuscole, entrambe? Qualunque modo tu ritenga opportuno. Finché è [AZ], [az] o [A-Za-z]. Lo stesso vale con numeri e altri simboli. (Quindi, se è =stato digitato, +non importa). La tua scelta se vuoi includere personaggi spostati o meno.
  2. Non devi preoccuparti di schede o spazi
  3. Non sono necessari tasti funzione, CTRL, ALT, Esc o altri tasti che non generano alcun risultato sullo schermo
  4. Ciò presuppone una tastiera EN-US e i laptop non includono un tastierino numerico.
  5. Sistema operativo indipendente, qualunque sia la lingua che preferisci
  6. Non importa se il tasto è stato premuto più volte (per quando il tester diventa pigro e inizia a rompere i pulsanti come se fosse Mortal Kombat)

Ecco un potenziale set di input che tornerà vero (o sì, o "L'hai fatto!")

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

Il vincitore è determinato dal minor numero di personaggi.


Dobbiamo verificare che ogni sequenza di tasti appaia almeno una volta o esattamente una volta?
xnor

@xnor, se appare più volte, va bene. Ho aggiornato la domanda.
SomeShinyObject

1
Va bene allora, non ne vale la pena.
nyuszika7h

1
@ChristopherW Se questo è un problema in corso per te, dovresti dare un'occhiata a questo sito web keyboardtester.com .
gxtaillon,

2
@MomemtumMori, quella mano che fa la tecnica di tastiera olandese della Pennsylvania nella barra laterale? Totalmente mio.
SomeShinyObject

Risposte:


1

GolfScript, 6 byte

.&,94=

Se sono presenti tutti i caratteri ASCII con codici compresi tra 33 e 127, stampa 1. Altrimenti, stampa 0.

Questo approccio fallirà se l'input contiene altri caratteri (inclusa una nuova riga finale), che è stato consentito dall'OP ed è vero anche per la soluzione GolfScript esistente.

uso

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

Come funziona

.&  # 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.

Il commento che hai collegato non dice che l'input non conterrà una nuova riga (o altri caratteri al di fuori di 33-126), dice solo che conterrà solo caratteri validi. Newline è un carattere non valido?
Aditsu ha smesso perché SE è MALE

Per valido intendevo nella gamma contro la quale stiamo testando , ma immagino che avrei dovuto esprimermi più chiaramente quando chiedevo all'OP ...
Dennis

6

GolfScript, 11

ASCII stampabile non è così interessante ...

127,32,-^,!

Ruby, 68

Con bandiera -rsetper 4 caratteri.

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

e

Python 3, 76

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

1
Suggerirei di pubblicarli in due risposte separate.
nyuszika7h

3

JavaScript - 62 70

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

E un po 'più breve:

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

2

CJam - 9

',33>q-!

Controlla anche i caratteri "spostati" (comprese le lettere maiuscole).
Provalo su http://cjam.aditsu.net/

Nota: esiste un carattere invisibile (con codice 127) dopo l'apostrofo.


"Controlla anche i caratteri" spostati "(comprese le lettere maiuscole)." Direi che è un comportamento scorretto.
Ry,

@minitech "La tua scelta se vuoi includere caratteri spostati o meno."
Aditsu ha smesso perché SE è MALE

Ma proprio prima, dice "Maiuscolo o minuscolo" (che è esclusivo, giusto?)
Ry

@minitech, ho aggiornato la domanda. Scusa. Quel OR è fuorviante.
SomeShinyObject

@ChristopherW Il mio programma stamperà 0 sull'input di esempio, ma se si premono anche tutti quei caratteri mentre si tiene premuto maiusc, verrà stampato 1. Va bene?
Aditsu ha smesso perché SE è MALE

2

PHP

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

$_GET['i'] è l'input


1
Utilizzare $_GETper salvare 1 carattere se è accettabile.
tomsmeding

@tomsmeding, sì l'ho fatto :)
Alireza Fallah,

Puoi aggiungere un carattere di riempimento (é o qualcosa del genere) nella parte anteriore della stringa e rimuoverlo !==falseper salvare 8 caratteri, quindi le parentesi graffe per altri 4. register_globalsrende questo "é$i". die(NO)è anche possibile.
Ry

@minitech - Non so cosa dici, carattere di riempimento? sentiti libero di modificare invece la mia risposta
Alireza Fallah,

1

Python 72:

f=lambda x:set(x)==set("`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./")

3
L'OP ha richiesto un programma che accetta l'input dell'utente.
nyuszika7h

1

Haskell, 41 (due soluzioni)

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

o (stile senza punti)

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

È necessario inserire almeno questi caratteri:

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

in qualsiasi ordine, un numero qualsiasi di volte. Sono ammessi caratteri extra. Esegui in un interprete. Devi premere Invio quando hai finito, ma se premi Invio prima di aver finito, puoi continuare a inserire i caratteri e premere di nuovo Invio. Stampa Truese hai colpito tutti i personaggi, altrimenti non stampa nulla.


0

Perl, 70 caratteri

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

Uso:

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

Stampa 1 se sono presenti tutte le sequenze di tasti, altrimenti non stampa nulla.


Richiede Perl 5.10+
Zaid

Nella maggior parte delle shell, il tuo esempio fallirà poiché alcuni dei caratteri nella stringa eco richiedono l'escaping.
Dennis,

0

C, 97 caratteri

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

È necessario chiamare il programma con argomento contenente almeno le lettere:

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

e ottieni la risposta 1 (vero). Il set di caratteri può essere modificato modificando il valore di inizializzazione di a.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.