Il s'agit d'un clavier QWERTY.
Q W E R T Y U I O P
A S D F G H J K L
Z X C V B N M
On peut "sortir en spirale" sur ce clavier, à partir de G. La spirale va commencer à G, aller à H, puis à Y, puis à T, puis F, puis V, puis B, puis N, puis J, puis U , puis R, puis D, puis C, ... etc. Votre défi consiste à, étant donné un nombre 1 ≤ N ≤ 26, sortir les N premiers caractères de cette spirale. (Si vous êtes confus, reportez-vous aux photos à la fin du post.)
Le hic? Le score de votre programme est proportionnel aux indices de caractères trouvés à l'intérieur de la spirale!
Notation
- Pour chaque lettre (insensible à la casse) de votre code, ajoutez l'index de ce caractère dans la spirale à votre score (à partir de 1).
- Pour chaque personnage qui n'est pas dans la spirale, ajoutez 10 à votre score.
- Le score le plus bas l'emporte.
Par exemple, le programme print("Hello, World!")
a un score de 300.
Pour votre commodité, j'ai écrit une niveleuse de programme automatique.
Autres règles
- Votre soumission peut être un programme ou une fonction.
- Vous pouvez prendre N commençant à 0 ou 1 et se terminant à 25 ou 26, respectivement, mais les sorties doivent toujours commencer par "G" et se terminer par "GHYTFVBNJURDCMKIESXLOWAZPQ".
- Vous devez sortir les caractères dans la spirale dans l'ordre .
- S'il s'agit d'une fonction, vous pouvez renvoyer une liste de caractères au lieu d'une chaîne.
- Vous pouvez avoir un retour à la ligne suivant la sortie.
- Vous pouvez utiliser des lettres minuscules au lieu de lettres majuscules ou une combinaison des deux.
Cas de test
number -> output
1 -> G
2 -> GH
5 -> GHYTF
12 -> GHYTFVBNJURD
15 -> GHYTFVBNJURDCMK
24 -> GHYTFVBNJURDCMKIESXLOWAZ
26 -> GHYTFVBNJURDCMKIESXLOWAZPQ
Des photos
La spirale superposée:
ascii-art
code-challenge
keyboard
Conor O'Brien
la source
la source
Réponses:
Japt ,
304264162 points40 points gagnés grâce à @ ConorO'Brien
Testez-le en ligne!
Afin d'enregistrer autant de points que possible, la chaîne entière est condensée en 9 caractères Unicode en interprétant chaque série de 3 lettres comme un nombre en base 36, puis en la convertissant en point de code. Le programme lui-même prend cette chaîne compressée (qui coûte 110 points, y compris les guillemets) et mappe chaque
c
harcode en le convertissant en uns
tring en base-36 (G
après;
le début).î
prend les premiers {input} caractères de ceci, qui sont implicitement imprimés.la source
C, score: 544
Essayez-le en ligne!
la source
g
c'est la lettre la moins chère selon le score utilisé dans le défi.Spirale , score:
619215127471546554191Un interprète peut être trouvé ici .
Explication:
Le programme commence au
0
caractère sur la quatrième ligne. Le premier morceau de code à exécuter est0;vg
.;
prend un nombre en entrée et le place dans la pile.v
place ce qui est dans le registre (un zéro) dans la pile. Il sera utilisé comme compteur.g
est une étiquette, lorsqu'elle est atteinte, le contrôle passe à l'autre occurrence de la lettreg
dans le code.C'est donc là que se trouve le contrôle:
Puisqu'il y a un espace dans toutes les autres directions, le pointeur d'instruction commence à se déplacer vers le haut.
v
place un zéro dans la pile et leX
sort immédiatement de la pile. Étant donné que la valeur sautée est zéro, le pointeur d'instruction se déplace versX
(sinon il le traiterait comme un espace).Par défaut, le flux de contrôle est en mode tourner à droite, donc maintenant quand il atteint la jonction, le pointeur d'instruction tourne vers la droite.
v
pousse encore une fois un zéro dans la pile,*
incrémente le registre de un.La prochaine
v
place ce qui est dans le registre (numéro 1) dans la pile, le pointeur d'instruction tente de tourner vers la droite, frappant la suivanteX
. La valeur qui vient d'être ajoutée à la pile est extraite et placée dans le registre. Parce qu'il est différent de zéro,X
n'est pas entré et l'IP passe à la suivante*
à droite à la place, incrémentant à nouveau la valeur dans le registre.Cela se produit encore et encore jusqu'à ce que nous atteignions la fin de cette partie et que la ligne de
*
s commence. À présent, la valeur dans le registre est 6, qui est la lettreg
ASCII moins la lettre ASCIIa
. Ainsi, avec une ligne de 97*
s, nous incrémentons la valeur du registre à 103, ce qui correspond à la lettre queg
nous voulons imprimer.v
le pousse dans la pile, etP
est une autre étiquette lors de la frappe que nous sautons à l'autreP
sur la première ligne du code.Ici
.
apparaît la valeur de la pile et l'imprime comme un caractère. Après cela,X
le zéro étranger de la pile apparaît, puis~
compare les deux valeurs restantes de la pile (les valeurs étant le compteur et la valeur d'entrée). Si les valeurs sont les mêmes, l'opérateur place zéro dans la pile (sinon -1 ou 1). Encore une fois, le contrôle tente de tourner à droite.X
extrait la valeur de la comparaison de la pile, si elle est nulleX
, et après sa!
saisie, termine le programme.Sinon, l'IP continue vers le
Z
, qui est une étiquette qui dans ce cas ne saute qu'une étape vers la droite. La raison en est que le saut remet la valeur du registre à zéro.*
incrémente le registre etv
place le résultat 1 dans la pile.+
fait apparaître les deux éléments supérieurs de la pile (le 1 et le compteur), les ajoute et place le résultat dans la pile (en fait, cela incrémente le compteur d'une unité).^
copie le résultat de la pile dans le registre sans le retirer de la pile.#
décrémente la valeur dans le registre d'unev
unité , pousse la valeur décrémentée vers la pile, l'IP tente de tourner vers la droite et faitX
sortir la valeur de la pile. Si la valeur est non nulle, l'IP continue de se déplacer vers l'est, décrémentant la valeur dans le registre, jusqu'à ce qu'elle atteigne zéro et que l'IP entre dans uneX
branche.La branche conduit à une étiquette correspondant à la valeur du compteur. En frappant l'étiquette, le contrôle passe à l'autre occurrence de l'étiquette dans la section où nous avons commencé avec l'étiquette
g
, en commençant une autre itération. Comme pour leg
, la valeur dans le registre est incrémentée jusqu'à la valeur ASCII de la lettre que nous devons imprimer. Ensuite, le caractère est imprimé et le compteur incrémenté, une autre étiquette est sélectionnée. Cela se produit jusqu'à ce qu'après la dernière itération, le compteur soit égal à l'entrée et le programme se termine.Modifier:
Atteint la même chose que
mais avec moins d'espace.
Modifier 2:
Peut être utilisé à la place de:
la source
Haskell , 471
Essayez-le en ligne!
C'est un peu une référence, je pense qu'il doit y avoir une meilleure façon, mais c'est le meilleur que j'ai trouvé jusqu'à présent.
Explication
Je suppose que je devrais expliquer cela à ceux qui ne connaissent pas trop bien Haskell. La fonction
take
prend les n premiers éléments de la liste. Cela s'appelle comme ceci:Nous voulons prendre les n premiers éléments de la piqûre
"GHYTFVBNJURDCMKIESXLOWAZPQ"
, nous voulons donc quelque chose commeNous pouvons faire mieux cependant, nous pouvons
take
infixer en utilisant des crochetsEt maintenant, cela peut être rendu sans point
la source
partial
dans Clojure. C'est ce que je voulais, maispartial
c'était trop cher.Gelée , score de 211
19 octets
Essayez-le en ligne!
enregistré un tas de score grâce à la suggestion d'Emigna d'utiliser
œ?
: Dla source
Vim ,
461418Merci @pacholik pour le score de -43!
Essayez-le en ligne!
la source
CGHYTFVBNJURDCMKIESXLOWAZPQg©G@" D
(© is escape)Befunge, Score: 531
Je pense que ce défi aurait été plus intéressant si la sortie devait également être dans une spirale.
la source
TI-Basic (TI-84 Plus CE),
454432 points-22 points de Conor O'Brien
Courez avec
5:prgmNAME
.Renvoie / imprime la
sub
chaîne de1
àAns
(l'entrée numérique).TI-Basic est une langue à jeton , donc je note cela par les valeurs d'octet des jetons.
sub(
est 0xbb 0x0c, donc 20"
est 0x2a, donc*
, donc 10 * 2 = 20Les lettres majuscules ne changent pas, la chaîne est donc 351
,
est 0x2b, donc+
, donc 10 * 2 = 201
est 0x31, donc1
, donc 10Ans
est 0x72, ce qui signifier
que 1120 + 20 + 351 + 20 + 10 + 11 = 432
la source
Python 3, score =
762753Entrée basée sur 1. C'est pire que l'approche triviale, car elle utilise 37 non-lettres. C'est quelque peu intéressant, cependant.
-9 merci à Leo .
Essayez-le en ligne!
la source
[:g*3][-3:]
peut[g*3-3:g*3]
réduire le score total de 9 points05AB1E , score: 204
Essayez-le en ligne!
la source
Brainf ** k, score = 2690
Entrez un seul octet allant de
0x1
à0x1a
.Essayez-le en ligne!
la source
APL (Dyalog) , score: 391
Essayez-le en ligne!
La seule utilisation des lettres latines dans Dyalog est dans les noms de variables et certaines fonctions système. En dehors de cela, seuls les glyphes et certaines lettres grecques sont utilisés.
la source
Python 3, 522
Essayez-le en ligne!
Un lambda anonyme utilisant le découpage de chaînes de Python (
"asdf"[:i]
obtient les premiersi
caractères de"asdf"
)la source
Clojure,
484474 points-10 points car apparemment un
%
peut exister après un nombre sans espace les séparant!? Je devrai peut-être revenir en arrière et améliorer certaines soumissions.Une fonction anonyme. Fondamentalement, un port Clojure de ce qui a déjà été publié. Scores bien! Je pense que c'est le premier programme Clojure que j'ai jamais écrit qui ne contient pas un seul espace.
la source
Ly , 521 points
Essayez-le en ligne!
Je n'ai pas l'impression que c'est optimisable.
la source
Bash , score: 465
Essayez-le en ligne!
la source
Husk , 293 octets
C'est la plus courte que j'ai pu trouver, la plus proche
¨gHYtfvB⌋ȷÜdCmkÏex←ẆAzpq¨
pour un score de 293 ..Essayez-le en ligne!
Explication
La recherche de force brute, se révèle que tous les minuscules ont donné le meilleur score. C'est fondamentalement la même que la solution de @Wheat Wizard,
take
(↑
) sur une chaîne compressée (¨
).la source
Common Lisp, score: 580
Essayez-le en ligne!
la source
Excel, 490 points
La convention pour les ansers d'Excel est de prendre la contribution de
A1
. Changer cela enG1
coupe 22 points (468).la source
C # , score 546
la source
Rust, score 443
Ce n'est pas souvent que Rust est bon au golf de code, mais ici, il bat de nombreuses langues
la source
Golang, score 861
Jouez en ligne!
la source
Javascript ES6, 527 points
Essayez!
la source
PHP, 590 points
Essayez-le en ligne!
la source
PHP, score 584
tripoté un peu le dictionnaire; le fait que xorer la chaîne la coupe le rende
substr
obsolète.Essayez-le en ligne .
la source
Mathematica, 528
Essayez-le en ligne!
la source
Pyth , score: 371
Essayez-le ici.
Comment?
la source
Rubis , 453 points
Essayez-le en ligne!
la source
> <> , 558 + 16 = 574 points
Utilise le
-v
indicateur pour pousser l'entrée sur la pile.Pousse la spirale sur la pile dans l'ordre inverse, puis fait pivoter l'entrée vers le haut. Ensuite, alors que le haut de la pile est différent de zéro, imprime la lettre suivante et décrémente le haut de la pile.
Essayez-le en ligne!
la source
Pyth , 261 points
Essayez-le ici!
Cela génère une lettre majuscule. Pour les minuscules, vous pouvez essayer l'alternative 261 octets .
la source