Diese Herausforderung ist von dieser Antwort beim Ask Ubuntu Stack Exchange inspiriert .
Intro
Erinnern Sie sich an den Windows ME-Bildschirmschoner mit den Pipes ? Zeit, die Nostalgie zurückzubringen!
Herausforderung
Sie sollten ein Programm oder eine Funktion schreiben, die eine ASCII-Darstellung des Bildschirmschoners ausgibt. Im Bildschirmschoner sollte sich eine einzelne Pipe befinden, die in zufälligen Richtungen wächst.
Der Rohranfang wird zufällig an einem der Ränder des Bildschirms platziert, und das Rohrstück sollte senkrecht zum Rand stehen (die Ecken der ersten Rohre können entweder horizontal oder vertikal sein). Mit jedem Tick wächst die Pfeife in die Richtung, in die sie weist (horizontal / vertikal), 80%
oder biegt bei Gelegenheit um eine Ecke 20%
.
Rohrdarstellung
Zum Erstellen der Pipe werden 6 Unicode-Zeichen verwendet
─ \u2500 horizontal pipe
│ \u2502 vertical pipe
┌ \u250C upper left corner pipe
┐ \u2510 upper right corner pipe
└ \u2514 lower left corner pipe
┘ \u2518 lower right corner pipe
Eingang
Das Programm / die Funktion nimmt 3 Eingabewerte an, die über Funktionsparameter erfasst oder an den Benutzer weitergeleitet werden können.
- Anzahl der Zecken
- Bildschirmbreite
- Bildschirmhöhe
Anzahl der Zecken
Für jeden Tick wird ein Stück Pfeife zum Bildschirm hinzugefügt. Pipes überschreiben alte Pfeifenteile, wenn sie an derselben Position erscheinen.
Nehmen Sie zum Beispiel einen Bildschirm der Größe 3x3
ticks == 3
─┐
┘
ticks == 4
─┐
└┘
ticks == 5
│┐
└┘
Immer wenn eine Pipe den Bildschirm verlässt, wie im letzten Beispiel mit 5 Ticks, erscheint eine neue Pipe an einer zufälligen Grenze. Beispielsweise:
ticks == 6
│┐
└┘
─
Das neue Rohr sollte eine Chance von 50% haben, horizontal oder vertikal zu sein.
Bildschirmbreite / -höhe
Die Bildschirmbreite und -höhe können zu einem einzigen Wert kombiniert werden, wenn dies in der Sprache Ihrer Wahl bevorzugt wird. Die Breite und Höhe des Bildschirms hat immer einen Mindestwert von 1 und einen Höchstwert von 255. Wenn Ihre Sprache eine Konsole oder einen Ausgabebildschirm unterstützt, der kleiner als ein Zeichenraster von 255 x 255 ist, können Sie davon ausgehen, dass Breite und Höhe dies auch tun Überschreiten Sie niemals die Grenzen Ihrer Konsole. (Beispiel: Windows 80x25 cmd-Fenster)
Ausgabe
Die Ausgabe Ihres Programms / Ihrer Funktion sollte auf dem Bildschirm gedruckt oder von einer Funktion zurückgegeben werden. Für jeden Programmlauf sollte ein anderer Satz von Pipes generiert werden.
Testfälle
Die folgenden Testfälle sind alle zufällige Beispiele für gültige Ausgaben
f(4, 3, 3)
│
─┘
│
f(5, 3, 3)
│
─┘┌
│
f(6, 3, 3)
─│
─┘┌
│
f(7, 3, 3)
──
─┘┌
│
Je mehr Zecken aufgetreten sind, desto schwieriger wird es natürlich, die Gültigkeit Ihres Programms zu beweisen. Aus diesem Grund wird es bevorzugt, ein GIF Ihrer Ausgabe zu veröffentlichen. Wenn dies nicht möglich ist, veröffentlichen Sie bitte eine Version Ihres Codes, die das Drucken der Ausgabe umfasst. Offensichtlich wird dies nicht auf Ihre Punktzahl angerechnet.
Regeln
- Dies ist Code-Golf , die kürzeste Anzahl von Bytes gewinnt
- Es gelten Standardlücken
- Wenn Sie die Unicode-Pipe-Zeichen in Ihrem Quellcode verwenden, können Sie sie als ein einzelnes Byte zählen
Dies ist eine ziemlich schwierige Herausforderung, die möglicherweise auf viele kreative Arten gelöst werden kann. Sie werden aufgefordert, eine Antwort in einer ausführlicheren Sprache zu verfassen, obwohl es bereits Antworten in kurzen Esolangs gibt. Dadurch wird ein Katalog mit kürzesten Antworten pro Sprache erstellt. Bonus Upvotes für ausgefallene farbige Gifs;)
Viel Spaß beim Golfen!
Haftungsausschluss: Ich bin mir bewusst, dass Unicode-Zeichen kein ASCII-Zeichen sind, aber mangels eines besseren Namens nenne ich es einfach ASCII-Kunst. Vorschläge sind willkommen :)