Desafío
Escriba un programa que tome una matriz de enteros de 11x11 y construya un edificio de bloques ASCII 3D, donde cada valor en la matriz representa la altura de una columna de bloques en las coordenadas que coinciden con la posición de la matriz. Una altura negativa es una columna "flotante": solo se ve el bloque superior.
Ejemplo
__________________
___ /\__\__\__\__\__\__\
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\__\ /\/\__\__\__\__\__\__\
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\/__/ /\/\/__/__/__/__/__/__/
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\/\__\ /\/\/\__\ /\/\/__/
1, 0, 0, 7,-7,-7,-7,-7, 7, 0, 0, \/\/\__\ /\/\/\/__/ /\/\/__/
0, 0, 0, 7,-7,-7,-7,-7, 7, 0, 0, \/\/__/ /\/\/\/\__\ /\/\/__/
0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, \/\__\ /\/\/\/\/__/ /\/\/__/
0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, \/__/ \/\/\/\/\__\_ \/\/__/
1, 0, 0, 4, 3, 2, 1, 0, 0, 0, 1, \/\/\/\/__/_\_ \/__/
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ___ \/\/\/__/__/_\_ ___
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /\__\ \/\/__/__/__/_\ /\__\
1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, \/\__\ \/__/__/__/__/ \/\__\
\/\__\_________ ______\/\__\
\/\__\__\__\__\ /\__\__\__\__\
\/__/__/__/__/ \/__/__/__/__/
Entrada
La entrada será una lista de 121 enteros, ya sea leídos de stdin (la elección del separador depende de usted) o pasados como una matriz (puede ser 1D o 2D).
Las alturas estarán en el rango de -11 a 11.
Salida
El edificio generado puede escribirse en stdout, mostrarse directamente en la pantalla o devolverse como una cadena separada por una nueva línea.
Se permiten espacios en blanco iniciales y finales.
Reglas de construcción
La forma de un bloque 3D individual se ve así:
___
/\__\
\/__/
Y un cubo de bloques de 2x2x2 se ve así:
______
/\__\__\
/\/\__\__\
\/\/__/__/
\/__/__/
Cuando los bloques se superponen, un bloque más alto tiene prioridad sobre uno más bajo, los bloques en el frente tienen prioridad sobre los que están más atrás, y los bloques a la izquierda tienen prioridad sobre los que están a la derecha. El único caso especial es que la línea superior de un bloque nunca debe sobrescribir ningún carácter que no sea espacio detrás de él.
La interpretación de las alturas de columna se puede explicar mejor mirando una representación 2D desde el lado.
HEIGHT: 1 2 3 -3 -2 -1
__ __
__ |__| |__| __
__ |__| |__| |__| __
|__| |__| |__| |__|
Casos de prueba
Si desea probar su solución con algunas entradas más, he reunido un par de casos de prueba aquí .
Victorioso
Este es el código de golf , por lo que gana el envío más corto (en bytes).
Respuestas:
Carbón ,
706968 bytesPruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Lea la matriz, divida cada línea en comas y convierta a entero, pero también invierta cada línea, ya que queremos dibujar de derecha a izquierda para que las columnas de la izquierda sobrescriban las columnas de la derecha. (Otras dimensiones ya han deseado el comportamiento de sobrescritura).
Pase por i) las líneas superiores y los cuerpos k) la altura l) las filas m) las columnas. (Recorrer las primeras líneas superiores y luego los cuerpos evita sobrescribir los cuerpos con las líneas superiores).
Salta a la posición del cubo.
Obtener la altura en la fila y columna actuales.
Pruebe si se debe dibujar un cubo a esta altura para esta fila y columna.
Dibuja el cuerpo o la parte superior del cubo.
fuente
3
a a33
, solo obtengo 11 bloques en la torre. En general, las torres parecen estar limitadas a las 11. ¿Cómo sucede eso?F¹¹F¹¹F¹¹
no era una pista ...C,
376350313309285 bytes¡Gracias a @Jonathan Frech por guardar cuatro bytes!
Pruébalo en línea!
Desenrollado:
fuente
26*66
puede ser1716
?*s==32
->*s<33
.for(e=k=1;e;++k)for(e=
->for(k=1;e;++k)for(e=
.#define B b(...)&++e
->#define B++e&b(...)
(suponiendob
que no depende dee
, lo que creo que no).JavaScript (ES6),
277251bytesMostrar fragmento de código
Guardado 26 bytes de la sugerencia de @ Neil .
Sin golf
fuente
,$(w=>$(z=>$(y=>$(x=>(Z=a[y][x=10-x,X=x*3+y+z,Y=y-z+n,x])<=z&&Z+z+1?0:w?['/\\__\\','\\/__/'].map(s=>S[++Y].splice(X,5,...s)):S[Y].splice(X+1,3,...'___'))))),
parece ahorrar 26 bytes.Python 2 , 243 bytes
Pruébalo en línea!
Una traducción de Python del enfoque de Neil's Charcoal.
fuente
+1+k
->-~k
.APL (Dyalog Unicode) ,
117116112 bytes SBCSPruébalo en línea!
fuente
Tcl,
380409bytesEl usuario sergiol ha estado ocupado resolviendo esto muy bien:
Pruébalo en línea!
Contenido original
Pruébalo en línea!
Por desgracia, es lo que es. Es solo un poco más fácil para los ojos cuando se "no tiene golf"
Construye una cadena, según los requisitos. Toma la matriz de stdin. Va de abajo hacia arriba, de adelante hacia atrás, de derecha a izquierda sobre los datos de la cadena. Lo hace en dos pasadas, una para el borde superior y otra para el resto del cuerpo de cada cubo.
Traté de hacerlo más pequeño usando un dulce lambda mojo funcional, pero, por desgracia, eso lo hizo más grande.
fuente