Dados tres enteros> = 2, cree un cubo ASCII en una proyección ortogonal (gabinete). Los tres enteros representan la altura, el ancho y la profundidad (medidos en caracteres visibles), incluidas las esquinas. Las esquinas deben ser 'o' o '+', libre elección.
w: 10, h: 5, d: 4 Así da:
o--------o
/ /|
/ / |
o--------o |
| | o
| | /
| |/
o--------o
Ahora, para hacer esto un poco más difícil, todas las caras pueden ser sólidas, transparentes o faltantes. Ordenamos las caras así:
o--------o
/ /|
/ 2 / |
o--------o 3|
| | o
| 1 | /
| |/
o--------o
---
|2|
-------
|5|1|3|
-------
|4|
---
|6|
---
Y proporcione una lista de tokens, S, T o M. El ejemplo original es así:
w 10
h 5
d 4
S S S S S S
o--------o
/ /|
/ / |
o--------o |
| | o
| | /
| |/
o--------o
Si una cara es transparente, podemos ver cualquier cosa que esté detrás de ella:
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
Para pares de caras faltantes, los bordes o esquinas adyacentes ya no son visibles:
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
Código de golf, el código más corto gana! Los espacios finales y las nuevas líneas están bien, puede elegir el método de entrada y el orden de entrada.
you're free to choose input method and input order
. Y como nada dice lo contrario, se puede usar cualquiera de los métodos de entrada / salida predeterminados .Respuestas:
De carbón ,
190181 bytesPruébalo en línea! El enlace es a la versión detallada del código. Editar: guardado 9 bytes al optimizar mis condiciones. El carbón no tiene
else
token, por lo que losif
comandos siempre tienen dos alternativas, a menos que estén al final de un bloque o programa. Para evitar esto, uso enfor (<bool>)
lugar de loif (<bool>)
cual tiene un efecto similar cuando la expresión solo puede tener los valores 0 o 1 pero guarda un byte. (Para lograr esto tuve que cambiar las expresiones de modo que siempre eran ciertas cuando el cuerpo necesita para ser ejecutado.) Yo también era capaz de optimizarif (<bool>) for (<int>)
alfor (And(bool, int))
.fuente
X * Y * Z
cubo ASCII.JavaScript (ES6),
318314308 bytesToma ancho, alto y profundidad como enteros y las caras como una matriz de caracteres.
¿Cómo?
La función M () procesa una devolución de llamada F dada en un rango dado [0 ... n] .
La variable a contiene una matriz plana que representa una cuadrícula de tamaño (w + d) x (h + d-1) . Inicialmente se llena con filas de espacios terminados con nuevas líneas.
La función D () se usa para 'dibujar' una cara del cuboide.
Los dos bits menos significativos del parámetro t contienen el tipo de cara:
Los bits # 2 a # 4 contienen el índice de cara basado en 0.
Las caras se dibujan en el siguiente orden:
Manifestación
Mostrar fragmento de código
fuente
SOGL v0.11 ,
200194193192190 bytesToma entrada en el orden
¡Atado!
Pruébalo aquí! (el valor comprimido cambió para ser compatible con V0.12)
fuente