Erstellen Sie bei drei Ganzzahlen> = 2 einen ASCII-Würfel in einer orthogonalen (Kabinett-) Projektion. Die drei Ganzzahlen stehen für Höhe, Breite und Tiefe (gemessen in sichtbaren Zeichen) einschließlich der Ecken. Die Ecken sollten 'o's' oder '+' sein, freie Wahl.
w: 10, h: 5, d: 4 So ergibt sich:
o--------o
/ /|
/ / |
o--------o |
| | o
| | /
| |/
o--------o
Um dies etwas zu erschweren, können nun alle Gesichter entweder fest, transparent oder fehlend sein. Wir bestellen die Gesichter so:
o--------o
/ /|
/ 2 / |
o--------o 3|
| | o
| 1 | /
| |/
o--------o
---
|2|
-------
|5|1|3|
-------
|4|
---
|6|
---
Und liefern Sie eine Liste von Token, S, T oder M. Das ursprüngliche Beispiel lautet also:
w 10
h 5
d 4
S S S S S S
o--------o
/ /|
/ / |
o--------o |
| | o
| | /
| |/
o--------o
Wenn ein Gesicht transparent ist, können wir alles sehen, was dahinter steckt:
T S S S S S
o--------o
/ /|
/ / |
o--------o |
| o-----| o
| / | /
|/ |/
o--------o
T T T T T T
o--------o
/| /|
/ | / |
o--------o |
| o-----|--o
| / | /
|/ |/
o--------o
Bei fehlenden Flächenpaaren sind benachbarte Kanten oder Ecken nicht mehr sichtbar:
M M S S S S
o--------o
/| /|
/ | / |
o | o |
| o-----| o
| / | /
|/ |/
o--------o
M M S S M S
o--------o
| /|
| / |
| o |
o-----| o
/ | /
/ |/
o--------o
Codegolf, der kürzeste Code gewinnt! Nachgestellte Leerzeichen und Zeilenumbrüche sind in Ordnung. Sie können die Eingabemethode und die Eingabereihenfolge frei wählen.
you're free to choose input method and input order
. Und wie nichts anderes sagt, kann jede der Standard-Eingabe- / Ausgabemethoden verwendet werden.Antworten:
Kohle ,
190181 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 9 Bytes durch Optimierung meiner Bedingungen gespeichert. Charcoal hat kein
else
Token, daher habenif
Befehle immer zwei Alternativen, es sei denn, sie befinden sich am Ende eines Blocks oder Programms. Um dies zu vermeiden, verwende ichfor (<bool>)
stattdessenif (<bool>)
einen ähnlichen Effekt, wenn der Ausdruck nur die Werte 0 oder 1 haben kann, aber ein Byte speichert. (Um dies zu erreichen , ich hatte die Ausdrücke zu ändern , so dass sie immer wahr wären , wenn der Körper benötigte ausgeführt werden.) Ich optimize auch in der Lage warif (<bool>) for (<int>)
infor (And(bool, int))
.quelle
X * Y * Z
ASCII-Würfel zu erstellen.JavaScript (ES6),
318314308 BytesNimmt Breite, Höhe und Tiefe als Ganzzahlen und die Gesichter als Zeichenfolge.
Wie?
Die Funktion M () verarbeitet einen gegebenen Rückruf F in einem gegebenen Bereich [0 ... n] .
Die Variable a enthält ein flaches Array, das ein Raster der Größe (w + d) x (h + d-1) darstellt . Es ist anfangs mit Leerzeilen gefüllt, die mit Zeilenumbrüchen abgeschlossen sind.
Mit der Funktion D () wird eine Fläche des Quaders 'gezeichnet'.
Die zwei niedrigstwertigen Bits des Parameters t enthalten den Gesichtstyp:
Die Bits 2 bis 4 enthalten den 0-basierten Gesichtsindex.
Gesichter werden in der folgenden Reihenfolge gezeichnet:
Demo
Code-Snippet anzeigen
quelle
SOGL V0.11 ,
200194193192190 BytesÜbernimmt die Eingabe in der Reihenfolge
Gebunden!
Probieren Sie es hier aus! (komprimierter Wert geändert, um V0.12-kompatibel zu sein)
quelle