Schreiben Sie ein Programm, das ein Array von Binärwerten liest , die einen Würfel darstellen, der aus kleineren Würfeln besteht. Jeder Wert gibt an, ob an der angegebenen Position ein Voxel (kleiner Würfel) vorhanden ist oder nicht. Das Programm muss das angegebene Array als ASCII-Grafik ausgeben (dh über die Konsole ausgeben oder in eine Datei schreiben).
Beispiele
Betrachten wir die folgenden Arrays:
[
[[0,0],
[1,0]]
[[1,1],
[1,0]],
]
[
[[0,0],
[0,0]]
[[1,1],
[1,1]],
]
In diesem Fall sollte die Ausgabe so aussehen (sie sieht hier nicht so gut aus wie in Code-Editoren / -Konsolen mit weniger vertikalem Raum):
+----+
/ /|-+----+
+----+ | /|
| | +----+ |
| | | | +
+ + | |/
| | +----+
| |/
+----+
+----+----+
/ /|
+ + |
/ / +
+----+----+ /
| | +
| |/
+----+----+
Ein Beispiel für eine Eingabezeichenfolge finden Sie hier (Pastebin). Ein neues Beispiel für eine Eingabezeichenfolge finden Sie hier.
Spezifikationen des ASCII
Jede Ecke eines Voxels wird durch ein dargestellt +
, solange eine Kante zu ihm führt. Sie +
werden auch gezeichnet, wenn es eine gerade Kante gibt, die länger als eine Einheit ist. Es gibt drei Arten von Kanten: Die horizontale von links nach rechts ----
, die horizontale von hinten nach vorne /
und die vertikale
|
|
Jedes davon muss mit einem +
(solange sichtbar) enden . Die Kanten werden nicht gezeichnet, wenn sie eine ebene Ebene in zwei oder mehr Teile unterteilen (im Gegensatz +
zu den oben angegebenen Kanten). Strukturen, die hinter anderen verborgen sind, dürfen nicht gezeichnet werden.
Die 'Zeichnung' ist im Grunde genommen eine Parallelprojektion, so dass nur die obere, rechte und vordere Seite sichtbar sind - immer aus dem gleichen Winkel.
Einzelheiten
- 1. Dimension: Schicht für Schicht von oben nach unten
- 2. Dimension: Reihe für Reihe zurück (am weitesten entfernt) nach vorne (am nächsten)
- 3. Dimension: Voxel in jeder Reihe von links nach rechts
Ob Sie die Konsole verwenden oder Dateien als Ein- und Ausgabe lesen, bleibt Ihnen überlassen. Bitte teilen Sie uns Ihren Code mit / wie Sie darauf zugegangen sind.
Beurteilen
Dies ist Codegolf, daher gewinnt die geringste Anzahl von Bytes. Dies schließt NUR den Teil ein, der tatsächlich die Arbeit erledigt. Wenn Sie Bytes zählen, können Sie die Eingabe bereits als analysiert und in einer Variablen gespeichert betrachten, und Sie müssen die Ausgabezeichenfolge in einer Variablen speichern, um sie drucken zu können. Das Parsen und die Ausgabe selbst zählen nicht.
(Und ich werde Einsendungen mit kreativen Beispielen belohnen =)
Dies wurde von Robs Puzzleseite inspiriert .
Lua (1442 Bytes)
Bonus Animationen! :)
Wenn Sie eine kühler Voxel Kunst im gleichen Format wie die Beispiele haben, verknüpfen Sie es in den Kommentaren und ich werde eine Animation macht aus
7x7x7
12x12x12
Dies ist mein erster Code Golf, so dass sie ziemlich chaotisch und ich plane , auf der Verbesserung der oder in eine andere Sprache portieren.
Hier ist, was ich gerade bei knapp 2,5 kB kaum Golf habe (gerade entferntes Einrückungs-Leerzeichen an dieser Stelle, ich werde später weiter machen)
Hier ist die jetzt ~ 1.4kB große und minimierte Version (beachten Sie, dass die "a" -Tabelle in der ersten Zeile der Platzhalter für die Voxelmatrix ist):
Bearbeiten : Hier ist die ursprüngliche (über 3 kB) ungolfed-Version, einschließlich meiner Änderungen zum Erstellen der Animation (wenn Sie sie selbst ausführen und die Animation wünschen, ändern Sie
false
den unteren Rand des Codes intrue
.Hier ist ein Codebeispiel, mit dem die Voxelmatrix aus einer Zeichenfolge für eine 3x3x3-Voxelmatrix gefüllt wird. (Es wird eine beliebige Zeichenfolge in einem ähnlichen Format akzeptiert, aber stellen Sie sicher, dass es sich um einen Würfel
handelt, da sonst möglicherweise Probleme auftreten.) Fügen Sie dazu diesen Block direkt nach der ersten Zeile ein
local v = {}
Hier ist die Ausgabe des gegebenen 12x12x12-Voxelmusters : (und ja, es sieht auf einem normalen Konsolen- / Textanzeigegerät besser aus, hier ist ein bisschen zu viel vertikaler Abstand vorhanden)
Hier ist die Ausgabe des 7x7x7-Beispiels
quelle