Étant donné un ensemble de contours 2D fermés non superposés (séparés par au moins un espace même sur des diagonales) avec des flèches orientées de manière cohérente dans le même sens horaire ou antihoraire (chaque contour a sa propre direction) et un nombre positif n
, déplacez les flèches n
étapes le long des contours dans la direction respective. Les flèches sont représentées > v < ^
respectivement par les directions droite, bas, gauche et haut. Là, les autres caractères sont -
(horizontal), |
(vertical) et +
(coin). Lorsqu'une flèche est sur un coin, elle conserve sa direction actuelle et ne la change qu'après le virage.
Il y aura toujours un segment droit (ou un espace) entre deux coins quelconques (comme +-+
pour l'horizontale et similaire pour la verticale) - en d'autres termes, les U
virages serrés sont interdits. Les segments entre les coins sont verticaux ou horizontaux et le coude dans un coin est toujours à 90 degrés.
Contribution:
- un entier positif -
n
- nombre d'étapes - une représentation ASCII des contours - il peut s'agir d'une chaîne multiligne, d'une liste de chaînes, d'une liste de caractères, etc.
Sortie:
Les mêmes contours avec toutes les flèches ont décalé les n
pas dans la direction globale de chaque contour.
Cas de test:
1.
Contribution:
n
= 1
+----->->
| |
| v---+
| |
+---<-------+
Sortie:
+------>+
| v
| +>--+
| |
+--<--------+
2.
Contribution:
n
= 2
+-----+ +---+
| | | |
+-->--+ | v
| |
+--->---+ |
| |
+------<<---+
Sortie:
+-----+ +---+
| | | |
+---->+ | |
| |
+----->-+ v
| |
+----<<-----+
3.
Contribution:
n
= 3
+---+ +---+ +-------+
| | | v | |
^ | | | +-<-+ |
| | ^ | | v
| +---+ +-->----+ |
| |
| +-------+ +---+ |
| | | v | |
+---+ +---+ +---+
Sortie:
+>--+ ^---+ +-------+
| | | | ^ |
| | | | +---+ |
| | | | | |
| +---+ v----->-+ |
| |
| +-------+ +---+ v
| | | | | |
+---+ +-<-+ +---+
4.
Contribution:
n
= 1
+--+
| |
| +---+
| |
+----+ |
| |
+-+
Sortie:
+--+
| |
| +---+
| |
+----+ |
| |
+-+
5.
Contribution
n
= 4
^>>>>
^ v
^ v>>>>
^ v
<<<<<<<<v
Sortie:
^>>>>
^ v
^ v>>>>
^ v
<<<<<<<<v
6.
Contribution:
n
= 1
^->
^ v
<<v
Sortie:
^>+
^ v
<<v
Écrivez une fonction ou un programme résolvant la tâche ci-dessus. Le code le plus court en octets dans chaque langue gagne. Ne vous laissez pas décourager par les langues de golf. L'explication de l'algorithme et du code est très appréciée.
There will always be a straight segment (or a space) between any two corners (like +-+ for the horizontal and similar for the vertical) - in other words the sharp U turns are forbidden.