Cel
W tym konkursie dostajesz losowy pokój z jedną świecą w środku. Celem jest napisanie najkrótszego programu (to jest golf), który określa, które części pokoju są oświetlone przez świecę, zastępując ciemne punkty znakami @
„”. Program powinien zająć miejsce ze STDIN, a wydruk powinien być wydrukowany do STDOUT.
Przykładowe wejście / pokój
+------+
| C |
| +--+
| \ |
+---------+
Świeca jest przedstawiony z C
i ściany / lusterka są reprezentowane |
, -
, /
lub \
. Same ściany są zwierciadłami. Narożniki pokoju są oznaczone symbolem +
.
Pokoje nigdy nie będą miały ukośnych ścian, a światło nigdy nie będzie w stanie wydostać się z pokoju.
Ponadto pierwszy znak w linii zawsze będzie częścią ściany poza pokojem. Absolutnym ostatnim znakiem w każdej linii będzie przeciwna ściana pokoju. Żadne postacie między tymi dwoma nie będą poza pokojem.
Światło i odbicie
Świeca emituje osiem (laserowych) wiązek światła w ośmiu podstawowych kierunkach: N, S, E, W, NE, SE, SW i NW. Te promienie światła odbijają się od luster, jak opisano poniżej:
Old Direction of Travel | Mirror | New Direction
N S E W NE SE SW NW / E W N S -- -- -- --
N S E W NE SE SW NW \ W E S N -- -- -- --
N S E W NE SE SW NW | - - - - NW SW NE SW
N S E W NE SE SW NW - - - - - SE NE SW NE
A -
oznacza pochłaniane światło. Światło jest zawsze absorbowane przez litery C lub +. Należy zauważyć, że światła odbijają się od lustra tylko wtedy, gdy zajmuje to samo miejsce co lustro. Reguły te są znacznie łatwiejsze do zrozumienia, gdy narysujesz odbicie na papierze.
Przykładowy wynik
Jako wynik program powinien wydrukować obraz oświetlonego pokoju, z ciemnymi plamami zapisanymi jako @
, jasnymi plamami pozostawionymi pustymi i bez zmian lusterek. W powyższym przykładzie wynikiem byłoby:
+------+
| C |
|@ @ +--+
| @\ |
+---------+
Oznacza to, że jeśli wyciągniesz wiązki światła, nigdy nie dotrą one do oznaczonych miejsc @
.
Więcej przykładów
Input:
+-----+
| |
| |
| C |
| |
| |
+-----+
Output:
+-----+
| @ @ |
|@ @|
| C |
|@ @|
| @ @ |
+-----+
Input:
+-----+
| \ |
|/ C \+-+
| |
| \ - ++
+------+
Output:
+-----+
| \ @|
|/ C \+-+
| @|
| @\ -@++
+------+
@
też być ?Odpowiedzi:
Python, 292 znaków
Czyta w pokoju, robi prostokąt, a następnie wychodzi ze świecy we wszystkich kierunkach. M zawiera aktywne znaki lustrzane i ich efekt (
/\
dla kierunków głównych,|-
dla pozostałych)Może obsługiwać pokoje o szerokości do 97 znaków.
źródło
c - 504
Opiera się na domyślnej funkcji K&R wywołującej semantykę. Bardzo prosta implementacja, z wyjątkiem skrzypiec z odbijaniem promieni.
Nie golfił
Uprawomocnienie
źródło