Certains d’entre vous connaissent peut-être la façon dont une moto change de vitesse. Mais pour ceux qui ne le font pas, ça ressemble à ça
6
5
4
3
2
N
1
Maintenant, je veux savoir dans quel équipement je me trouve après avoir effectué quelques montées et descentes. Le programme devrait fonctionner de manière neutre.
Exemple de saisie:
V^^
Exemple de sortie:
2
Comme vous pouvez le constater, j'ai rétrogradé une fois de N à 1 et deux fois en deuxième.
Ceci est un code de golf. La réponse la plus courte en octets l'emporte.
Remarque: La saisie peut comporter 2 caractères. Peut être U et D pour monter et descendre ou ce que vous voulez, ce doit être une chaîne . Vous ne pouvez pas passer au-delà du 1er ou du 6ème. Si vous êtes en 6ème et rétrogradez, il restera en 6ème. Bonne chance!
Réponses:
JavaScript (ES6),
49484746 octetsAttend:
1
pour le bas7
pour le hautFormaté et commenté
Les engrenages sont cartographiés comme suit:
Ce qui nous permet de vérifier facilement la validité du rapport actuel avec:
Démo
Afficher l'extrait de code
la source
05AB1E ,
22 à20 octetsEssayez-le en ligne!
Explication
la source
MATL,
322823 octets5 octets sauvegardés grâce à @Luis
Cette solution utilise
'2'
pour le passage à la vitesse supérieure et'0'
descente.Essayez-le sur MATL Online
Explication
la source
V ,
20, 15 octetsEssayez-le en ligne!
L'entrée est une chaîne de caractères
h
(haut) etl
(bas).Merci à @nmjcman pour avoir économisé 5 octets et m'avoir appris une fonctionnalité de vim dont je n'avais jamais entendu parler!
Si nous pouvions supposer que l'entrée ne sort jamais des limites, ce serait simplement 9 octets:
Mais malheureusement, ce n'est pas autorisé.
Explication:
la source
n
, pas1
.Java 7,
106105103 octetsExplication:
Code de test:
Essayez ici.
Sortie:
la source
Haskell,
595351 octetsUtilisations
0
pour le bas et2
pour le haut. Exemple d'utilisation:Merci à @xnor d'avoir supprimé 6 octets! En outre, je n’ai pas besoin d’un nom de fonction ni de parenthèses, c’est donc deux autres octets.
la source
read[c]-2
.g=
.g=
parce que c'est plus clairJavaScript (ES6),
4858 octetsUsage
Attribuez-le à une fonction, puis appelez-la. L'entrée est une chaîne contenant un
1
pour un passage à la vitesse supérieure et un0
pour une rétrogradation.la source
f("001")
ce qui devrait retourner N (vitesse réduite à 1, vitesse réduite à 1, vitesse jusqu'à N)PHP 7.1, 71 octets
passe
$g
de -1 à 5, utilise un décalage de chaîne négatif pour la première vitesse.Exécuter avec
-nr
, fournit une chaîne de décalage comme argument de ligne de commande.la source
Gelée ,
17 à14 octetsUtilise
6
pour et0
descendre.Essayez-le en ligne!
Comment ça marche
la source
Ruby, 58 octets
L'entrée attendue est 'v' pour une rétrogradation et '^' pour une rétrogradation
la source
Traitement de JS (modifié) 121 octets
Ungolfed
Essayez-le en ligne!
Je suis allé avec PJs depuis que je le connais bien. Le seul problème est que la version que j'utilise est très typée. Je ne peux pas laisser de parenthèses et beaucoup d'autres astuces. C'est assez simple. L'entrée doit aller dans la variable
a
et cela prend en minusculeu d
. Le programme boucle jusqu'à atteindre la fin de la chaîne et à chaque itération, il vérifie si c'est au moins un au. Si c'est le cas, vous n'essaierez pas de "décaler" au-delà de l'endroit où vous le pouvez. À la fin, j'imprime les résultats!la source
The input should go into the variable a
L'utilisation d'une entrée codée en dur n'est pas une méthode d'entrée par défaut, voir ici .void f(String[] a){...}
C'est à peine 100 octets.k, 25 octets
Il prend les entrées sous forme de chaîne, et utilise
[
pour rétrograder, et]
pour rétrograder , car elles sont bien situées.Exemples:
la source
GNU sed ,
8987 + 1 (drapeau r) = 88 octetsSed n'ayant pas de type entier ni d'opération arithmétique, la solution est obtenue uniquement à l'aide d'expressions régulières.
Cela fonctionne en faisant glisser le pointeur
x
fonction de chaque décalage d'entrée, à gauche (pourU
p) ou à droite (pourD
propre), le long d'une bande non enveloppante qui ne contient que les cellules65432N1
. La réponse à la fin est la valeur dans la cellule à gauche du pointeur.Exemple de parcours: ou essayez-le en ligne!
Explication:
la source
GNU sed ,
7673 octetsComprend +1 pour
-r
La sortie est unaire sauf neutre, ce qui est encore
N
(voir ce consensus ).Essayez-le en ligne!
Cela compte essentiellement de haut en bas dans unary, puis convertit 1 en N et 0 en 1.
la source
1
la valeur de départ, asN
et rien comme1
.s/$/1/;:;/1{6}/!s/^U(.*)/\11/;s/^D(.*)1/\1/;t;s/U|D//;t;s/^1$/N/;s/^$/1/
Rebol,
9693 octetsUngolfed:
Exemple d'utilisation (dans la console Rebol):
la source
> <> , 35 octets
Un morceau de code enthousiaste qui vous encourage à conduire au-dessus de la limite de vitesse.
Accepte deux entrées dont le code modulo 3 est 0 et 2, par exemple 0et 2.
Pour plus de poisson, je recommande l’utilisation de <et >.
Explication:
Vous pouvez l' essayer ici !
la source
SpecBAS - 102
Déplace l'index de la chaîne en fonction de l'entrée et imprime le caractère approprié.
la source
Pyth, 32 octets
Utilise l’espace et la nouvelle ligne pour le haut et le bas.
Explication
Il y a presque certainement une meilleure façon de faire l'incrémentation et la sortie.
la source
CJam ,
2422 octetsUtilisations
(
pour le bas et)
pour le haut.Essayez-le en ligne!
Explication
la source
Lot, 144 octets
Prend une entrée sur STDIN, en utilisant
0
pour passer à une vitesse inférieure et6
pour passer à une vitesse supérieure. Ces chiffres ont été choisis pour qu'il soit facile d'ignorer le rapport actuel. Enfin si l'engin est1
alorsN
imprimé autrement0
est converti en1
et l'engin est imprimé.la source
Javascript ES6 sans restriction,
136120 caractères136 caractères pour
V^
120 caractères pour
-+
la source
Retina , 65 octets
Usages
u
etd
pour monter et descendre.Essayez-le en ligne!
Explication
Ce programme fonctionne en gardant
1N23456
derrière la séquence d'instructions. Il garde une trace du matériel actuel en laissant un espace derrière lui. Ensuite, cela prend une instruction à la fois jusqu'à ce qu'il n'y en ait plus.Commencez par mettre
1 N23456
avant l'entrée. L'espace avantN
indique qu'ilN
s'agit du rapport actuel.Ce sont deux étapes de remplacement, regroupées et exécutées jusqu'à ce qu'elles ne modifient plus la chaîne:
Le premier s'occupe de passer la vitesse supérieure. Il recherchera un nombre quelconque d'engrenages après l'espace, suivi d'un a
6
, suivi deu
(u
indique l'instruction de passer à la vitesse supérieure). S'il y avait des caractères avant le 6, il remplace l'espace par le caractère immédiatement après, supprime leu
et laisse le reste de la chaîne intact. Etant donné que le6
est obligatoire dans le match, il n’échangera l’espace avec aucun caractère avant le6
. Il ne sera jamais échanger avec le6
.La deuxième étape gère le changement de vitesse et fonctionne de manière similaire. Il recherche éventuellement un caractère avant l'espace, puis quelques autres engrenages après la fin
6
, suivis ded
. Il échange l'espace avec le caractère qui le précède, le supprimed
et laisse le reste intact. Si l'espace était au début de la chaîne, il n'y a pas de correspondance pour un caractère avant l'espace, aucun échange n'est donc effectué.Quand aucun des remplacements ci-dessus ne peut plus être effectué, tous les changements de vitesse sont terminés. La ligne est débarrassée de tout sauf de l'équipement immédiatement après l'espace. Ceci est le rapport final.
la source
Powershell,
1128785 octets$i=1;switch([char[]]$args[0]){'^'{if(5-gt$i){$i++}}'v'{if(1-le$i){$i--}}}'1N2345'[$i]
non-golfé
économisé 25 octets en lisant les astuces sur le code de jeu powershell
sauvé 2 octets en retournant les opérateurs gt / le
la source
Perl 6, 144 octets
Fonctionne comme il se doit, je crois. Les améliorations sont les bienvenues. Première utilisation de Perl pour n'importe quoi, mais j'ai adoré l'idée de la langue, donc j'ai dû essayer.
la source
Clojure, 74 octets
Se plie sur la chaîne de décalage, en maintenant un index en tant qu'accumulateur. Chaque itération augmente ou diminue l'index, puis le fixe dans la plage 0-6. Enfin, une chaîne contenant les engrenages est indexée et renvoyée.
Renvoie un caractère Clojure représentant le rapport actuel. La vitesse 1 est renvoyée en tant que
\1
et la vitesse 'N' est renvoyée en tant que\N
.Explication pré-golfée. Suivez les chiffres, car cela ne se lit pas bien de haut en bas.
la source
Python 3,
6763 octetsSolution assez simple.
-4 octets grâce à @ovs!
la source