Étant donné un tableau, écrivez le programme ou la fonction la plus courte pour afficher ou renvoyer les personnages en vue du joueur. Un personnage est en vue s'il est possible de tracer une ligne entre lui et le joueur, sans croiser aucun personnage qui bloque la vision.
Contribution:
@
représente la position du joueur. Il n'y en aura qu'un dans l'entrée.- tout personnage qui correspond à la
[#A-Z]
vision des blocs d' expression régulière . - tout personnage qui correspond
[ a-z]
permet la vision. - il n'y aura pas de caractères invalides
- vous avez la garantie d'une entrée rectangulaire
Les lignes sont définies comme suit:
- définir le vecteur comme une grandeur et une direction
- une direction est l'une des N, NE, E, SE, S, SW, W, NW
- une grandeur est le nombre de caractères dans cette direction pour compter
- que le vecteur initial soit appelé d 1 ; le deuxième vecteur soit appelé d 2
- l'un de d 1 ou d 2 doit avoir une magnitude de
1
; l'autre peut avoir n'importe quelle ampleur - La direction de d 1 doit être adjacente à la direction de d 2 (par exemple: N et NE)
Une ligne est définie pour être tous les caractères le long du chemin marqué en appliquant d 1 , puis d 2 , d 1 , d 2 ....
Ligne d'échantillonnage (donnée par le .
s):
d 1 = (magnitude: 4, direction: E)
d 2 = (magnitude: 1, direction NE)
.....
.....
.....
@....
Production:
- chaque caractère visible dans la bonne position,
.
remplace l'espace. - Espace pour chaque personnage non visible.
Exemple d'entrée:
@
K
J
L
o
Sortie correspondante:
@.........
....K.....
.J.....
..........
.. .L.....
.. . ....
... .. ...
... .. ..
... . .
.... ..
Exemple d'entrée:
B###M# by
#Q # Zmpq
# # aaa
@ m #
# ##P#
# ####
# ####
#M ###
######
Sortie correspondante:
.B #M
.# .. Z pq
.#.#.aaa..
@..m.#
#.##P#
.#
.#
M.
#
Exemple d'entrée:
w
O l gg rT
QQL Ag #b
qqqqq XqQ
x V# f@aa
Y aaa
uU E l TaKK
e dd FF d opi
e d
Sortie correspondante:
.......... .....
......... .....
O..l...gg..rT
...QQL......Ag..#b..
...qqqqq.........XqQ
#.f@aa......
Y........aaa.....
...uU..E..l.TaKK....
d..FF.d.op
.... .d. ...
Réponses:
GolfScript, 171 caractères
L'entrée doit être fournie sur STDIN.
La sortie des exemples donnés ci-dessus est légèrement différente. J'ai vérifié les réponses à la main et je pense qu'elles sont correctes.
Exemple 1:
Exemple 2:
Exemple 3:
la source
n+
le code au début .Rubis - 510 caractères
Tout à fait un mammouth; mais c'est ma première tentative de golf.
L'entrée se fait par fichier spécifié comme argument; Je suppose que le fichier d'entrée se compose d'un bloc rectangulaire de caractères (donc, espaces de fin inclus) et d'un retour à la ligne de fin.
Cette version fait un usage intensif de
catch-throw
pour quitter les boucles profondes; Je peux éventuellement améliorer les choses avec des boucles vérifiées à la place.Code non obscurci:
Éditer
Ilmari Karonen note dans les commentaires de la question que l'algorithme de vision donné ne voit pas tous les carrés, même lorsqu'il n'y a pas d'obstacle. Voici une démonstration de cela, à (40,40) loin du lecteur.
la source
XqQ
. Cela dit, votre réponse donnée pour 3 ne correspond pas du tout au cas de test - elle a au moins une ligne supplémentaire en haut et un seul espace entre leO
etl
.