Biorąc pod uwagę tablicę, napisz najkrótszy program lub funkcję, aby wyświetlić lub zwrócić, które postacie są w zasięgu wzroku gracza. Postać jest widoczna, jeśli możliwe jest narysowanie linii między nią a graczem, bez przekraczania postaci blokujących widzenie.
Wejście:
@
reprezentuje pozycję gracza. Na wejściu będzie tylko jeden z nich.- dowolna postać pasująca do wyrażenia
[#A-Z]
blokującego wyrażenia regularne . - dowolna dopasowana postać
[ a-z]
pozwala na widzenie. - nie będzie żadnych nieprawidłowych znaków
- masz zagwarantowane prostokątne wejście
Linie są zdefiniowane w następujący sposób:
- zdefiniuj wektor jako wielkość i kierunek
- kierunek to jeden z N, NE, E, SE, S, SW, W, NW
- wielkość to liczba znaków w tym kierunku do zliczenia
- niech wektor początkowy nazywa się d 1 ; drugi wektor nazywa się d 2
- jeden z d 1 lub d 2 musi mieć wielkość
1
; drugi może mieć dowolną wielkość - kierunek d 1 musi przylegać do kierunku d 2 (np .: N i NE)
Linia jest zdefiniowana jako wszystkie znaki na ścieżce oznaczone przez zastosowanie d 1 , a następnie d 2 , d 1 , d 2 ....
Linia próbki (podana przez .
s):
d 1 = (wielkość: 4, kierunek: E)
d 2 = (wielkość: 1, kierunek NE)
.....
.....
.....
@....
Wynik:
- każda widoczna postać na właściwej pozycji
.
zastępuje spację. - Miejsce na każdą niewidoczną postać.
Przykładowe dane wejściowe:
@
K
J
L
o
Odpowiednia wydajność:
@.........
....K.....
.J.....
..........
.. .L.....
.. . ....
... .. ...
... .. ..
... . .
.... ..
Przykładowe dane wejściowe:
B###M# by
#Q # Zmpq
# # aaa
@ m #
# ##P#
# ####
# ####
#M ###
######
Odpowiadające wyniki:
.B #M
.# .. Z pq
.#.#.aaa..
@..m.#
#.##P#
.#
.#
M.
#
Przykładowe dane wejściowe:
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
Odpowiednia wydajność:
.......... .....
......... .....
O..l...gg..rT
...QQL......Ag..#b..
...qqqqq.........XqQ
#.f@aa......
Y........aaa.....
...uU..E..l.TaKK....
d..FF.d.op
.... .d. ...
Odpowiedzi:
GolfScript, 171 znaków
Dane wejściowe należy podać na STDIN.
Wynik dla powyższych przykładów jest nieco inny. Zweryfikowałem odpowiedzi ręcznie i uważam, że są poprawne.
Przykład 1:
Przykład 2:
Przykład 3:
źródło
n+
do kodu.Rubin - 510 znaków
Całkiem mamut; ale to moja pierwsza próba gry w golfa.
Dane wejściowe są przez plik określony jako argument; Zakładam, że plik wejściowy składa się z prostokąta bloku znaków (więc wraz z końcowymi spacjami) i ma końcowy znak nowej linii.
Ta wersja szeroko wykorzystuje
catch-throw
wyjście z głębokich pętli; Zamiast tego mogę ewentualnie poprawić sprawy za pomocą pętli sprawdzonych pod kątem granic.Kod nieobjawiony:
Edytować
Ilmari Karonen zauważa w komentarzu, że dany algorytm widzenia nie widzi wszystkich kwadratów, nawet gdy nie ma przeszkody. Oto demonstracja tego, w odległości do (40,40) od gracza.
źródło
XqQ
. To powiedziawszy, twoja odpowiedź dla 3 w ogóle nie odpowiada testowi - ma przynajmniej dodatkową linię u góry i tylko jedną spację międzyO
al
.