Les poignées de porte sont superbes et tout, mais lorsque vous ouvrez une porte, elle enfonce toujours les murs autour d'elle. J'ai besoin que vous preniez connaissance de l'art ASCII d'une pièce, comme ceci:
+---------+--X --X --+-----+
| \ \ |\ | \ |
| \ \ | \ | \|
| X | \ | X
| / | | \ X
| / | \ /
| / | \ / |
+---X --+-------X------+-----+
Et sortez la pièce avec des butées de porte, comme ceci:
+---------+--X --X --+-----+
| \ . \ |\ | \.|
| \ \ | \ .| \|
| X | \ | X
| / | |. \ X
| / .| \ /
|. / | .\ / |
+---X --+-------X------+-----+
Spécification:
- La salle ASCII (entrée) sera composé de
+
,-
et|
. Ces personnages sont purement cosmétiques; ils pourraient tous être+
s mais cela aurait l'air horrible. Il contiendra également des charnières (X
) et des portes (/
ou\
). - Les portes sont constituées de
/
ou\
. En partant du caractère "charnière", c'est-à-X
dire qu'ils iront directement en diagonale (changement de 1 poucex
et 1 poucey
) pour 2 unités ou plus (caractères). Pour trouver où placer le butoir d'une porte (il n'y a toujours qu'un seul butoir par porte), recherchez le seuil de la porte. La porte commencera toujours par une charnière et ira de la même quantité d'espace que la longueur de la porte vers le haut, le bas, la gauche ou la droite à partir de là. L'espace suivant après cela sera toujours un mur. Par exemple, dans cette porte, la porte est marquée par
D
s:\ \ ---DDX-----
Une fois la porte trouvée, découvrez si vous devez aller dans le sens horaire ou antihoraire pour atteindre la porte. Par exemple, dans cet exemple de porte ci-dessus, vous devez aller dans le sens horaire, et dans celui-ci, vous devez aller dans le sens antihoraire:
\ <- \ ) -----X ---
Une fois que vous savez où aller, continuez comme ça (en ignorant la porte) jusqu'à ce que vous atteigniez un mur.
Voici une visualisation de cela pour l'exemple de porte ci-dessus:
Le bleu est la porte, l'orange constate que vous devez aller dans le sens horaire, et le rouge continue dans le sens horaire jusqu'à ce qu'un mur soit atteint.
Une fois que vous atteignez un mur, passez (la longueur de la porte) des espaces de la charnière (
X
) sur ce mur, éloignez-vous d'un espace du mur vers la porte (afin de ne pas placer le butoir de porte directement sur le mur) et insérez un.
Là. Voici le même exemple de porte montrant comment le butoir de porte est placé:\ \ . ---DDX12---
Répétez l'opération pour chaque porte et affichez le résultat! Utilisez l'exemple d'entrée en haut de cet article comme cas de test pour vérifier si votre programme est valide.
Notez que vous n'avez pas à manipuler des portes qui ne tiennent pas sur leurs murs, telles que:
| / | / | / | / +-X --
Ou:
/ / / +-X -- | |
- Il s'agit de code-golf , donc le code le plus court en octets gagnera.
Réponses:
Scala, 860 octets
Golfé :
Non-golfé :
L'utilisation de la POO était définitivement la mauvaise approche ici, avec le recul. Si je pouvais le refaire, j'irais certainement avec un tas de tables de vérité codées en dur.
la source