Die Herausforderung besteht darin, ein zweidimensionales Raytracing-Programm auf Textbasis zu implementieren.
Weiße Lichtquellen sind @
Symbole. R
, G
Und B
sind Lichtfilter. /
und \
sind Spiegel mit 80% Reflexionsvermögen. ?
ist ein Lichtsensor. >
, <
, ^
Und V
in der entsprechenden Richtung Licht kombinieren ( zum Beispiel , wenn eine rote und eine grüne kam in ein >
das Licht würde nach rechts emittiert werden , und es wäre gelb). Andere Nicht-Leerzeichen absorbieren alles Licht. Licht wird von @
Symbolen in vier Richtungen emittiert .
Wenn das Programm ausgeführt wird, sollte es die gleiche Ausgabe wie die Eingabe erzeugen, jedoch mit verfolgten Strahlen. Da dies zweidimensional ist und ich garantiere, dass sich in der Eingabe niemals Strahlen kreuzen werden, wird es damit kein Problem geben. Jeder Strahl sollte durch einen Buchstaben dargestellt werden; r = rot, g = grün, b = blau, c = cyan, m = magenta, y = gelb, w = weiß. Es wird niemals ternäre Farben geben. Das Gehäuse ist wichtig, um es vom Eingang zu unterscheiden. Nach dieser Ausgabe sollten die von den Fragezeichen erfassten Lichtwerte (in der Reihenfolge ihres Erscheinungsbilds von links nach rechts von oben nach unten) als Prozentsätze und Farben ausgegeben werden. Zum Beispiel diese Eingabe:
/ @
-
\R> ?
@B/
Sollte die Ausgabe geben:
/wwwwwwwwwwwwwwwwww@w
w -
w\R>mmmmmmmmmmmmmmmmm?
w b
@B/
#1: 72% Magenta
Ein weiterer wichtiger Punkt: Wenn zwei Farben mit einem "Prisma" (den Pfeilen) kombiniert werden, wird die Stärke des kombinierten Lichts zur durchschnittlichen Stärke der beiden. Die Ausgabe muss genau wie angegeben sein (z. B. #x: [x] [x] x% Farbe ).
Wenn Ihre Sprache nicht aus STDIN lesen und in STDOUT schreiben kann, erstellen Sie eine Funktion (anonym oder Lambda, falls verfügbar), die die Eingabe als Argument akzeptiert und das Ergebnis zurückgibt.
Anweisungen an den Compiler, Strukturen, die für alle oder die meisten in der Sprache erstellten Programme usw. erforderlich oder empfohlen sind, können weggelassen werden. Zum Beispiel #include
und using
Richtlinien (aber nicht #define
) in C-Stil Sprachen, entfernt werden #/usr/bin/perl -options
in Perl, und
Module Module1
Sub Main()
End Sub
End Module
in VB.NET zum Beispiel. Wenn Sie Namespaces importieren oder Include-Anweisungen hinzufügen, notieren Sie diese bitte in Ihrer Antwort.
Ist das jetzt schwer genug? :) :)
>
fängt das Licht ein, das direkt daran vorbeigeht. Und wenn dasw
von oben durchgehtR
, sollte das auchb
von unten gehen. Schließlich (glaube ich) liegen Sie falsch, wenn sich Strahlen nicht kreuzen. Um ein einzeiliges Beispiel zu geben, wofür wäre die richtige Ausgabe@R> B@
?@
das unten links Licht in alle vier Richtungen aussendet, nicht wahr ? Insbesondere strahlt es das ausw
. Und ich habe keinen Abstand gebrochen, zumindest nicht wie in Chrom gerendert. Wenn ich direkt daran vorbeikomme, kann meine Bearbeitung dies klären.Antworten:
Python,
602559614 ZeichenBearbeiten: behoben, so dass keine nachgestellten Leerzeichen benötigt werden.
quelle
F #
quelle