Il y a longtemps, lorsque je passais plus de temps à jouer au RPG, l'un des problèmes de certains joueurs était de suivre les mouvements du groupe et de dessiner la bonne carte. Je viens donc avec une idée, pour vérifier comment vous en êtes arrivés à régler ce problème.
La tâche consiste à écrire une fonction, qui prend comme paramètre d'entrée la liste des directions (passées comme structure de votre choix) ^v<>
, afficher la carte du donjon. Dans l'exemple pour l'entrée: la >>>vvv<<<^^^
sortie sera:
+----+ +----+
| | |>>>v|
| ++ | |^++v|
| ++ | because |^++v|
| | |^<<<|
+----+ +----+
Cas de test
>>>>>>vvvvv<<<<^^^>>v
+-------+
| |
+-+---+ |
| | |
| + | |
| +-+ |
| |
+-----+
^^^^^vvv<<<^^vv>>>>>>>>vv>><<^^^^v>>>>v^<^
+-+
+-+| | +-++-+
| || | | ++ ++
| ++ +-+ |
| +-+ |
+--+ +-+ +-+-+
| | | |
+-+ +---+
Comme c'est un défi de code de golf, le code le plus court gagne.
Bon golf.
EDIT Désolé pour l'édition tardive, je n'ai pas eu beaucoup de temps récemment.
La carte est générée en fonction du mouvement. Il ne doit contenir que des couloirs visités lors de la marche. Par conséquent, la création d'une grande pièce ne sera pas une réponse valable.
Il y a trois symboles valides sur la carte:
|
mur vertical|
mur horizontal+
intersection du mur vertical et horizontal.
La longueur maximale du chemin est de 255 caractères (mais si vous le pouvez, ne vous limitez pas).
Plus de cas de test:
><><><><
+--+
| |
+--+
>^<v
+--+
| |
| |
+--+
J'espère que maintenant tout est clair.
vvv>>^^^<<
produirait (croix? Tuyaux?)Réponses:
Javascript (ES6),
261254243 octetsJSFiddle
la source
return
en remplaçant le;
par,
et le{}
avec()
for
boucle qui ne peut pas être intégrée de cette façon.{
pareval("
et}
par")
pour supprimer le code de retourgolf.stackexchange.com/a/80967/41042'\\n'
si je le faisais. Si je compte correctement, cela mène à +1 octet. Ou existe-t-il une meilleure façon d'intégrer le saut de ligne dans l'évaluation?\n
puisque les chaînes de modèle prennent en charge les nouvelles lignes littérales, mais cela le laisserait toujours au même nombre d'octets.C, 246 octets
Prend la saisie sous forme de caractères séparés, par exemple:
Ou plus commodément, ce format (intentionnellement non cité!):
Ou pour une entrée aléatoire (assez inefficace):
Et enfin, utiliser
awk
pour recadrer le résultat signifie que nous pouvons devenir beaucoup plus gros:Sorties vers sortie standard. Utilise le fait que le remplissage est autorisé autour de la carte (produit une carte qui a une longueur de bord 2 * n + 1, mettant la position finale au milieu).
Panne
Cela fonctionne en bouclant sur les arguments en sens inverse et en se déplaçant en sens inverse. Il utilise en fait le fait que arg 0 est le nom du programme; peu importe le nom, mais il nous permet de visiter à la fois la cellule initiale et la dernière (ainsi que toutes les cellules intermédiaires) sans avoir besoin d'une manipulation particulière.
la source