Étant donné l'un des caractères suivants (ou une nouvelle ligne):
`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:"zxcvbnm,./ZXCVBNM<>?
Votre programme doit sortir la ligne qu'il est sur le clavier
Parce que mon clavier est (presque) à court de batterie, votre code doit être le plus court possible
Le clavier que votre programme devrait utiliser (pour la recherche de ligne) devrait ressembler à ceci:
Row 1:~` !1@2 #3$4 %5^6 &7*8 (9)0 _-+=
Row 2: Q W E R T Y U I O P {[ }] |\
Row 3: A S D F G H J K L :; "' ↵ return
Row 4: Z X C V B N M <, >. ?/
Row 5: space
Où ↵ returnest une nouvelle ligne. Les clés vides ne veulent rien dire.
Exemples
"$"
1
"R"
2
"a"
3
"?"
4
"\n"
3
" "
5
où \n
est un caractère de nouvelle ligne.
Caractéristiques
- Votre programme devrait être insensible à la casse
- Votre programme n'a besoin que de gérer les caractères du clavier indiqué
la source
kbd
?Réponses:
Pyth,
626665 octetsEssayez-le en ligne.
Utilise une chaîne compactée représentant un nombre en hexadécimal qui, une fois coupé en morceaux à deux bits, représente la ligne de tous les caractères sauf
et en
!
tant que valeur de 0 à 3. Nous laisser de côtéet
!
que nous ne devons pas stocker 4 ou avoir 0 au début de ce nombre, puis ajoutez leurs valeurs de ligne avec+,4Z
. Une fois que la chaîne a été convertie en valeurs de ligne, il ne reste plus qu'à utiliser le code de caractère de l'entrée pour l'indexer dans le tableau de valeurs, puis ajouter 1.Newline est gérée séparément car elle est interprétée par Pyth comme une chaîne vide et a donc un code de caractère de 0.
Ce serait plus court si je pouvais comprendre comment utiliser la base 256 en Pyth, mais je ne peux pas le faire fonctionner correctement.
la source
JavaScript (ES6),
105102101 octetsExplication
JavaScript
test
renvoie un booléen qui agit le même que1
ou0
si je les multiplier par leur rang. Le test de la ligne 2 a pris le plus grand nombre d'octets, j'ai donc utilisé celui-ci par défaut si aucun autre ne correspondait.Tester
Afficher l'extrait de code
la source
c="q"
,++c
=NaN
,NaN*7
=NaN
,NaN^2
convertit les opérandes en entiers (non diffusables commeNaN
devenir0
), alors ce0 XOR 2
qui est2
.Glava 1.5 , 164 octets
Glava est un dialecte de Java qui raccourcit le code Java. Ce code est malheureusement non compétitif car le commit (2 heures de retard ...) utilisé a été fait après ce challenge, qui corrigeait quelques bugs essentiels qui ne permettaient pas à ce programme de fonctionner.
C'est un programme complet qui prend des entrées via des arguments en ligne de commande. Fonctionne simplement en testant pour quelle rangée regex elle correspond, puis affiche le nombre correspondant.
la source
Python 3, 142
Il y a probablement un moyen plus court que j'oublie ¯ \ _ (ツ) _ / ¯
la source
Pyth , 98
Je ne sais pas comment faire fonctionner la gamme 0-9 pour une raison quelconque: |, inspirée par la réponse de user81655
la source
jkUT
pour la chaîne comprise entre 0 et 9, sans savoir s'il existe un moyen plus court. Vous pouvez également utiliser des chaînes empaquetées pour économiser quelques octets, par exemple,."!~WÏù¹_(<]úÝ"
pour"~`!@#$%^&*()_-=+"
.Bash, 108
Pas de réponse Bash? Bash répond.
grep -Fin
est certainement le bon outil pour ce travail.Ce programme est en deux fichiers.
k
, 73 octetsIl y a 5 lignes, la dernière est un espace. Si vous rencontrez des problèmes pour reproduire le fichier, le base64 est:
b
, 34 octetsC'est le programme lui-même, il prend en entrée comme seul argument de ligne de commande.
Score: 34 + 73 + 1 (pour
k
le nom du fichier) = 108 octetsUngolfed
Explication
grep
- recherche dans un fichier les lignes correspondant à une chaîne ou à une expression régulière, affiche uniquement ces lignes-F
aka--fixed-strings
- désactive les expressions régulières,[
etc. sont gérées correctement-i
aka-y
aka--ignore-case
- correspondance insensible à la casse-n
aka--line-number
- affiche le numéro de la ligne et: avant chaque ligne (par exemple4:zxcvbnm,./<>?
)"$1"
- recherche du premier argument de ligne de commande du script, les guillemets sont nécessaires pour gérer les nouvelles lignes et l'espacek
- recherche dans le fichierk
grep
commande correspondra aux cinq lignes si l'entrée est une nouvelle ligne, et à une seule ligne sinon.|
- pipe, envoie la sortie standard d’une commande à l’entrée standard de la suivantetail
- afficher les N dernières lignes ou caractères d’entrée standard-n3
aka--lines=3
- affiche les 3 dernières lignes-n
indicateur activégrep
. Sinon, cette commande ne prend que les lignes 3, 4 et 5 (les 3 dernières lignes).|
- pipehead
- afficher les N premières lignes ou caractères d’entrée standard-c1
aka--bytes=1
- affiche le premier caractèrela source
Japt,
737066 octetsEssayez-le en ligne! (dans l'exemple, l'entrée est littéralement une nouvelle ligne)
la source
!1
est quelque chose qui correspond à "faux", enfin je sais comment le faire, merci :)Java, 300 octets
Je ne suis pas un expert, et c’est ma première tentative de golf, mais j’ai pensé que c’était quoi, pourquoi pas? La version complète du programme est présentée ci-dessus. Le code qui y est contenu enlèverait très probablement un nombre décent de caractères.
la source
class A{public static void main(String[]a){int f="~'!1@2#3$4%5^6&7*8(9)0_-+=qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\'\"\r".indexOf(new java.util.Scanner(System.in).nextLine().charAt(0));System.out.print(f<0?4:f<26?1:f<53?2:f<76?3:5);}}
( 243 octets ). J'ai supprimé certaines parenthèses inutiles. raccourciargs
; enlevépublic
; directement utilisé la chaîne et le scanner; et supprimé l'importation maintenant quijava.util.Scanner
est utilisé une fois.Pyth, 105 octets
Explication:
J'ai décidé de choisir la première ligne comme étant la ligne "doit être si rien d'autre" car elle nécessitait le plus grand nombre d'octets à représenter, même après le golf.
la source
Perl 6, 128 octets
Je fais une liste de regex contenant des classes de caractères avec un espace littéral de chaîne. J'appelle ensuite la
first
méthode de la liste (qui est simplement la version de la méthode de lafirst
fonction d'ordre supérieur), en utilisant smartmatch pour comparer l'argument transmis au programme à l'élément actuel de la liste. Notez que smartmatch fait "la bonne chose" pour les expressions rationnelles et un littéral de chaîne. Le:k
paramètre facultatif tofirst
force la méthode à renvoyer l’index de l’élément correspondant dans la liste, à laquelle j’ajoute ensuite 1 et le produit viasay
.Notez que lorsque vous utilisez ce programme, vous devrez correctement échapper certains caractères tels que `et l'espace dans votre shell. Par exemple: perl6 keyboard.p6 \ `
la source
JavaScript ES6, 114 octets
Une autre solution JavaScript. Le principe consiste à renvoyer l'index du caractère d'entrée dans le tableau de lignes plus 2 (de sorte que la ligne 0 à 9 renvoie -1, c'est-à-dire qu'il n'existe pas, -1 + 2 = 1.
q
Figure dans la première chaîne du tableau, donc il retourne 0 + 2 = 2e ligne).la source
Perl,
967776 octetsCourir en utilisant
perl -p
. Assurez-vous de ne le nourrir que de caractères simples; par exemple, pour l'exécuter à partir d'un fichierkey.pl
(pour éviter toute confusion avec les séquences d'échappement du shell)echo -n q|perl -p key.pl
.Abuser de la fonctionnalité de la gamme regex est amusant.
la source
echo
pour contrôler avec précision l'entrée - par exemple.echo -n q|perl -n key.pl
, qui produit correctement2
.chomp
cette entrée.chomp
saisis l'entrée, je ne serais pas en mesure de renvoyer «3» pour la clé de retour.$_=~
pour les matchs,m//
(qui est ce qui/.../
est) fonctionne$_
automatiquement! Aussi, si vous utilisez-p
au lieu de,-n
vous pouvez utiliser$_=
au lieu deprint
sauvegarder quelques octets supplémentaires. Utiliser une nouvelle ligne littérale à la place de\n
peut aussi vous faire économiser un autre octet! Cela devrait réduire votre code un peu! Cela vaut peut-être la peine d’ajouter un exemple d’utilisation afin que tous les tests sachent que vous devez utiliserecho -n
:)PHP, 173 octets
L'idée ici était d'utiliser le nombre de groupes de capture d'expression régulière comme index de lignes. Probablement quelques optimisations supplémentaires dans la regex elle-même.
L'
preg_match()
appel créera un tableau$m
de correspondances, et si nous devions l'imprimer, cela ressemblerait à ceci (en supposant qu'il s'agisse dez
l'entrée):En retournant ce tableau, en échangeant des clés et des valeurs, on se déplace de gauche à droite et ne conserve que la dernière clé distincte. On obtient donc:
Ensuite, nous utilisons le caractère d'entrée comme index dans le tableau pour obtenir notre résultat.
Essayez-le ici .
la source
C,
145 143 136 132 127 127106 octetsCela utiliseCela suppose des entrées ASCII et 32 bits.index()
POSIX.1-2001 et est déconseillé dans POSIX.1-2008.la source
Python 3, 89 octets
Comme je ne peux pas encore commenter, je publie l'amélioration de la réponse actuelle à Python 3 séparément.
Edit : Tout le code est
print
maintenant et plus peaufiné.la source
Ruby , 82 octets
Essayez-le en ligne!
la source
CJam, 125 octets
Explication
la source
SpecBAS - 178 octets
J'ai utilisé une longue chaîne de 26 caractères (n ° 34 pour les guillemets doubles et n ° 13 pour les retours).
Imprimez ensuite le résultat de la position d'arrondi / 26.
la source
C # 6, 201 octets
Rien de spécial ici. J'ai trouvé moins coûteux d'écrire les deux cas plutôt que d'utiliser ToUpper () en raison de la largeur fixe de la chaîne.
Dentelé:
la source
Python 2, 146 octets
la source
Excel, 132 octets
=INT((FIND(A1,"`1234567890-=~!@#$%^&*()_+qwertyuiop[]\QWERTYUIOP{}|asdfghjkl;'ASDFGHJKL:""aaa zxcvbnm,./ZXCVBNM<>?zzzzzz ")-1)/26)+1
Les tentatives d’utilisation de l’affaire
SEARCH()
non sensible au lieu deFIND()
révéler que Excel correspond~
,*
et?
à(tick). The matching of
?means we can't use
SEARCH () `, qui aurait rasé une masse de 5 octets ...la source