Wyzwanie polega na wdrożeniu dwuwymiarowego programu śledzenia promieni opartego na tekście.
Źródła białego światła są @
symbolami. R
, G
I B
są filtry świetlne. /
i \
są zwierciadłami o współczynniku odbicia 80%. ?
to czujnik światła. >
, <
, ^
I V
łączy światło w odpowiednim kierunku (na przykład, jeżeli jeden czerwony, zielony i jeden był w >
świetle będą emitowane w kierunku na prawo i że to żółty). Inne znaki niebiałe zajmują całe światło. Światło jest emitowane z @
symboli w czterech kierunkach.
Po uruchomieniu program powinien generować dane wyjściowe takie same jak dane wejściowe, ale ze śledzonymi promieniami. Ponieważ jest to dwuwymiarowe i gwarantuję na wejściu, że żadne promienie nigdy się nie skrzyżują, nie będzie z tym problemu. Każdy promień powinien być reprezentowany przez literę; r = czerwony, g = zielony, b = niebieski, c = cyjan, m = magenta, y = żółty, w = biały. Nigdy nie będzie żadnych trójskładnikowych kolorów. Obudowa jest ważna, aby odróżnić ją od wejścia. Po tym wyjściu wartości światła przechwycone przez znaki zapytania (w kolejności ich wyglądu, od lewej do prawej od góry do dołu) powinny być wyprowadzane jako wartości procentowe i kolory. Na przykład to wejście:
/ @
-
\R> ?
@B/
Powinien dać wynik:
/wwwwwwwwwwwwwwwwww@w
w -
w\R>mmmmmmmmmmmmmmmmm?
w b
@B/
#1: 72% Magenta
Kolejny ważny punkt, na który należy zwrócić uwagę - gdy dwa kolory są łączone za pomocą „pryzmatu” (strzałki), siła połączonego światła staje się średnią siłą dwóch. Dane wyjściowe muszą być dokładnie takie, jak określono (np. #X: [x] [x] x% Kolor ).
Jeśli twój język nie może czytać ze STDIN i pisać do STDOUT, utwórz funkcję (anonimową lub lambda, jeśli jest dostępna), która przyjmuje dane wejściowe jako argument i zwraca wynik.
Dyrektywy dotyczące kompilatora, struktury wymagane lub zalecane dla wszystkich lub większości programów utworzonych w języku itp. Można pominąć. Na przykład, #include
i using
dyrektyw (ale nie #define
) może być usunięta w językach stylu C, #/usr/bin/perl -options
Perl, i
Module Module1
Sub Main()
End Sub
End Module
na przykład w VB.NET. Jeśli importujesz przestrzenie nazw lub dodajesz dyrektywy dołączające, zapisz je w swojej odpowiedzi.
Czy to już wystarczająco trudne? :)
>
wychwytuje światło, które przechodzi prosto obok niego. A jeśliw
przechodzi od góryR
, to samo powinno byćb
od dołu. Wreszcie (myślę), mylisz się, że promienie się nie krzyżują. Na przykład w jednym wierszu, dla czego byłoby poprawne wyjście@R> B@
?@
w lewym dolnym rogu emituje światło we wszystkich czterech kierunkach, prawda? W szczególności to emitujew
. I nie złamałem żadnych odstępów, przynajmniej tak jak w Chromium. Jeśli chodzi o przejście obok, moja edycja może to wyjaśnić.Odpowiedzi:
Python,
602559614 znakówEdycja: naprawiono, aby nie wymagało spacji końcowych.
źródło
FA#
źródło