Schreiben Sie auf einer Tafel das kürzeste Programm oder die kürzeste Funktion, um anzuzeigen oder zurückzugeben, welche Zeichen für den Spieler sichtbar sind. Ein Charakter ist in Sicht, wenn es möglich ist, eine Linie zwischen ihm und dem Spieler zu ziehen, ohne dass Charaktere gekreuzt werden, die die Sicht beeinträchtigen.
Eingang:
@
repräsentiert die Position des Spielers. In der Eingabe wird nur eine davon vorhanden sein.- Jedes Zeichen, das dem regulären Ausdruck entspricht,
[#A-Z]
blockiert die Sicht. - Jedes Zeichen, das passt,
[ a-z]
ermöglicht das Sehen. - Es gibt keine ungültigen Zeichen
- Ihnen wird eine rechteckige Eingabe garantiert
Linien sind wie folgt definiert:
- Definieren Sie den Vektor als Größe und Richtung
- Eine Richtung ist eine von N, NE, E, SE, S, SW, W, NW
- Eine Größe gibt an, wie viele Zeichen entlang dieser Richtung gezählt werden sollen
- sei der Anfangsvektor d 1 ; der zweite Vektor heißt d 2
- eines von d 1 oder d 2 muss eine Größe von haben
1
; der andere kann eine beliebige Größe haben - Die Richtung von d 1 muss der Richtung von d 2 benachbart sein (z. B .: N und NE)
Eine Linie ist definiert als alle Zeichen entlang des Pfades, die durch Anwenden von d 1 , dann d 2 , d 1 , d 2 markiert sind ... .
Abtastzeile (gegeben durch das .
s):
d 1 = (Betrag: 4, Richtung: E)
d 2 = (Betrag: 1, Richtung NE)
.....
.....
.....
@....
Ausgabe:
- Jedes sichtbare Zeichen an der richtigen Position
.
ersetzt das Leerzeichen. - Platz für jedes nicht sichtbare Zeichen.
Beispieleingabe:
@
K
J
L
o
Entsprechende Ausgabe:
@.........
....K.....
.J.....
..........
.. .L.....
.. . ....
... .. ...
... .. ..
... . .
.... ..
Beispiel Input:
B###M# by
#Q # Zmpq
# # aaa
@ m #
# ##P#
# ####
# ####
#M ###
######
Entsprechende Ausgabe:
.B #M
.# .. Z pq
.#.#.aaa..
@..m.#
#.##P#
.#
.#
M.
#
Beispieleingabe:
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
Entsprechende Ausgabe:
.......... .....
......... .....
O..l...gg..rT
...QQL......Ag..#b..
...qqqqq.........XqQ
#.f@aa......
Y........aaa.....
...uU..E..l.TaKK....
d..FF.d.op
.... .d. ...
Antworten:
GolfScript, 171 Zeichen
Der Eingang muss auf STDIN bereitgestellt werden.
Die Ausgabe für die oben angegebenen Beispiele unterscheidet sich geringfügig. Ich habe die Antworten von Hand überprüft und denke, dass sie korrekt sind.
Beispiel 1:
Beispiel 2:
Beispiel 3:
quelle
n+
den Code voranstellen .Ruby - 510 Zeichen
Ziemlich ein Mammut; Aber es ist mein erster Versuch, Golf zu spielen.
Die Eingabe erfolgt über eine Datei, die als Argument angegeben wird. Ich gehe davon aus, dass die Eingabedatei aus einem rechteckigen Zeichenblock besteht (einschließlich nachfolgender Leerzeichen) und eine nachfolgende Newline enthält.
Diese Version macht ausgiebig Gebrauch
catch-throw
, um tiefe Schleifen zu verlassen; Möglicherweise kann ich die Sache stattdessen mit "bounds-checked" -Schleifen verbessern.Freier Code:
Bearbeiten
Ilmari Karonen merkt in der Frage an, dass der gegebene Sichtalgorithmus nicht alle Quadrate sieht, auch wenn es kein Hindernis gibt. Hier ist eine Demonstration davon, um (40,40) vom Spieler entfernt.
quelle
XqQ
. Die angegebene Antwort für 3 stimmt jedoch überhaupt nicht mit dem Testfall überein. Sie enthält mindestens eine zusätzliche Zeile oben und nur ein Leerzeichen zwischenO
undl
.