Die Herausforderung besteht darin, ein zweidimensionales Raytracing-Programm auf Textbasis zu implementieren.
Weiße Lichtquellen sind @Symbole. R, GUnd Bsind Lichtfilter. /und \sind Spiegel mit 80% Reflexionsvermögen. ?ist ein Lichtsensor. >, <, ^Und Vin 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 #includeund usingRichtlinien (aber nicht #define) in C-Stil Sprachen, entfernt werden #/usr/bin/perl -optionsin 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 das wvon oben durchgeht R, sollte das auch bvon 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 aus w. Und ich habe keinen Abstand gebrochen, zumindest nicht wie in Chrom gerendert. Wenn ich direkt daran vorbeikomme, kann meine Bearbeitung dies klären.