Barbe Noire était un pirate anglais du début du XVIIIe siècle. Bien qu'il soit connu pour avoir pillé et pris des navires, il commandait ses navires avec la permission de leurs équipages. Il n'y a aucun récit de lui ayant jamais blessé ou tué ses prisonniers.
Ce défi est en l'honneur du tristement célèbre Barbe Noire et inspiré par la Journée internationale Talk Like a Pirate (19 septembre). C'est aussi l'inverse de ce défi de Pyrrha .
Le défi
Créez un programme qui prend une carte au trésor en entrée (composée des caractères répertoriés ci-dessous) et génère ses directions.
Contribution
Toutes les entrées consisteront v
, >
, <
, ^
, les espaces, et un seul X
.
Vous pouvez supposer ce qui suit:
la carte ne se boucle ou ne se croise jamais
la flèche de départ sera toujours le caractère le plus bas dans la colonne la plus à gauche
il y aura toujours un trésor (
X
)
Un exemple d'entrée est illustré ci-dessous.
>>v >>>>>>v
^ v ^ v
^ v ^ v<<
^ v ^ v
^ >>>>^ >>X
^
>>^
Production
La sortie doit être une ", "
chaîne de directions délimitée. Voici la sortie correcte de la carte ci-dessus.
E2, N6, E2, S4, E4, N4, E6, S2, W2, S2, E2
Un seul saut de ligne ou espace est autorisé.
Exemples
In:
>>>>>>>>>>>>>>>v
v
v
>>>>X
Out:
E15, S3, E4
In:
>>>>>>v
^ v
^ >>>>X
Out:
N2, E6, S2, E4
In:
X
^
^
^
Out:
N3
In:
>>>>>>v
^ v
^ v
v
>>>>>>X
Out:
N2, E6, S4, E6
In:
X
^
^
>^
Out:
E1, N3
In:
>X
Out:
E1
In:
v<<<<<
vX<<<^
>>>>^^
>>>>>^
Out:
E5, N3, W5, S2, E4, N1, W3
Happy International Talk Like a Pirate Day!
Réponses:
CJam, 78 octets
Essayez-le en ligne .
Explication
L'idée principale ici est de trouver la ligne la plus longue (nous appellerons cette longueur
T
), puis de remplir toutes les lignes à la même longueur et de les concaténer (cette nouvelle chaîne estU
). De cette façon, un seul compteur est nécessaire pour se déplacer sur la carte. Ajouter / soustraire1
signifie se déplacer vers la droite / gauche sur la même ligne, ajouter / soustraireT
signifie se déplacer vers le bas / vers le haut d'une ligne.Il est maintenant temps de configurer la boucle.
Le corps de la boucle utilise une table de recherche et une évaluation pour choisir quoi faire. Au début de chaque itération, l'élément de pile supérieur est la position actuelle. En dessous, il y a toutes les directions NSWE traitées. À la fin de l'itération, la nouvelle direction est placée sous la position et une copie de celle-ci est utilisée comme condition pour la boucle. Les caractères non nuls sont véridiques. Lorsqu'un X est rencontré, 0 est poussé comme direction, terminant la boucle.
Maintenant , les regards de la pile comme ceci:
[directions 0 position]
. Générons la sortie.la source
CJam, 86 octets
Essayez-le en ligne
Explication:
la source
Javascript (ES6), 239 octets
Explication:
la source
JavaScript (ES6), 189
Testez l'exécution de l'extrait ci-dessous dans un navigateur compatible EcmaScript 6.
Moins golfé
la source