Vous êtes un explorateur, cartographiant un monde inconnu. Votre bateau est transporté par le vent. Où ça va, qui sait?
Chaque jour, dans votre spyglass, vous voyez des caractéristiques au nord, au sud, à l'est et à l'ouest. Vous voyez toujours quatre caractéristiques de ce type, correspondant aux directions cardinales. Votre spyglass affiche les symboles ASCII suivants:
~~.*
, ~~~~
, ~.^^
,~#~#
Les symboles sont dans l'ordre (nord, sud, est, ouest).
Ce sont les symboles: ~
= mer, .
= côte, ^
= montagne, *
= arbre, #
= invalide (aucune observation, cela se produit chaque fois que vous voyez la lisière du monde ou que le paysage est obscurci par le brouillard). Votre spyglass voit exactement une unité dans chaque direction.
Chaque soir, vous regardez les étoiles pour voir votre chemin parcouru. En regardant les étoiles, on voit un symbole ascii comme celui-ci:
n
, s
, e
,w
correspondant au nord, sud, est et ouest, respectivement. Vous déplacez toujours exactement une unité au nord, au sud, à l'est ou à l'ouest chaque nuit. Ainsi, en tant qu'explorateur, vous recevrez un flot infini de symboles:
~~.*n~~~~s~~.*s~.**
Votre tâche consiste à produire une carte 2D du monde (où se ?
trouvent des parties inconnues de la carte, le nord est en haut, l’est est à droite):
?~~~??????
?~~~??????
?~~~.^^.??
?~~.***.~~
~~.*^^*.~~
~~~..~~~~~
~~~~~~~~~~
~~~~~~~~~~
Par souci de simplicité, supposons que vous commenciez dans le coin inférieur gauche de la carte. Supposons que toutes les cartes sont 8x8.
Voici un exemple simple 3x3. Supposons que la carte ressemble à ceci:
~.~
~^~
~.~
Avec l'entrée suivante: ~#.#n~~^#s
Vous obtiendrez cette sortie:
~??
~^?
~.?
Autres exemples d'entrées et de sorties:
contribution
~#~#n~~~#n~~~#n~~~#n~~~#n~~.#n~~.#n#~~#e#.~~e#.~~e#.~~e#.~~e#~~~e#~~~e#~#~s~~#~s~~#~s~~#~s~~#.s~~#~s~~#~s~##~w~#~~w.#~~w^#~~w.#~~
sortie
~~~~~~~~
~....~~~
~.????~~
~~????~~
~~????.~
~~????~~
~~?.^.~~
~~~~~~~~
Contribution:
~#~#e~#~~e~#~~e.#~~e^#~~n.~..n~^~.n~.~~n.~~.n.~~*n~.~.n#.~~w#.~~w#.~~s~*..s..*.s*~.~s.~~~s
Sortie:
?~~~~~??
?....~??
?.**.~??
?~..~~??
?~~~~~??
?~~..~??
~~~.^.??
~~~~~~??
la source
~#~#n~~~#n~~~#n~~~#n~~~#n~~.#n~~.#n#~~#e#.~~e#.~~e#.~~e#.~~e#~~~e#~~~e#~#~s~~#~s~~#~s~~#~s~~#.s~~#~s~~#~s~##~w~#~~w.#~~w^#~~w
) est erroné et que la sortie devrait??
?.
Réponses:
MATL ,
685958 octetsEssayez-le en ligne!
Explication
La carte est conservée dans le bas de la pile et progressivement remplie. La position actuelle de l'explorateur est stockée dans le presse-papier J.
La carte utilise les coordonnées de la matrice, donc (1,1) est en haut à gauche. De plus, l'indexation linéaire colonne-majeur est utilisée. Cela signifie que les éléments de la matrice 8 × 8 représentant la carte sont accessibles avec un seul index, comme suit:
Ainsi, par exemple, l'élément (3,2) de la matrice est l'élément d'indice linéaire 11. Les mouvements vers le nord, le sud, l'est et l'ouest correspondent respectivement à l'ajout de -1, 1, 8 ou -8 à l'indice linéaire. Le tableau [-1 1 8 -8] sert à coder deux choses différentes:
La chaîne d'entrée est organisée en morceaux de
5
caractères. Étant donné que le premier caractère manque pour le premier caractère (celui qui indique un mouvement), une initiales
est arbitrairement incluse pour donner à tous les morceaux la même taille. Pour compenser cela, l'explorateur commence à la position 7 et non à la position 8, de sorte que le déplacement initial vers le sud (ajoute 1 à l'index linéaire) les laisse à la position 8.Les morceaux de 5 caractères sont traités en boucle. Le premier caractère met à jour la position et les 4 autres, s'ils sont différents de
#
, sont écrits dans les entrées appropriées de la matrice qui représente la carte.la source
C,
210208207 octetsCelui-ci utilise printf et scanf pour lire les entrées et un tableau linéarisé au lieu de x, y; donc je pense qu'il est suffisamment différent de millibyte .
Golfé:
Un peu-non-golfé:
Représentation:
En outre, vous commencez à la position 8 car cela élimine un caractère de la boucle d’impression.
la source
Fortran,
263251247235234216 octetsVersion 1D (similaire à celle de Don Muesli):
Version 2D:
Pour activer la forme libre et le pré-traitement, le fichier a besoin de l'extension
.F90
, par exempleexplorer.F90
. L'entrée est lue à partir de STDIN:la source
C,
265226224 octetsLa carte est en 8x8, je ne l’avais pas remarqué auparavant. Et voici la solution de 265 octets qui fonctionne pour les cartes à dimensions variables:
la source
a[8][8]
être suffisant?int a[8][8]
vous obtenez une initialisation de carte gratuite, et l'utilisation de charm[64]
me procure d'excellents rabais pour la sortie de carte. Compte vraiment proche, cependante
etw
dans votre représentation de carte, vous pouvez alors utiliserfor(x=8;x--;)putchar((i=a[x][y])?i:63)
pour raser deux octets en sortie.c=getchar(),c+1
pas équivalentgetchar(),c++
ou y a-t-il des ruses impliquées?Ruby,
169147 octetsProgramme complet. Prend la chaîne d'entrée à partir de STDIN (vous aurez probablement besoin de la canaliser à partir d'un fichier pour empêcher tout saut de fin de ligne de déranger) et envoie la carte résultante à STDOUT.
Coupé une tonne en mettant toutes les cordes en une, puis en les séparant plus tard.
Ungolfed:
la source
Lua, 354 octets ( essayez-le en ligne )
Golfé:
Légèrement non-golfé:
la source
x=x+(("w e"):find(e)or 2)-2 end
pas êtrex=x-2+(("w e"):find(e)or 2)end
?Kotlin, 242 octets
Les nouvelles lignes peuvent être remplacées par des points-virgules si vous le souhaitez.
Essayez ici
la source