Le défi
Le but de ce défi est de déterminer si une chaîne donnée peut être saisie à l'aide d'une seule ligne d'un clavier QWERTY britannique standard.
C'est code golf
donc la solution la plus courte en octets qui gagne!
IO
L'entrée sera une seule chaîne de zéro ou plusieurs caractères dans la plage décimale ASCII de 32 à 126 inclus. Vous pouvez supposer pour ce défi qu'une chaîne vide ne nécessite aucune saisie et peut donc être saisie à l'aide d'une seule ligne.
Vous pouvez prendre l'entrée comme une chaîne, une liste de caractères ou un formulaire équivalent pour votre langue.
La sortie doit être une valeur véridique pour toute chaîne pouvant être saisie à l'aide d'une seule ligne, ou falsey pour celle qui ne le peut pas.
Clavier
Pour clarifier toute ambiguïté sur la disposition du clavier standard ci-dessous est une liste de touches disponibles sur chaque ligne, y compris les touches supérieures alternatives (accessibles via Maj).
- Ligne 1
- La norme:
`1234567890-=
- La norme:
- Ligne 2
- La norme:
qwertyuiop[]
- La norme:
- Ligne 3
- La norme:
asdfghjkl;'#
- Majuscule:
ASDFGHJKL
- Spécial: Verrouillage des majuscules
- La norme:
- Ligne 4
- La norme:
\zxcvbnm,./
- Alterner:
|<>?
- Majuscule:
ZXCVBNM
- Spécial: Shift
- La norme:
- Ligne 5
- Spécial: barre d'espace
Les touches supérieures alternatives ne peuvent être enfoncées que si Shift est également sur la même ligne, et les touches majuscules ne sont accessibles que via le verrouillage des majuscules ou Shift. Vous ne pouvez vraiment utiliser qu'une seule ligne de clavier!
Cas de test
-> true (empty string)
45-2=43 -> true (line 1)
qwerty -> true (line 2)
tryitout -> true (line 2)
Qwerty -> false (no shift or caps on line 2)
#sad -> true (line 3)
AsDf -> true (caps lock used)
@sDF -> false (no shift for alternate upper)
zxcvbn? -> true (line 4)
zxc vbn -> false (spacebar on separate line)
123abc -> false (multiple lines)
-> true (just space bar)
!!! -> false (exclamation marks cannot be printed by a single line)
la source
Réponses:
Python 2 ,
130123121 121115 octetsEssayez-le en ligne!
Python 3 , 111 octets
Essayez-le en ligne!
-4 octets, grâce à nedla2004
la source
Retina 0.8.2 ,
7271 octetsEssayez-le en ligne! Explication: chaque alternance correspond à une ligne différente du clavier. Au
(?i)
milieu du motif, le reste du motif est mis en correspondance sans tenir compte de la casse. Edit: 1 octet enregistré grâce à @KirillL.la source
opqr
peut être changéo-r
pour -1. Aussi, avez-vous oublié un caractère de backtick pour la ligne 1, je ne le vois pas?[][...
:)05AB1E ,
6647 octetsPrend l'entrée comme une liste de caractères.
-19 octets grâce à @Emigna . J'ai complètement oublié que nous avions des constantes constantes qwerty-keyboard. :RÉ
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Perl 5
-pl
, 76 octetsEssayez-le en ligne!
L'approche regex évidente.
la source
Rubis
-n
,8681 octetsEssayez-le en ligne!
la source
JavaScript (Node.js) ,
999895 octetsEssayez-le en ligne!
-1 du commentaire de @Kirill L. dans la réponse Retina.
-3 remercie @Ismael Miguel et @Arnauld pour leurs efforts combinés.
la source
asdfghjkl
etASDFGHJKL
là-dedans? Pourquoi n'utilisez-vous pas lei
drapeau, commex=>/.../i.test(x)
?QWERTYUIOP
ne devrait pas correspondre à l'expression régulière. La vérification supplémentaire coûtera plus cher que de coder ces lettres majuscules directement dans l'expression régulière.x=>/^([-`=\d]+|[wetyuio-r\[\]]+)$/.test(x)||/^([asdfghjkl;'#]+|[zxcvbnm,.\/<>?\\|]+| *)$/i.test(x)
est de la même longueur|
enregistre 1 octet.\
,]
et-
(voir ClassAtomNoDash dans la spécification). Le tiret peut également apparaître sans échappement s'il s'agit du premier ou du dernier caractère (sinon, il est interprété comme un séparateur de plage de caractères).Perl 6 ,
102 101100 octets-1 octet grâce à nwellnhof!
Essayez-le en ligne!
Implémentation assez standard. Il existe probablement une solution basée sur des expressions rationnelles plus courte, mais je ne connais pas suffisamment les expressions rationnelles de Perl 6 pour faire une tentative.
la source
max
place de?any
(etmin
au lieu de?all
).m:P5//
. Mais je ne pense pas que l'un d'eux mérite d'être publié comme réponse.Java 10,
209208 octets-1 octet grâce à @TFeld .
Essayez-le en ligne.
Explication:
la source
!!!
points d'exclamation ne peuvent pas être imprimés par une seule ligne. Je viens d'ajouter cela comme cas de test(?i)
pour les autres lettres majuscules?p==" "
place dep.equals(" ")
Powershell, 87 octets
Port de la rétine regex de Neil .
la source
Gelée , 55 octets
Essayez-le en ligne!
La première ligne donne une liste des lignes du clavier et la seconde vérifie si l'entrée du programme est contenue sur une seule (ou zéro) ligne et qu'il n'y a pas de caractères qui ne peuvent pas être tapés (comme
QWE!@#
).la source
C , 150 octets
Essayez-le en ligne!
Il ne gagnera aucun prix, mais c'est une approche amusante: nous mappons les caractères sur les cinq lignes du clavier à
4 8 16 32 64
, et chaque caractère invalide à3
. Nous bit à bit OU la valeur de chaque caractère de la chaîne ensemble, et vérifions si le résultat est satisfaisantx&(x-1) == 0
, ce qui est vrai quandx
est une puissance de 2 ou zéro, c'est-à-dire chaque foisx
qu'un maximum de bits est défini.la source
LUA ,
282262259270 octetsEssayez-le en ligne!
la source
PHP, 98 octets
Je suis un peu triste qu'il n'y ait rien de plus court que l'expression régulière. Ce n'est probablement pas la solution la plus rapide.
Exécuter en tant que pipe avec
-F
ou l' essayer en ligne .Solution non regex la plus courte que j'ai trouvée (124 octets; saut de ligne et tabulation pour plus de commodité de lecture):
sort avec le code
1
pour véridique,0
pour faux. Exécuter en tant que tuyau avec-R
.Nécessite PHP 5.4 ou version ultérieure; pour les anciens PHP, utilisez à la
array(...)
place de[...]
(+5 octets)ou utilisez ces 123 octets avec
-nR
en PHP <7:la source
AWK ,
163119113 octetsIl s'agit d'une réponse AWK, renvoie une chaîne numérique 1 pour true, 0 chaîne pour false. (Écrit en tant qu'AWK invoquer en tant que fichier awk -f pour une utilisation interactive.)
Essayez-le en ligne!
Cependant, ne gère pas le caractère TAB tel qu'il est écrit (extension triviale) comme ne faisant pas partie de la spécification.
la source
print
suffit: essayez-le en ligne!{print/^[-```1234567890=]*$/||/^[]qwertyuiop\[]*$/||/^[asdfghjkl;'#ASDFGHJKL]*$/||/^[zxcvbnm,.\/\|<>?ZXCVBNM]*$/||/^ *$/}
Bash , 119 octets
Comprend un écho pour fournir une sortie "lisible". Si vous mettez un emballage approprié de shell (votre choix) autour pour inclure l'impression / sortie, vous pouvez économiser 8 octets. Ma lecture du défi suggère que la solution devrait produire une indication de sortie appropriée, donc je m'en tiens à 119 octets.
Essayez-le en ligne!
la source