Diese Herausforderung ist zu Ehren der klebrigen Weihnachtsbeleuchtung in meinem Haus.
Die Herausforderung besteht darin, eine grafische Ausgabe zu erstellen, die die Dekoration in "Echtzeit" zeigt.
Das Video (GIF oder ein anderes Format) hat n-mal-m vertikale und horizontale "Lichter". 5 <= m, n <= 40 . Die Bildgröße und Auflösung können in Abhängigkeit von n und m variieren , müssen jedoch mindestens 50 x 50 Pixel für n, m = 5 betragen (Vektorgrafiken sind in Ordnung). Ein Bild mit n=6
und m=5
sieht ungefähr so aus:
Die Verzierung:
Farben:
Alle Leuchten haben eine der folgenden 6 RGB-Farben {255,0,0}
, {0,255,0}
, {0,0,255}
, {255,255,0}
, {0,255,255}
und {255,0,255}
.
Animation:
n
undm
werden als Eingabe für jedes vernünftige Format und in der von Ihnen gewünschten Reihenfolge verwendet- Das Bild ändert sich bei jedem
dt = 25 ms
. Abweichungen sind in Ordnung, wenn sie auf "äußere Faktoren" zurückzuführen sind, z. B. Einschränkungen im Interpreter, langsame Computer usw.- Wenn es nicht möglich ist , den Zeitschritt manuell einzustellen, wird der Standardzeitschritt akzeptiert.
- Alle Lichter leuchten rot (
{255,0,0}
) beit=0
. - Es besteht immer eine Wahrscheinlichkeit von 5%, dass das erste Licht (oben links) die Farbe ändert. Alle Farben (mit Ausnahme der aktuellen Farbe) sollten gleich wahrscheinlich sein.
Jedes Licht (außer dem ersten) erhält die Farbe des Lichts auf der linken Seite. Befindet sich das Licht ganz links, erhält es die Farbe des Lichts ganz rechts in der Zeile darüber. Die Lichter sind wie unten gezeigt nummeriert. Lichtnummer
k
erhält die Farbe der Lichtnummerk-1
.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Die Ausgabe sollte theoretisch für immer laufen (es sei denn, Ihre Sprache / Ihr Interpreter hat eine Einschränkung, die dies verhindert).
- Bitte geben Sie eine Probe von mindestens 5 Sekunden an, vorzugsweise mehr in der Antwort (dies ist eine Ermutigung, keine Voraussetzung). (Ein Link zu TIO oder ähnlichem ist natürlich auch in Ordnung: D)
- Rahmen, Achsen, Gitterlinien usw. werden akzeptiert.
6-mal-5
15-mal-30
r,g,y,b,
usw. sind in mehreren Sprachen kürzer.drawnow
als ich dies in MATLAB implementiert habe, da das Ergebnis zu langsam war. Ich denke, die Antwort muss lauten: Wenn es sich um eine Entwurfsentscheidung handelt, bei der der Interpreter eine feste Mindestzeitauflösung von> = 25 ms hat, ist dies in Ordnung. Wenn dies auf eine schlechte / einfache Implementierung, einen überlasteten / langsamen Online-Interpreter usw. zurückzuführen ist, ist dies nicht in Ordnung.Antworten:
JavaScript / CSS / HTML, 436 Byte
quelle
Mathematica,
186161158 BytesErläuterung
Erstellen Sie die erste Tafel in 1D, gefüllt mit Rot. Bewahren Sie das in
b
.Pause für 25ms
Wenn eine (pseudo-) zufällige reelle Zahl kleiner als 0,06 ist, ersetzen Sie das erste Element von
b
durch eine zufällige Stichprobenlänge3
der Liste{1,1,0,0}
. (dh eines von{1, 1, 0}, {1, 0, 1}, {1, 0, 0}, {0, 1, 1}, {0, 1, 0}, {0, 0, 1}
)Zyklisch nach rechts drehen.
Ändern Sie den ersten Zellenwert in den zweiten Zellenwert (dh machen Sie die Verschiebung der ersten Zelle rückgängig)
Einteilung
b
in (Höhe).Machen Sie daraus ein dynamisches (ständig aktualisierendes) Bild, dessen Breite 50 (Breite) beträgt.
Mobilfunkversion (186 Bytes)
Beispielausgabe (Eingänge: 16, 10)
quelle
MATLAB,
255210 BytesDies ist mein erstes Golfspiel, daher müssen wahrscheinlich Verbesserungen vorgenommen werden.
Danke an Luis, der mir geholfen hat, 45 Bytes zu sparen :)
Erläuterung:
Leider wird die Animation dadurch nicht gespeichert, sondern nur ausgeführt. Um es zu speichern, benötige ich entweder ein Screen-Capture-Programm oder schreibe alles mit
imwrite
. Stattdessen stelle ich zwei Bilder zur Verfügung, die unterschiedliche Zeiten zeigen, zn=15,m=30
.quelle
dec2bin([4 2 1 6 3 5])-48
statt[1 0 0;0 1 0;0 0 1;1 1 0; 0 1 1;1 0 1]
..95
statt0.95
. Sie können auch ersetzen.95
durch.94
und loszuwerdenk=k(k~=r);
(weil 0,94 + 0,06 / 6 = 0,95; meine Antwort für eine ausführlichere Erklärung sehen)c=dec2bin(1:6)-48
da die Reihenfolge keine Rolle spieltMATL ,
5247 BytesDie Eingabe ist ein Array
[ncols nrows]
. Ausgabe ist eine Zahl mit Vektorgrafiken.Beispiellauf für 15 Spalten × 10 Reihen:
Wie es funktioniert
Die Pausenzeit wurde auf 15 ms eingestellt (für die gleiche Bytezahl wie 25 ms), um die Verarbeitungszeit auszugleichen.
Um die Farbe mit 19/20 Wahrscheinlichkeit zu behalten (mit 1/20 zu ändern), gehen wir wie folgt vor:
Somit beträgt die Wahrscheinlichkeit, die Farbe zu behalten, 47/50 + 3 / (50 * 6) = 19/20.
quelle
MATLAB,
153147 BytesHinweis : Das gezeigte GIF ist von der älteren Version, was nett ist, da es keine Achsen anzeigt (siehe Bearbeitungsverlauf), aber aufgrund der Implementierung von extrem langsam war
imshow
. Für die aktuelle Version zeigen die MATLAB-Antwort von Chelsea G. oder die MATL-Antwort von Luis Mendo dasselbe Ergebnis wie meine aktuelle Version.Die Größe wird als
2x1
Vektor verwendet, nennen Sie also zB:Diese Antwort nutzt die Feinheiten der MATLAB-Sprache aus. Beispielsweise
x
wird alsm x n
Nullmatrix initialisiert , die sogenannte lineare Indizierung ermöglicht jedoch eine zirkuläre Verschiebung mit eindimensionalen Indizes. Eine schwache Eingabe ermöglicht die Multiplikation mit logischen Werten, sodassif
Aussagen vermieden werden (ein Trick, den ich in den Tagen der Programmierung auf einem TI-84-Rechner häufig angewendet habe). Auch wenn eine Farbkarte zeilenweise gelesen wird, wird sie in MATLAB als normale Matrix behandelt, sodasseye(3)
Rot, Grün und Blau sowie1-eye(3)
die anderen drei Farben erstellt werden können. Ein einfachesreshape
bringt den linearen Vektor zurück in die Matrixform, die mit den gewünschten Farben abgebildet wirdind2rgb
. Endlich,imagesc
, zeigt das Bild in der Standardgröße (die für die Anforderungen groß genug ist). Wie es der Zufall wollte,imagesc
keine Werte dagegen außerhalb des angegebenen Bereichs zu sein, soeye
kann die Matrix , da beide zu initialisieren1
und0
werden rot betrachtet.quelle
Python 3.6 (316 Bytes)
Verwenden von ANSI-Farbcodes und den neu formatierten Zeichenfolgenliteralen von Python 3.6 ( PEP 489 ) (the
f"{X}"
magic).Ansonsten ist es nur ziemlich einfaches, aber verschleiertes Python. Breite und Höhe werden in der Befehlszeile als Argumente übergeben.
quelle
w,h=map(int,sys.argv[1:])
, das Entpacken funktioniert mit jedem iterablen (der richtigen Größe), der Aufruf der Liste ist überflüssig."\x1b["
=>"\33["
(Verwenden von Oktal anstelle von Hex-f""
Escape-Zeichen) , dann wird es durch die X-Abkürzung und die Format-Zeichenfolgen tatsächlich länger (und wenn Sie es loswerden, erhalten Sie Kompatibilität mit jedem Python3). (Dadurch wird es auf 301 Bytes reduziert).{x}
einmal ... aber du gewinnst immer noch damit, es loszuwerdenX
.