Votre vie pourrait en dépendre. Ne cligne pas des yeux. Ne cligne même pas des yeux. Cligne des yeux et tu es mort. Ils sont rapides. Plus rapide que vous ne pouvez le croire. Ne tourne pas le dos, ne détourne pas le regard et ne cligne pas des yeux! Bonne chance.
Les anges pleureurs sont une race extraterrestre qui ne peut pas bouger sous l'observation d'un autre être (même un autre ange). Ils se nourrissent en renvoyant leurs victimes dans le temps. Vous ( le docteur ) êtes pris au piège dans une pièce avec certains et vous devez vous rendre à votre TARDIS.
Tâche
Ecrivez un programme qui, à partir d’une représentation ASCII d’une pièce rectangulaire, affichera un chemin menant à la sécurité. Si un ange peut attaquer - à n'importe quel moment de votre progression - alors ce chemin n'est pas sûr. Un ange peut attaquer s'il peut vous voir sans être vu par vous ou par un autre ange.
Contribution
L'entrée est en deux parties. Tout d’abord, la direction à laquelle vous faites face (NSEW). Ensuite, sur les lignes suivantes, une représentation de la salle, indiquant les emplacements de début / fin, ainsi que l’emplacement / le visage de tous les anges.
L'échantillon ci-dessous montre qu'il y a un ange faisant face à l'ouest et que vous commencez à faire face au sud.
S
..........
....D.....
..........
..........
..........
..........
..........
..........
.........W
..........
...T......
.
- Espace libreD
- Le docteur (position de départ)T
- Le TARDIS (position finale)N,S,E,W
- un ange face à la direction indiquée (nord, sud, est, ouest)
Ligne de mire
Vous pouvez voir n’importe quel espace dont l’angle est inférieur à 45 degrés. La ligne de mire est obstruée s’il existe une autre entité le long d’une diagonale directe horizontale, verticale ou à 45 degrés. Toute autre diagonale ne gêne pas la vue. La ligne de mire des anges fonctionne de la même manière. Par exemple, dans ce qui suit, -
représente votre champ de vision, en supposant que vous soyez face au sud.
........
...D....
..---...
.-----..
-------.
---N----
---.--N-
---.----
Sortie
La sortie est une chaîne représentant le chemin que vous emprunterez pour sortir. S'il existe plusieurs chemins sécurisés, choisissez-en un. Si aucun chemin n'est sécurisé, sortie0
. Si la carte est mal formée, faites ce que vous voulez, y compris en vous écrasant. Considérez-le malformé si la pièce n'est pas rectangulaire, s'il n'y a pas de sortie, etc. S'il n'y a pas d'Anges, ce n'est pas mal formé, c'est tout simplement facile.
Pour chaque étape, vous pouvez effectuer l'une des deux opérations suivantes: vous déplacer dans une direction NSEW ou vous orienter vers une direction NSEW (sans changer de position). Pour vous déplacer, écrivez simplement la lettre correspondant à cette direction. Pour faire face à une direction, la sortie F
suivie de la lettre appropriée. Par exemple, la sortie suivante:
SSFESSSSSSSW
est un chemin sécurisé pour l'échantillon indiqué dans la section d'entrée. Vous vous déplacez au sud deux fois, face à l'est pour garder l'ange en vue, puis au sud sept fois de plus et à l'ouest une fois pour entrer dans le TARDIS.
Cas de test
1) Vous pouvez contourner l’Ange face à l’est pour vous rendre au TARDIS. À moins que vous ne vous mettiez directement entre eux, ils se verrouillent mutuellement, peu importe la direction à laquelle vous faites face.
W
...D....
........
........
........
.E.....W
........
........
...T....
2) tu perds. Il n'y a aucun moyen de les dépasser. Ils peuvent se voir jusqu'à ce que vous vous mettiez entre eux. À ce stade, vous ne pouvez pas les affronter tous les deux et vous avez terminé. Vous pourriez aussi bien fermer les yeux et en finir.
S
...D....
........
........
........
E......W
........
........
...T....
Gagnant
Les règles de golf standard et les échappatoires s’appliquent, la perte d’octets est la plus faible J'essaierai bientôt d'obtenir d'autres tests, mais n'hésitez pas à suggérer les vôtres d'ici là.
Image et citation de Doctor Who.
J
).Réponses:
Python -
559 565 644633L'entrée doit être fournie comme ceci:
Essentiellement c'est cette approche s’applique à rechercher tous les états (position et direction) que le médecin peut atteindre en toute sécurité, en enregistrant comment il s’y est rendu et en imprimant le chemin en cas de succès. Les positions et les directions sont réalisées avec des nombres complexes.
Je pourrais probablement protéger certains personnages avec les arithmétiques de nombres complexes de Sage, mais cela prendrait énormément de temps.
J'ai d'abord pensé pouvoir sauver six personnages en laissant le Docteur prendre une direction spécifique après avoir atteint le Tardis, mais je me suis rendu compte que cela pourrait entraîner de mauvaises solutions. De plus, j'ai mal interprété les règles.
Voici une version pour la plupart non-golfée:
Cas de test
Cas de test 1:
Cas de test 2:
Le cas de test de VisualMelon:
la source
C #
17712034196218871347octetsRéécriture de la vérification de la NDS bloquante en une boucle, la rendant beaucoup plus ordonnée et plus courte d'environ 450 octets
C'est un programme complet qui s'attend à ce que l'entrée se termine par un EOF et soit transmise à STDIN. Il (espérons) affiche le chemin le plus court vers le TARDIS, ou "0" si aucun chemin n’existe. Il utilise une recherche médiocre en largeur d'abord pour suivre tous les itinéraires possibles, puis il effectue un retour arrière du TARDIS au Doctor pour assembler la sortie.
Code formaté:
Sortie pour exemple entrée
Sortie pour le cas de test 1)
Sortie pour le cas de test 2)
Je présente, comme demandé, un nouveau cas de test:
Mes sorties de programme
Cas de test 1 de WozzeC:
Cas de test 2 de WozzeC:
la source
C #
1454, 1396, 1373, 13031279Droite. Alors j'ai décidé de tenter le coup, et ça a pris un moment. Il est construit principalement à l'aide d'opérateurs logiques.
Pour éviter de devoir vérifier Null, etc., j'ai décidé d'utiliser un champ de [MAX_SIZE * 3] * [MAX_SIZE] * 3 et de placer le plateau de jeu à proximité du centre.
Les contrôles de boucle sont effectués à l'intérieur et à l'extérieur jusqu'à 50 (MAX_SIZE). Donc, quelque chose comme ça:
Lorsqu'un EWS ou N est trouvé, je fais la même vérification de leur part. Si quelque chose est trouvé en regardant les anges (pas le docteur), ils retournent 15 comme passage libre. S'ils ne sont pas vus, ils reviennent de quelle manière le médecin devrait faire face pour être en sécurité. c'est-à-dire que N retournerait 2 pour le sud. À moins que ce soit NW ou NE, auquel cas il renverrait respectivement 6 (2 + 4) et 10 (2 + 8).
Si deux anges surveillent le Docteur, les valeurs renvoyées par ces valeurs seraient "ANDées". Ainsi, dans l'exemple de test 2, les positions 1 et 4 deviendront 0. Cela signifie que la position est mauvaise et doit être évitée.
Code développé:
Résultats de test
1 Exemple: FNSSSWNNNWSSSWSSSSENNENNES
2 Exemple: pas de sortie
Exemple VisualMelon: FNSSSSSSSWNNNNNNWSSSSSSSSSEEEE
Mon cas de test1: FSSENEEEFWSSFNSWWN
Mon cas de test2: FSEEEESFWSSSSFNWWWWNFENNFSEES
Comme on peut le constater, mon médecin adore se pavaner comme une douche pour montrer aux anges combien il est amusant de se déplacer. Je peux faire en sorte que le logiciel trouve le chemin le plus court, mais cela prend plus de temps et nécessite plus de code.
Cas de test pour vous les gars
Un autre:
la source
using S=System.Console;
, ou vous pouvez simplement supprimer le S dans votre code et économiser 6 octets parusing System
. Maintenant, je vais devoir essayer de réduire mon approche naïve un peu plus ...;)