Les langages de programmation bidimensionnels ont souvent des commandes miroir comme /
et \
pour rediriger le pointeur d'instructions sur la grille:
>>>>\
v
v
<<<</
Dans ce défi, vous recevez une direction entrante et un miroir et vous devez déterminer la direction sortante.
Règles
La direction entrante sera donnée comme l'un des caractères NESW
et le miroir sera donné comme /
ou \
. Vous pouvez les recevoir dans n'importe quel ordre. Vous devez utiliser des lettres majuscules.
Vous pouvez prendre des entrées dans n'importe quel format pratique, y compris une chaîne de deux caractères, une chaîne utilisant un séparateur entre les caractères, une paire de caractères dans une liste ou même une paire de chaînes singleton. Si vous utilisez une chaîne avec séparateur, le séparateur ne peut utiliser aucun des caractères NWSE\/
.
La sortie doit être un caractère de NESW
ou une chaîne à un seul caractère.
Vous pouvez écrire un programme ou une fonction et utiliser l'une de nos méthodes standard de réception d'entrée et de sortie.
Vous pouvez utiliser n'importe quel langage de programmation , mais notez que ces failles sont interdites par défaut.
Il s'agit de code-golf , donc la réponse valide la plus courte - mesurée en octets - l'emporte.
Cas de test
Il n'y a que 8 entrées possibles que vous devez gérer, il n'y a donc aucune excuse pour ne pas tester votre code sur chacune d'entre elles:
N / --> W
N \ --> E
E / --> S
E \ --> N
S / --> E
S \ --> W
W / --> N
W \ --> S
la source
\
. Si votre réponse est une soumission de fonction qui prend une chaîne, alors vous aurez bien sûr besoin\\
dans le code source de l'appeler correctement, mais si vous lisez votre entrée à partir d'une entrée standard, par exemple, alors ce devrait être une seule\
. En d'autres termes, si vous appelez la fonction de longueur de chaîne respective de votre langue sur l'entrée, le résultat doit toujours être le même, que l'entrée contienne/
ou\
.readline()
je peux le gérer.Réponses:
Python,
4038 octets-2 octets grâce à @MitchSchwartz
(ord(d)+ord(m))%8
->ord(d)+ord(m)&7
recherche simple de réponse dans une liste (chaîne AKA) indexée par le plus petit mod de la somme des ordinaux qui fonctionne.
Les cas de test sont sur idéone
la source
%8
et en faisant un index. Ensuite, je vois que vous avez publié la même solution il y a plus d'une heure. Hah. Avoir un +1.Python 2, 40 octets
Sp3000 a enregistré un octet (
.index
→.find
).Explication
Nous voulons cartographier les directions comme suit:
Nous pouvons affecter les codes de direction à 2 bits et afficher les deux flips comme XOR-ing les premier et deuxième bits:
Le mappage entre les chaînes de bits et les directions s'effectue à l'aide de la chaîne
k
. Il ne nous reste plus qu'à mapper les caractères miroirs'/'
et'\\'
les valeurs1
et2
. Depuis'/' < '\\'
, nous pourrions naïvement utiliser(m>'/')+1
comme formule. Mais attendez! Lexicographiquement,et nous nous sommes
'NWES'
gentiment assignés àk
! Nous pouvons donc utiliser à la(m>k)+1
place.la source
CJam, 14 octets
(@MartinEnder a porté ma réponse Python )
Comment?
Les tests sont sur aditsu
la source
Javascript (ES6),
50414037 octetsEnregistré 3 octets de plus en utilisant la comparaison, grâce à la réponse de Lynn
Usage
la source
MATL ,
1917 octetsEssayez-le en ligne! Ou vérifiez les huit cas .
Explication
la source
Pyth,
171615 octetsMerci à @Jakube et @Maltysen pour -1 octet chacun
Un programme qui prend en entrée deux chaînes entre guillemets séparés par des sauts de ligne, d'abord la direction, puis le miroir, et imprime le résultat.
Il s'agit d'un portage de la réponse Python de @ Lynn .
Essayez-le en ligne
Comment ça marche
la source
<QE
par>E
.05AB1E , 14 octets
Essayez-le en ligne!
la source
Gelée ,
14 1312 octets(un port de ma réponse Python )
-1 octet grâce à @MartinEnder (ajouter un espace à la fin de la chaîne et supprimer le besoin de modulo 8)
-1 octet grâce à @LuisMendo (prendre un seul argument de chaîne plutôt que deux)
Comment?
Testez-le sur TryItOnline
la source
Java 7,
717068 octetsDommage
charAt
etindexOf
prend tellement d'octets ..Non testés et tous les cas de test:
Essayez-le ici.
Sortie:
la source
Python,
636159 octetsAssez simple. Peut certainement être joué au golf plus. Décide d'ajouter 1 ou -1 à l'index de l'entrée dans
'NESW'
.Il s'agit d'une expression lambda; pour l'utiliser, préfixez-le avec
f=
.Ideone it!
la source
Java 8,
625856 octetsProgramme de test non golfé
la source
PowerShell v2 +, 34 octets
Prend l'entrée comme deux
char
s explicites , produit unchar
.Cela fonctionne comme suit: Si nous trions la sortie, nous voulons
S
/
en quelque sorte égalerN
\
,W
/
égalerE
\
, etc. Ou, au moins, produire des nombres qui sont "assez proches" mais toujours distincts. Si nous regardons les valeurs ASCII, nous obtenons un tableau comme ci-dessous:L'exécution d'un brutal forcer rapide sur la colonne des sommations (dérivée de la sommation des points de code ASCII des entrées) montre que si nous prenons les sommes modulo
8
, nous obtenons ce qui suit2 2 | 6 1 | 3 4 | 5 7
. Cela est mis en évidence dans la chaîne"xNESSWNW"
, commeE
c'est à l'index2
,N
est à6
et1
, et ainsi de suite.Donc, nous avons juste besoin de additionner les entrées (transtypage implicite du
char
auint32
long du chemin), de prendre cela%8
et de l'utiliser pour indexer dans notre chaîne.Cas de test
la source
Lot, 111 octets
Accepte par
W/
exemple un paramètre de ligne de commande de chaîne à deux caractères. Le\
et/
rend la boucle maladroite; cela aurait pris 124 octets.la source
\r
?Octave, 30 octets
Utilisé le même ordre d'arguments que Jonathan Allan.
Prend l'entrée comme une chaîne de deux caractères
'W\'
.Essayez-le en ligne .
la source
'NESSWNW 'is)
(voir tous les cas de test ).i
estinput
,s
estsum
et)
est l'indexation, qui est modulaire. J'ai ajouté un espace dans la chaîne pour que le modulo soit 8C,
44,35,34 octetsIl nécessite deux caractères comme deux variables. Il faut à la fois des minuscules et des majuscules. Il utilise beaucoup de manipulation de bits. Le fragment se
a&a/2
traduit par une valeur qui a des valeurs uniques pour les deux bits inférieurs,&3
coupe tous les bits supérieurs. Ceci utilisé comme index dans la chaîne "NWES" pour le\
miroir. Heureusement, les deux bits inférieurs des caractères ASCII\
et/
sont 00 et 11 respectivement, ce qui est parfait pour XOR avec l'index susmentionné pour obtenir la bonne direction pour le/
miroir.la source
return"NWES"[...]
(omettez l'espace).CJam , 17 octets
L'entrée est séparée par des espaces.
Essayez-le en ligne!(En tant que suite de tests séparés par des sauts de ligne.)
C'est la solution que j'ai trouvée avant de poster le défi. Pas aussi court que l'indexation cyclique de Jonathan, mais j'ai trouvé cette approche assez intéressante (et nouvelle).
Explication
L'objectif est d'utiliser la translittération (c'est-à-dire en utilisant un mappage de caractère à caractère) pour remplacer le caractère d'entrée par le caractère de sortie. Pour ce faire, nous devons sélectionner la bonne carte selon que le miroir est
/
ou\
. Nous allons mapper de laSWEN
liste à une autre que nous sélectionnerons conditionnellement. Si la liste d'entrée estSWEN
, les deux mappes de sortie doivent être les suivantes:Notez que ceux-ci sont classés par ordre trié et inversé (c'est pourquoi nous avons choisi l'
SWEN
ordre apparemment aléatoire comme ensemble d'entrée). Nous pourrions les générer en triant la liste d'entrée et en inversant le résultat si l'entrée a\
, mais il existe une meilleure façon:la source
SED
48(42 + 1 pour -r) 43Enregistré 5 grâce à Martin Ender ♦
Prend l'entrée comme une chaîne de deux caractères.
la source
Mathematica, 98 octets
Fonction anonyme. Prend deux chaînes en entrée et renvoie une chaîne en sortie.
la source
C, 81 octets
Usage
Sortie:
la source
Pyth, 13 octets
Suite de tests
Additionnez les points de code, l'index modulaire, la chaîne compressée.
la source
TI-Basic, 40 octets
Codez en dur les entrées. Ennuyeux, mais le plus court chemin.
la source