Necesitas construir una pirámide a partir de cubos. Los cubos se pueden ver desde 2 ángulos:
_____ _____
/\ \ / /\
/ \____\ /____/ \
\ / / \ \ /
\/____/ \____\/
Este es un ejemplo para cubos de 2 tamaños desde los 2 ángulos posibles. La altura de los cubos es $size
barras (o barras diagonales), y el ancho del cubo es 2 * $size
subrayado. El ancho del nivel superior debe contener un carácter de subrayado adicional.
La entrada se proporcionará como una cadena que contiene un número (tamaño de cubos), barra oblicua o barra invertida (para indicar dirección / ángulo) y otro número (altura de la pirámide).
Ejemplos:
Entrada:
1/1
Salida:
___
/\__\
\/__/
Entrada:
1\1
Salida:
___
/__/\
\__\/
Entrada:
2/1
Salida:
_____
/\ \
/ \____\
\ / /
\/____/
Entrada:
1/2
Salida:
___
___/\__\
/\__\/__/
\/__/\__\
\/__/
Entrada:
2\2
Salida:
_____
/ /\
/____/ \_____
\ \ / /\
\____\/____/ \
/ /\ \ /
/____/ \____\/
\ \ /
\____\/
Entrada:
1/3
Salida:
___
___/\__\
___/\__\/__/
/\__\/__/\__\
\/__/\__\/__/
\/__/\__\
\/__/
- Los espacios en blanco finales / iniciales están bien.
- Las lagunas estándar no están permitidas.
- Puede asumir que la entrada siempre será válida.
- Puede suponer que la entrada no causará una salida demasiado grande, es decir: sin ajuste de línea cuando la salida se imprime en el terminal.
- El tamaño del cubo y la altura de la pirámide es positivo (es decir, ≥ 1)
- Este es el código de golf, por lo que gana el código más corto en bytes.
El ganador actual es:
Glen O con 270 bytes en julia
El desafío permanece abierto. si superas al mejor actual, actualizaré la respuesta aceptada.
Respuestas:
Julia -
503455369346313270 bytesSin golf:
Uso:
o
fuente
Perl, 343 bytes
Multilínea con comentarios:
Salida de ejemplo:
También intenté implementarlo como una función C usando el mismo algoritmo, con la esperanza de guardar bytes del lujo de los nombres de variables de un solo carácter, pero terminó 15 bytes más grande, a 358 bytes (debe compilarse con
-std=c89
under gcc para dejarlo) elvoid
en el encabezado de la función):fuente
printf("%c" --> putchar(
,printf("\n") --> puts("")
, mover todas las declaraciones int fuera de la función, a continuación, se puede eliminar laint
(ver meta.codegolf.stackexchange.com/q/5532/15599 ), cambie todos los literales de caracteres para sus códigos ascii, por ejemplo' ' --> 32
. Refactorizar sus bucles for, por ejemplofor(k+1;z--;)
, también puede ayudar, pero es más complicado.e
puede ser un int siempre que lo inicialice a cero.sscanf
solo sobrescribirá el byte menos significativo y puede dejar cualquier basura existente en los otros tres bytes.main
lugar de,j
pero no tiene que pasar parámetross
, y puede aprovechar la inicialización automática de variables globales.Rubí, 332
El único juego de golf realizado hasta ahora es la eliminación de comentarios y sangrías. Jugaré golf más tarde.
Configuré una serie de espacios y metí los caracteres individuales en él. Hay bastante sobreescritura de un cubo encima de otro (trabajo de abajo hacia arriba) y dentro del propio cubo, para evitar el código adicional. Hago la pirámide dibujando un rombo (similar a /codegolf//a/54297/15599 ) y suprimiendo la mitad superior.
La parte difícil fue dibujar el cubo escalable. Comencé con un hexágono perimetral con 2n + 1
_
caracteres en los lados horizontales. También había tenido 2n + 1/
y\
, por lo tanto, tenía uno demasiado, pero al trazar el_
último los sobrescribo.Las líneas internas son las únicas que se cambian según la dirección que esté mirando el cubo. Trazo todo
/
y\
con una sola tarea.abs
ayuda a invertir la dirección yi>>9&1
agrega un 1 adicional a los valores negativos de i, lo que reduce la parte superior hacia abajo. fori
= 0 uno de los requeridos_
está sobreplotado, por lo que la cadena de selección'\_/'
contiene los tres símbolos, seleccionados de acuerdo con el signo dei
.El espacio en blanco alrededor de la salida es amplio pero no excesivo: 4 * p * n alto y 8 * p * n ancho (este último es para permitir que el cubo del ápice esté siempre en el centro de la salida). Entiendo "arrastrar / liderar espacios en blanco "para incluir líneas completas, pero puede revisar si es necesario.
Código sin golf
fuente