En el episodio de hoy de AAOD, vamos a construir un santuario chino de diferentes alturas.
Considere los siguientes ejemplos para height ( N
) 1
to6
N = 1
:
.
|
. ]#[ .
\_______/
. ]###[ .
\__]#.-.#[__/
|___| |___|
|___|_|___|
####/_\####
|___|
/_____\
N = 2
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\___]#.---.#[___/
|__|_| |_|__|
|__|_|___|_|__|
#####/___\#####
|_____|
/_______\
N = 3
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\____]#.-----.#[____/
|__|__| |__|__|
|__|__|_____|__|__|
######/_____\######
|_______|
/_________\
N = 4
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_____]##.-----.##[_____/
|__|__|_| |_|__|__|
|__|__|_|_____|_|__|__|
########/_____\########
|_______|
/_________\
N = 5
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\______]###.-----.###[______/
|__|__|___| |___|__|__|
|__|__|___|_____|___|__|__|
##########/_____\##########
|_______|
/_________\
N = 6
:
.
|
. ]#[ .
\_______/
. ]###[ .
\___________/
. ]#####[ .
\_______________/
. ]#######[ .
\___________________/
. ]#########[ .
\_______________________/
. ]###########[ .
\___________________________/
. ]#############[ .
\_______]####.-----.####[_______/
|__|__|__|__| |__|__|__|__|
|__|__|__|__|_____|__|__|__|__|
############/_____\############
|_______|
/_________\
y así.
Detalles de construcción
Estoy seguro de que la mayoría de los detalles sobre el patrón son claros. Aquí hay algunos detalles más finos:
- La puerta en la parte inferior del santuario puede ser como mínimo de
1
_
ancho y como máximo puede ser de5
_
ancho. - Siempre habrá dos
.
directamente encima de los pilares alrededor de la puerta (dos verticales|
). - Las escaleras comienzan con el mismo ancho que la puerta y aumentan como se muestra en el patrón.
- Los
]##..##[
bloques sobre cada nivel de techo aumentan de tamaño de2
arriba a abajo. - Los
\__...__/
niveles de los techos aumentan de tamaño de4
arriba a abajo. - Los bloques de paredes alrededor de la puerta deben contener
1
_
como mínimo y como máximo,3
_
entre los dos|
. La prioridad va a los bloques de pared exterior para que el más cercano a la puerta tenga un tamaño variable para cada nivel. - El espacio entre el
.
y el]
(o[
) se llena#
en el techo justo encima de las puertas.
Detalles del desafío
- Escriba una función o programa completo que lea un entero positivo mayor que a
0
través de STDIN / ARGV / argumento de función o equivalente más cercano y emite (a STDOUT o equivalente más cercano) elN
Santuario chino - La nueva línea final es opcional.
- No debe haber espacios finales o suficientes espacios finales para rellenar la salida en el rectángulo delimitador mínimo.
- No debe haber espacios iniciales que no sean parte del patrón.
Tabla de clasificación
La primera publicación de la serie genera una tabla de clasificación.
Para asegurarse de que sus respuestas aparezcan, comience cada respuesta con un título, utilizando la siguiente plantilla de Markdown:
# Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
N=1
caso? ¿Por qué no 3 y tienen ventanas laterales más pequeñas como en elN=2
caso?N=1
caso, ¿no es el primer techo demasiado largo (ancho)?#
al lado de la puerta.
para apoyarla]
y[
sobre ella. Acerca del tamaño del techo inicial: es el tamaño del techo en el techo superior de cada altura.Respuestas:
CJam, 200 bytes
Se agregaron nuevas líneas para evitar el desplazamiento. Pruébalo en línea
Breve explicacion:
El programa construye la mitad izquierda del santuario (incluido el centro), luego lo invierte y reemplaza algunos caracteres para obtener la mitad derecha. Una serie de n espacios se representa como el número ~ n (bit a bit "no") durante la construcción, y se reemplaza con los espacios reales al final.
El programa comienza con las 2 líneas superiores, luego para cada nivel de techo, antepone todas las líneas anteriores con 2 espacios y agrega el nuevo techo (2 líneas). El último techo se modifica para agregar la parte de "puerta de arriba".
Luego, el muro superior se construye repitiendo "| __" y truncando a la longitud correcta, seguido de un "_ |" fijo y espacios. La pared se duplica y los espacios de las puertas se reemplazan con guiones bajos. Finalmente, la parte inferior se construye línea por línea.
fuente
Perl,
332 316294Trate de mí .
C, 371
Trate de mí .
JavaScript, 365
Lo anterior se puede traducir casi de 1 a 1 en JavaScript:
Utilizar:
fuente
s
. A menos que lo asigne dinámicamente, por supuesto.Python 2,
356352347344 bytesEsto básicamente construye el santuario línea por línea. La función
p
imprime una cadena con los espacios necesarios para centrarla.Utilicé python 2 para guardar muchos bytes, porque el objeto de mapa de python 3 no se dispara. Supongo que siempre debería jugar golf en Python 2 , solo guarda unos pocos bytes más (incluso si es solo para no tener que analizar la entrada a int). Jejeje, no es como el código es bonito para jugar golf en primer lugar.
Editar: y, por supuesto, ya no necesito el mapa ...
Aquí está el código en forma no golfizada:
fuente
print(B*(5+2*n-len(s)//2)+s)
aprint B*(5+2*n-len(s)/2)+s
(eliminar paréntesis y cambiar//
a/
).print B*(5+2*n-len(s)/2)+s
aprint(5+2*n-len(s)/2)*B+s
, puede eliminar el espacio despuésprint
.JavaScript ( ES6 ), 440
Editar error de dintel fijo
Una función con altura como parámetro, salida a la consola.
Al usar mucho la cadena de plantilla , todas las nuevas líneas son significativas y cuentan.
Ejecute el fragmento para probar en Firefox (con salida de consola)
Versión sin golf para prueba interactiva:
fuente
Haskell, 473 bytes
fuente
#
C, 660 bytes
El patrón simplemente parecía ser demasiado irregular para encontrar algo elegante, particularmente en un lenguaje sin procesamiento de cadenas. Así que aquí está mi enfoque de fuerza bruta:
Antes de jugar al golf:
No hay mucho que explicar aquí. Simplemente va línea por línea y genera el recuento necesario de cada personaje. Traté de mantener el código compacto, pero todavía suma.
d
es el ancho de la puerta,w
el ancho de cada pared de ladrillos.fuente
c(char*s){for(;*s;)putchar(*s++);}
==>#define c printf
;r(n,c){for(j=0;j++<n;)putchar(c);}
==>r(n,C){while(n--)putchar(C);}