Vielleicht haben Sie Jacobs Leiter in Wissenschaftsmuseen für Kinder gesehen. Wenn Sie nicht wissen, wie sie aussehen, finden Sie auf Wikimedia Commons mehrere Bilder und Videobeispiele . Die Herausforderung besteht heute darin, eine animierte ASCII-Version des elektrischen Gadgets zu erstellen. Am Ende sollte es ungefähr so aussehen:
Leiteraufbau
Hier ist die Grundform einer Leiter mit einer Höhe ( H ) von 6:
6 \ /
5 \ /
4 \ /
3 \ /
2 \ /
1 \ /
0 ¯¯
Die Zahlen auf der linken Seite geben lediglich die Zeilennummer für dieses Beispiel an und sollten nicht in die Ausgabe einbezogen werden. Wir verweisen auf eine bestimmte Zeile mit der Nummer ( R ). Zeile 0 ist der Boden ¯¯
. Jede Reihe 1 bis H besteht aus vier Teilen:
- Ein Leerzeichen
(U + 0020) wird ( H - R ) Mal wiederholt
- Ein Schrägstrich
\
(U + 005C) - Ein Leerzeichen
(U + 0020 ) wird zweimal (2 * R ) wiederholt
- Ein Schrägstrich
/
(U + 002F)
Zeile 0 ist identisch, außer dass beide Schrägstriche durch ein Macron ¯
(U + 00AF) ersetzt werden. Das nachfolgende Leerzeichen am Ende jeder Zeile oder unterhalb der Leiter ist in Ordnung. Führendes Leerzeichen ist das nicht.
Lichtbogenbau
Sobald die Leiter erstellt ist, können Sie Bögen zwischen der linken und rechten Seite erstellen. Ein Bogen befindet sich vollständig in einer Reihe und ersetzt die Leerzeichen zwischen dem führenden \
und dem nachfolgenden Bogen /
. Daher hat Zeile 2 4 Zeichen in seinem Bogen, Zeile 3 6 usw. Jeder Bogen wird nach folgenden Regeln erstellt:
- Die einzigen zulässigen Zeichen sind
_/¯\
(U + 005F, U + 002F, U + 00AF, U + 005C). - Um ein glattes Aussehen zu gewährleisten, jede
¯
oder/
werden muß , gefolgt von einem¯
oder\
- Um ein glattes Aussehen zu gewährleisten, jede
_
oder\
werden muß , gefolgt von einem_
oder/
- Die beiden obigen Regeln gelten auch für die Kanten der Leiter
- Die drei obigen Regeln bedeuten effektiv, dass das erste Zeichen im Bogen
_
oder sein muss/
und das letzte Zeichen_
oder sein muss\
(\¯\_//
ist an beiden Enden ungültig, aber\_/¯\/
in Ordnung). - Es muss eine Chance ungleich Null geben, dass jedes zulässige Zeichen an einem bestimmten Punkt auftritt
- Jeder Lichtbogen ist unabhängig von jedem anderen Lichtbogen
Animation
Die Lebensdauer eines einzelnen Bogens wird erstellt, indem er in Zeile 1 gestartet und um eine Zeile nach oben "verschoben" wird, bis er den oberen Rand erreicht. Erstellen Sie zuerst einen Bogen in Zeile 1, setzen Sie ihn dann auf Leerzeichen zurück und erstellen Sie einen Bogen in Zeile 2 usw. Zeigen Sie unter Berücksichtigung der Anzahl der zu zeigenden Bögen ( N ) die gesamte Lebensdauer dieser vielen Bögen nacheinander anhand der folgenden Richtlinien an:
- Es sollte immer nur ein Bogen "lebendig" sein. Der nächste Lichtbogen kann erst beginnen, wenn der aktuelle den oberen Punkt erreicht und dann erlischt.
- Jede Reihe der Lebensdauer des Bogens sollte für genau ein Bild angezeigt werden
- Es sollte nur ein Frame der Basisleiter (ohne Bögen) vorhanden sein, bevor ein neuer Bogen beginnt (optional vor dem ersten Bogen).
- Die Animation sollte die volle Lebensdauer von N Bögen zeigen. Wenn N = 0 ist, sollten zufällige Bögen für immer animiert werden, bis sie gestoppt werden.
- Wenn N > 0, können Sie die Animation immer noch in einer Endlosschleife abspielen, es muss sich jedoch immer wieder um eine Schleife mit denselben Bögen handeln. (Das Beispiel-GIF oben in diesem Beitrag hat H = 6 und N = 3, aber es wird für immer wiederholt.)
- Die Animation sollte an Ort und Stelle erfolgen. Das heißt, jeder Frame sollte den nächsten Frame vollständig überschreiben und sich an derselben Stelle befinden.
- Die Länge jedes Frames kann beliebig sein, aber für einen Menschen einsehbar sein (IE, verwenden Sie Ihren gesunden Menschenverstand: 0,01 s / Frame und 30 s / Frame sind inakzeptabel.)
Input-Output
- Eingabe und Ausgabe können in jedem Standardformat erfolgen
- Sie können ein GIF exportieren, Text auf den Bildschirm schreiben, eine einzelne Datei für jeden Frame ausgeben oder auf jede andere sinnvolle Weise
- Standardlücken sind verboten
- Die Höhe der Leiter H ist eine positive ganze Zahl
- Die Anzahl der Bögen, die N anzeigen sollen, ist eine nicht negative ganze Zahl
- Sowohl H als auch N werden als Eingaben in einer von Ihnen gewählten Reihenfolge verwendet. (Bitte geben Sie die Reihenfolge in Ihrer Antwort an.)
Gewinnbedingung
Das ist Code-Golf, also gewinnt der kürzeste Code.
the first character in the arc must be _ or / and the last character must be _ or \
undThere must be a non-zero chance for each allowable character to occur at a given point
. Um symmetrisch zu sein, müssten sowohl das erste als auch das letzte Zeichen_
jedes Mal sein, was bedeutet, dass keine Chance besteht, dass entweder/
"\" oder "" auftritt.0xAF
befindet»
.Antworten:
Python 2 ,
287271270276275 BytesProbieren Sie es online!
Löscht den Bildschirm auf tio nicht, funktioniert aber in einer Konsole.
Gif davon läuft:
quelle
print'\n'*99
stattdessenos.system('cls')
denos
Import verlieren . Funktioniert immer noch nicht mit TIO, funktioniert aber sowohl auf Windows- als auch auf Linux-Konsolen.JavaScript (ES6), 245 Byte
Die Byteanzahl setzt die ISO-8859-1-Codierung voraus.
quelle
A=x=>[...Array(x)].map;
zu Beginn beide Verwendungen definiert und ersetzt werden.map
, das ist nur eine Eigenschaft vonArray.prototype
und keine Verwendung für sich. Ich habe versucht, Arbeitsversionen, aber sie alle kamen länger als 245 Bytes.C (gcc) , 406 Bytes
Probieren Sie es online!
Beschreibung:
quelle
\--/
. Das ist wahrscheinlich eine einfache Lösung. Können Sie ein GIF davon erfassen und veröffentlichen, wenn Sie in Xterm arbeiten?PowerShell ,
347319 ByteProbieren Sie es online! Konnte nicht
$args
schön spielen, also ruft der Link die Funktion auf, ohne die Konsole zu löschen.Ungolfed
quelle
$l=(($h..1)|%{"$(" "*($h-$_))\$(" "*$_*2)/"})+"$(" "*$h)¯¯"
for($x=0;$x-ne$n;$x++)
kannfor($x=0;$x++-ne$n;)
. Ich habe es auf 324 Bytes (321 Zeichen) reduziert. Tipps zum Golfen in <allen Sprachen> und Tipps zum Golfen in PowerShell könnten ebenfalls interessant sein.sleep 1
spart ein wenig (standardmäßig -seconds), ist aber ziemlich langsam, aber immer noch vernünftig,sleep -m 99
ist ziemlich schnell, aber auch vernünftig. Spart je nach Belieben 5/1 Bytes. Ich habe Kevins Versuch nicht überprüft, aberfunction
esfilter
ist auch ein freies Byte.Ruby , 293 Bytes
Probieren Sie es online!
Ich arbeite unter Windows und drucke nur viele "\ n", um die Konsole zu leeren. Nimmt 2 Argumente
n
undh
als zwei Zeilen auf stdin.quelle