Si quelqu'un faisant face au nord au point A dans cette grille voulait que les directions suivent le chemin vert (car il ne peut suivre que les lignes de grille) jusqu'au point B, vous pourriez lui dire:
Allez North, North, West, East, East, South, East, East
.
ou équivalent
Allez Forward, Forward, Left, Back, Forward, Right, Left, Forward
.
(Lorsqu'une commande de droite , gauche ou arrière signifie implicitement tourner dans cette direction, puis aller de l'avant.)
Écrivez une fonction avec un argument qui se traduit entre ces directions absolue et relative le long du même chemin , pas seulement au même point. Supposons que la personne dirigée commence toujours face au nord.
Si l'argument est une chaîne de lettres NSEW
, retournez les directions relatives équivalentes.
par exemple, f("NNWEESEE")
renvoie la chaîne FFLBFRLF
.
Si l'argument est une chaîne de lettres FBLR
, retournez les directions absolues équivalentes.
par exemple, f("FFLBFRLF")
renvoie la chaîne NNWEESEE
.
La chaîne vide se donne. Ne supposez aucun autre cas d'entrée.
Si votre langue n'a pas de fonctions ou de chaînes, utilisez ce qui vous semble le plus approprié.
Le code le plus court en octets gagne.
R
est égalE
au début.Réponses:
CJam,
575349La version précédente
Exemple:
Production:
Comment ça fonctionne
la source
C ++,
9997Ce qui suit est formaté comme une expression lambda. Il prend un
char*
argument et l'écrase.Pour ceux qui ne connaissent pas cette fonctionnalité (comme moi il y a 1 heure), utilisez-la comme suit:
Quelques explications:
flag ? (x = y) : (x += z)
, la deuxième paire de parenthèses est requise en C. J'ai donc utilisé C ++ à la place!*s*9%37&4
teste le premier octet; le résultat est 4 si c'est l'un desNESW
; 0 sinon*s%11/3
convertit les octetsNESW
en 0, 1, 2, 3*s%73%10
convertit les octetsFRBL
en 0, 9, 6, 3 (qui est 0, 1, 2, 3 modulo 4)d
variable. J'ai essayé de réorganiser le code pour l'éliminer complètement, mais cela semble impossible ...la source
JavaScript (E6) 84
86 88 92104Edit: en utilisant & au lieu de%, priorité de l'opérateur différente (moins de parenthèses) et fonctionne mieux avec des nombres négatifs
Edit2: | au lieu de +, op priorité à nouveau, -2. Merci DocMax
Edit3: la compréhension du tableau est 2 caractères plus courte que map (), pour les chaînes
Test dans la console FireFox / FireBug
Production
la source
&& o
à la fin?array && value
évaluervalue
comme n'importe quel tableau évaluertruthy
4+(n-d&3)
avec4|n-d&3
et enregistrer 2 caractères.APL, 72
Si les configurations de l'interpréteur peuvent être modifiées sans pénalité, alors le score est de 66 , en changeant
⎕IO
en0
:la source
Python,
171139Pas aussi court que les autres solutions, mais je suppose que cela devrait être relativement bon pour ce qui peut être fait avec Python:
Version étendue pour une lisibilité légèrement meilleure:
la source
Allez, 201
Version lisible:
la source
GNU sed, 356 octets
Le défi appelle une simple transformation sur un flux de personnages.
sed
, l'éditeur de flux est le choix évident de la langue ;-)(Commentaires et espaces supprimés aux fins du calcul du score de golf)
Production:
Explication:
L'idée ici est que lorsque nous changeons le cadre de référence, il y a toujours une correspondance directe entre
{N, E, S, W}
et{F, R, B, L}
.Dans le cas de l'absolu au relatif, nous travaillons en avant à travers la chaîne. Pour chaque caractère nous dressons la carte
{N, E, S, W}
à{F, R, B, L}
, puis tourner les autres[NESW]
caractères selon le caractère que nous venons cartographié, puis passer sur le caractère suivant.Pour le cas de relatif à absolu, nous faisons l'inverse. Nous travaillons en arrière dans la chaîne, en faisant tourner tous les
[NESW]
caractères suivants en fonction du caractère immédiatement devant. Ensuite , nous cartographions ce caractère{N, E, S, W}
à{F, R, B, L}
, jusqu'à ce que nous arrivons au début de la chaîne.la source
Haskell, 224
Cela attribue des numéros de rotation aux directions relatives et des numéros d'orientation aux directions absolues, puis trouve les rotations entre les orientations successives ou les orientations après les rotations successives. La
i
fonction trouve l'index dans les deux légendes.la source