Vous avez un petit robot avec quatre capteurs de distance. Il connaît la disposition d'une pièce, mais il n'a aucun sens de l'orientation autre que de pouvoir se verrouiller sur l'orientation de la grille. Vous voulez pouvoir savoir où le robot est basé sur les lectures, mais cela peut être ambigu en raison des capteurs limités.
Explication du défi
Vous recevrez une disposition de la pièce et quatre lectures de distance dans le sens horaire donnant le nombre de cellules entre vous et un mur. Il peut y avoir des murs au milieu de la pièce et les bords de la grille sont également des murs. Le robot ne peut pas être placé au sommet d'un mur.
Votre objectif est de répertorier tous les emplacements dans la pièce dans lesquels le robot pourrait se trouver et qui donneraient les lectures données. Gardez à l'esprit que le robot n'a aucun sens de l'orientation (autre que d'être verrouillé à des angles de 90 degrés sur la grille, c'est-à-dire que le robot ne sera jamais orienté en diagonale ou un autre angle d'inclinaison), donc une lecture de [1, 2, 3, 4], par exemple, est identique à la lecture [3, 4, 1, 2].
Exemples
Pour ces exemples, les coordonnées des cellules seront données sous forme de paires indexées 0 (x, y) à partir de la cellule en haut à gauche. Les lectures seront données dans le sens horaire dans une liste entre crochets. Les mises en page utiliseront des signes dièse pour les murs et d'autres caractères (généralement des points) pour représenter les cellules vides.
Cas 1
. . . .
. . . .
. . # .
. . . .
- [1, 0, 2, 3] ==> (1, 0), (3, 1)
- [0, 0, 3, 3] ==> (0, 0), (3, 0), (0, 3), (3, 3)
- [2, 1, 1, 0] ==> (0, 2), (2, 1)
- [1, 1, 2, 2] ==> (1, 1)
Cas 2
# a . # a .
a # . . # a
. . # . . #
# . . # . .
a # . . # a
. a # . a #
- [0, 0, 1, 1] ==> chaque position sur la grille qui est un point
- [1, 0, 0, 0] ==> tous les a de la grille
Cas 3
.
- [0, 0, 0, 0] ==> (0, 0)
Cas 4
. # #
. . .
- [1, 2, 0, 0] ==> (0, 1)
- [0, 1, 2, 0] ==> (0, 1)
- [0, 0, 1, 0] ==> (0, 0)
- [1, 0, 1, 0] ==> (1, 1)
- [0, 1, 0, 1] ==> (1, 1)
Cas 5
. # . .
. . . .
. . # .
. . . .
- [2, 1, 1, 0] ==> (0, 2), (2, 1)
- [0, 2, 2, 1] ==> (1, 1)
- [1, 0, 2, 2] ==> (1, 1)
- [0, 3, 0, 0] ==> (0, 0)
- [1, 0, 1, 1] ==> (1, 2)
Autres règles
- L'entrée peut être dans n'importe quel format pratique. L'entrée est une grille de murs et d'espaces et une liste de quatre distances dans le sens des aiguilles d'une montre.
- La sortie peut être soit une liste de toutes les cellules qui satisfont la lecture, soit une version modifiée de la grille montrant quelles cellules satisfont la lecture. Le format exact de la sortie n'a pas d'importance tant qu'il est raisonnable et cohérent. Les formats de sortie valides incluent, mais ne sont pas limités à :
- Impression d'une ligne pour chaque coordonnée de cellule sous la forme d'une paire ordonnée
- Impression de la grille avec
.
,#
et!
pour l'espace, les murs et les emplacements possibles, respectivement. - Renvoyer une liste de paires ordonnées
- Renvoyer une liste d'index
- Renvoyer une liste de listes utilisant différentes valeurs pour les espaces, les murs et les emplacements possibles
- Renvoie / imprime une matrice de 0 et de 1, en utilisant 1 pour représenter les cellules où la lecture se produira. (Il n'est pas nécessaire d'inclure des murs)
- Encore une fois, cette liste n'est pas exhaustive, donc d'autres représentations sont valables tant qu'elles sont cohérentes et montrent chaque emplacement valide possible dans une grille ou une liste. Si vous n'êtes pas sûr, laissez un commentaire et je serai heureux de clarifier.
- Vous pouvez supposer qu'une lecture correspond à au moins un emplacement sur la grille.
- Vous pouvez supposer que la grille d'entrée a une taille d'au moins 1x1 et possède au moins un espace vide.
- Vous pouvez supposer que la grille d'entrée ne dépasse pas 256 cellules dans chaque dimension.
- Vous pouvez supposer que la grille d'entrée est toujours un rectangle parfait et non dentelée.
- Il n'y a aucune pénalité ou bonus si votre programme donne des sorties sensées pour des entrées invalides.
- C'est le golf de code, donc le code le plus court gagne.
Case 5
ne semblent pas tout à fait correctes. Je reçois(0,2),(2,1)
,(1,3)
,(1,3)
etnothing
.Réponses:
JavaScript (ES6),
130 128 126125 octetsEssayez-le en ligne! (avec sortie post-traitée pour plus de lisibilité)
Commenté
la source
Python 2 ,
234202200191 octetsEssayez-le en ligne!
la source
Fusain , 42 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Le charbon de bois semble ajouter un rembourrage à la sortie pour une raison quelconque; Je suppose que c'est un bug dans le charbon de bois. Explication:
Imprimez la carte sans déplacer le curseur.
Faites une boucle sur chaque personnage de la carte.
S'il s'agit d'une nouvelle ligne, déplacez le curseur au début de la ligne suivante.
Trouvez la distance au mur en direction
k+m
.Faites une boucle sur les quatre directions de départ
k
, jetez un œil dans les quatre directions dans le sens des aiguilles d'une montrem
et si le résultat inclut la deuxième entrée, imprimez un!
sinon imprimez le caractère actuel.la source