Escriba un programa que lea una matriz de valores binarios que represente un cubo , que consta de cubos más pequeños. Cada valor dice si hay un voxel (cubo pequeño) presente en la posición dada o no. El programa debe generar la matriz dada como un gráfico ASCII (eso significa salida a través de la consola o escribir en un archivo).
Ejemplos
Consideremos las siguientes matrices :
[
[[0,0],
[1,0]]
[[1,1],
[1,0]],
]
[
[[0,0],
[0,0]]
[[1,1],
[1,1]],
]
En este caso, la salida debería verse así (no se ve tan bien aquí como en editores de código / consolas con menos espacio vertical):
+----+
/ /|-+----+
+----+ | /|
| | +----+ |
| | | | +
+ + | |/
| | +----+
| |/
+----+
+----+----+
/ /|
+ + |
/ / +
+----+----+ /
| | +
| |/
+----+----+
Especificaciones de la ASCII
Cada esquina de un vóxel está representada por un +
mientras exista algún borde que lo lleve. También +
se dibujan cuando hay un borde recto que tiene más de una unidad de largo. Hay tres tipos de aristas: la horizontal de izquierda a derecha ----
, la horizontal de atrás hacia adelante /
y la vertical
|
|
Cada uno de esos tiene que terminar en un +
(siempre visible). Los bordes no se dibujarán cuando subdividan un plano plano en dos o más piezas (a diferencia de lo que se +
refiere a los bordes como se indicó anteriormente). Las estructuras que están ocultas detrás de otros no deben dibujarse.
El 'dibujo' es básicamente una proyección paralela, por lo que solo son visibles los lados superior, derecho y frontal, siempre desde el mismo ángulo.
Detalles
- 1a dimensión: capa por capa desde la parte superior a la inferior
- 2da dimensión: fila por fila atrás (más alejado) al frente (más cercano)
- 3a dimensión: vóxeles en cada fila de izquierda a derecha
Si usa la consola o lee archivos como entrada y salida, depende de usted. Por favor , cuéntenos sobre su código / cómo se acercó a ella.
Juzgar
Este es codegolf, por lo que gana la menor cantidad de bytes. Esto incluye SOLO la parte que realmente hace el trabajo: al contar bytes, puede considerar la entrada ya analizada y guardada en una variable y debe tener la cadena de salida guardada en una variable, lista para imprimir. El análisis y la salida en sí no cuentan.
(Y votaré las presentaciones con ejemplos creativos =)
Esto fue inspirado por la página de Rob's Puzzle .
Lua (1442 bytes)
¡Animaciones extra! :)
Si tiene algún arte voxel genial en el mismo formato que los ejemplos, enlácelo en los comentarios y haré una animación con él
7x7x7
12x12x12
Este es mi primer código de golf, por lo que es bastante desordenado y planeo mejorar o portándolo a un idioma diferente.
Esto es lo que tengo, en este momento a poco menos de 2.5kB apenas golfizado (solo eliminé el espacio en blanco de sangría en este punto, continuaré más adelante)
Aquí está la versión ahora ~ 1.4kB de golf y minificada (tenga en cuenta que la tabla "a" en la primera línea es el marcador de posición para la matriz de vóxeles):
Editar : Aquí está la versión original (más de 3kB) sin golf, incluidas mis ediciones para hacer la animación (si la está ejecutando usted mismo y desea la animación, cambie
false
la parte inferior del código atrue
.Aquí hay una muestra de código que llenará la matriz de vóxel de una cadena para una matriz de vóxel de 3x3x3. (Tomará cualquier cadena en un formato similar, pero asegúrese de que sea un cubo o que las cosas probablemente se rompan).
Para usar esto, inserte este fragmento justo después de la primera línea
local v = {}
Aquí está la salida del patrón de vóxel 12x12x12 dado : (y sí, se ve mejor en una consola normal / aparato de visualización de texto, hay un poco de espacio vertical demasiado aquí)
Aquí está la salida del ejemplo 7x7x7 aquí
fuente