Écrivez un programme qui lit un tableau de valeurs binaires qui représentent un cube , composé de cubes plus petits. Chaque valeur indique s'il y a un voxel (petit cube) présent dans la position donnée ou non. Le programme doit sortir le tableau donné sous forme de graphique ASCII (cela signifie sortir via la console ou écrire dans un fichier).
Exemples
Considérons les tableaux :
[
[[0,0],
[1,0]]
[[1,1],
[1,0]],
]
[
[[0,0],
[0,0]]
[[1,1],
[1,1]],
]
Dans ce cas, la sortie devrait ressembler à ceci (elle ne semble pas aussi bonne ici que dans les éditeurs de code / consoles avec moins d'espace vertical):
+----+
/ /|-+----+
+----+ | /|
| | +----+ |
| | | | +
+ + | |/
| | +----+
| |/
+----+
+----+----+
/ /|
+ + |
/ / +
+----+----+ /
| | +
| |/
+----+----+
Spécifications de l'ASCII
Chaque coin d'un voxel est représenté par un +
tant qu'il y a un bord qui y mène. Ils +
sont également dessinés lorsqu'il y a un bord droit de plus d'une unité de long. Il existe trois types d'arêtes: l'horizontale de gauche à droite ----
, l'horizontale de l'arrière vers l'avant /
et la verticale
|
|
Chacun de ceux-ci doit se terminer par un +
(aussi longtemps visible). Les arêtes ne seront pas dessinées lorsqu'elles subdiviseront un plan plan en deux ou plusieurs pièces (contrairement à la +
relation avec les arêtes comme indiqué ci-dessus). Les structures cachées derrière les autres ne doivent pas être dessinées.
Le «dessin» est essentiellement une projection parallèle de sorte que seuls les côtés supérieur, droit et avant sont visibles - toujours sous le même angle.
Détails
- 1ère dimension: couche par couche du haut vers le bas
- 2e dimension: rang par rang en arrière (le plus loin) vers l'avant (le plus proche)
- 3ème dimension: voxels dans chaque rangée de gauche à droite
Que vous utilisiez la console ou que vous lisiez des fichiers en entrée et en sortie dépend de vous. Veuillez nous parler de votre code / comment vous l'avez abordé.
Juger
Il s'agit de codegolf donc le plus petit nombre d'octets gagne. Cela inclut UNIQUEMENT la partie qui fait le travail - lors du comptage des octets, vous pouvez considérer l'entrée déjà comme analysée et enregistrée dans une variable et vous devez avoir la chaîne de sortie enregistrée dans une variable, prête à être imprimée. L'analyse et la sortie elle-même ne comptent pas.
(Et je voterai des soumissions avec des exemples créatifs =)
Cela a été inspiré par la page Puzzle de Rob .
Lua (1442 octets)
Animations bonus! :)
Si vous avez un art de voxel cool dans le même format que les exemples, liez-le dans les commentaires et j'en ferai une animation
7x7x7
12x12x12
C'est mon premier code de golf, donc c'est assez compliqué et je prévois d'améliorer ou le porter dans une autre langue.
Voici ce que j'ai, en ce moment à un peu moins de 2,5 Ko à peine golfé (je viens de supprimer les espaces blancs d'indentation à ce stade, je continuerai plus tard)
Voici la version golfée et minifiée de ~ 1,4 Ko (notez que le tableau "a" sur la première ligne est l'espace réservé pour la matrice de voxels):
Edit : Voici la version originale (plus de 3 Ko) non golfée, y compris mes modifications pour faire l'animation (si vous l'exécutez vous-même et que vous voulez l'animation, changez
false
le bas du code entrue
.Voici un exemple de code qui remplira la matrice de voxel à partir d'une chaîne pour une matrice de voxel 3x3x3. (Cela prendra n'importe quelle chaîne dans un format similaire, mais assurez-vous qu'il s'agit d'un cube ou les choses vont probablement se casser.)
Pour l'utiliser, insérez ce morceau juste après la première ligne
local v = {}
Voici la sortie du modèle de voxel 12x12x12 donné : (et oui, il semble mieux sur une console normale / appareil de visualisation de texte, il y a un peu trop d'espacement vertical ici)
Voici la sortie de l'exemple 7x7x7 ici
la source