Mes parents ont un appareil de cinéma maison. La télécommande est cassée, ce qui rend incroyablement difficile la navigation vers la droite dans un menu. La plupart du temps, cela ne fonctionne pas, mais quand il le fait, il se déplace incroyablement rapidement vers la droite.
C'est évidemment frustrant, mais c'est plus frustrant lorsque vous voulez entrer un titre de film qui nécessite de naviguer sur un clavier qui ressemble à ceci:
a b c d e f
g h i j k l
m n o p q r
s t u v w x
y z 1 2 3 4
5 6 7 8 9 0
Votre tâche consiste à prendre en entrée un titre de film et à calculer à quel point il est "frustrant" de saisir ce titre de film. Le numéro de frustration d'une chaîne particulière est le nombre de lettres qui nécessitent de passer directement de la lettre qui les précède. Nous ne nous soucions pas de savoir à quelle distance ils sont à droite, car si nous commençons à nous déplacer vers la droite, nous allons presque instantanément à la fin de la ligne, et nous ne nous soucions pas du mouvement vers le haut, vers le bas ou vers la gauche parce qu'ils sont faciles.
Par exemple, si nous voulions saisir
keyboard
- Nous commençons
k
gratuitement. e
est juste au-dessus,k
donc nous n'avons pas besoin de bouger à droite.y
est tout le chemin à gauche donc pas besoin de bouger à droite.b
est cependant sur la colonne suivante à droite, nous devons donc aller à droite pour y accéder.o
est sur la colonne suivante, nous devons donc aller vers la droite pour y accéder.a
est de retour dans la première colonne donc on se déplace vers la gauche pour y accéder.r
est tout le chemin à droite, donc nous allons à droite.d
est deux colonnes à gauche der
la colonne.
Les personnages qui doivent se déplacer vers la droite bor
signifient que c'est de la frustration 3.
Règles supplémentaires
Il s'agit d'un défi de code-golf , donc vos réponses seront notées en octets avec moins d'octets mieux. L'entrée sera toujours composée de caractères alphanumériques, vous pouvez prendre en charge les majuscules ou les minuscules et vous n'avez besoin que d'une seule. L'entrée ne sera jamais vide.
Cas de test
keyboard -> 3
2001aspaceodyssey -> 6
sorrytobotheryou -> 8
thinblueline -> 5
blast2 -> 3
"blast2" -> 3
(pas un vrai film, mais certaines réponses ont des problèmes avec de tels cas de test)90 -> 1
Réponses:
JavaScript (Node.js) ,
615554 octets1 octet enregistré grâce à @nwellnhof
Prend l'entrée comme un tableau de caractères.
Essayez-le en ligne!
Comment?
Pour tous les caractères mais les chiffres supérieurs à0 , la colonne X indexée 0 est donnée par:
où est le code ASCII du caractère.c
Pour les chiffres positifs , nous devons faire à la place:n
Exemples:
Commenté
la source
"blast2"
."234"
.Gelée , 11 octets
Un lien monadique acceptant une liste de caractères (majuscules).
Essayez-le en ligne!
Comment?
Remplace d'abord tout
'0'
s par'4'
s (donc le reste du code les traite comme étant dans la colonne la plus à droite). Convertit ensuite en ordinaux, ajoute un et modulo par6
pour obtenir des indices de colonne basés sur 0. Compare ensuite les voisins avec is-less-than et additionne le résultat.la source
Perl 6 ,
4539 octetsEssayez-le en ligne!
Fonctionne avec des lettres majuscules.
(2-ord(c))%46%6
calcule la coordonnée x inversée.la source
Propre , 85 octets
Essayez-le en ligne!
la source
Rubis , 56 octets
Essayez-le en ligne!
Version préliminaire naïve, sera jouée au golf.
la source
Japt
-x
, 14 octetsEssayez-le en ligne!
Port de cette réponse Jelly. Prend l'entrée comme un tableau de caractères, avec des lettres en majuscule.
Explication:
la source
Java (OpenJDK 8) , 73 octets
Pas une mauvaise solution pour Java! Ce zéro étant sur le côté droit m'a coûté plusieurs octets.
Essayez-le en ligne!
Expliqué
la source
05AB1E ,
1211 octets-1 octet grâce à @Kevin Cruijssen
Un autre port de la réponse Jelly de Jonathan Allan. Prend l'entrée en majuscules.
Explication:
Essayez-le en ligne!
la source
0'4
peut être¾4
d'enregistrer un octet ( astuce 05AB1E pertinente ).K (ngn / k) ,
32 3128 octetsEssayez-le en ligne!
la source
Retina 0.8.2 , 46 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Listez l'alphabet et les chiffres dans l'ordre sur l'OSK et mappez chacun sur un numéro de colonne (indexé 1).
Convertissez chaque numéro de colonne en unaire.
Comptez le nombre de colonnes suivies d'une colonne plus grande (c'est-à-dire vers la droite). Le
&`
permet aux correspondances de se chevaucher.la source
Python 2 , 84 octets
Essayez-le en ligne!
la source
Mathematica, 102 octets
Fonction pure. Prend une liste de caractères en entrée et renvoie un nombre en sortie. Ceci est une solution assez naïve, les suggestions de golf sont les bienvenues.
la source
PHP,
74 8177 octetsExécuter en tant que pipe avec
-nR
ou l' essayer en ligne .la source
C (gcc) ,
82 7977 octetsEssayez-le en ligne!
Cette fonction ne prend en charge que les entrées en minuscules
Non golfé et commenté:
Si ma fonction est autorisée à accepter des chaînes de caractères larges, elle peut être réduite à 76 octets avec:
Essayez-le en ligne!
Cette version accepte simplement l'entrée comme
int*
au lieu dechar*
Modifications:
c
)la source