La casa de santa claus
Nota: Este es el primer desafío que he intentado establecer. Ha pasado por el Sandbox, sin embargo, si encuentras algo mal en él, no solo desestimes, sino que dejas un comentario para que pueda mejorarlo.
Antecedentes
Hay un viejo rompecabezas para niños donde el desafío es dibujar una caja con un techo y una cruz en el medio sin levantar el bolígrafo del papel o pasar dos veces por cualquier línea.
En Alemania se le conoce como "das Haus des Nikolaus" o "La casa de Santa Claus". Sinceramente, no puedo recordar cómo solíamos llamarlo. Para cualquiera que no esté familiarizado con el rompecabezas, hay disponibles todos los detalles aquí .
Aquí hay una representación de arte ASCII de la casa.
/\
/__\
|\/|
|/\|
----
Desafío
Escriba un programa o función para dibujar la Casa de Santa Claus en el idioma que elija.
¿Suena demasiado fácil? Bueno, aquí está el truco. También debe generar cada etapa del dibujo y cumplir con las reglas del rompecabezas. No se requiere que su programa tome ninguna entrada. La casa terminada debe verse exactamente como se muestra arriba.
Según el sitio anterior, hay 44 posibles soluciones. Puedes usar cualquiera de ellos. Este es un desafío de arte ASCII, por lo que no es necesario que calcules la solución, sino solo que la dibujes.
Salida
A continuación se muestra un ejemplo de la salida requerida de una de las 44 soluciones:
----
\
\
----
__
\
\
----
\
__\
\
\
----
/\
/__\
\
\
----
/\
/__\
|\
| \
----
/\
/__\
|\/
|/\
----
/\
/__\
|\/|
|/\|
----
Reglas
- He agregado 1 nueva línea adicional entre cada salida esperada para tratar de aclarar los requisitos. Esto es opcional Se permite cualquier número de líneas en blanco entre cada salida.
- Su salida debe consistir solo en los caracteres /, \, -, _ y espacio como se muestra arriba. Se permiten espacios finales.
- Cada línea en su dibujo debe continuar desde el final de la línea anterior y no puede repetir ninguna línea.
- Lagunas estándar prohibidas.
- No es necesario que muestres la rima mencionada en el enlace anterior.
- Este es el código de golf, por lo que la respuesta más corta en bytes será la ganadora.
Resultado
Algunas buenas respuestas y gracias y respeto a todos los que publicaron. Dije el recuento de bytes más bajo, pero he marcado como respuesta principal no solo por eso, sino también por la gran explicación del código. Buena @ Dennis.
Respuestas:
Jalea ,
403936 bytesPruébalo en línea!
Cómo funciona
es un literal biyectivo base-250; cada carácter corresponde a su punto de código en la página de códigos de Jelly . El resultado es el número entero 13192938935880491074 .
convierte el entero generado en la base biyectiva 9, produciendo la matriz de enteros
[9, 6, 7, 9, 6, 2, 2, 7, 1, 5, 3, 8, 1, 3, 5, 8, 4, 4, 4, 4] . Los enteros corresponden al orden del trazo, con la excepción de 9 , que indica un espacio.
envuelve la matriz generada en una matriz singleton, que se requerirá para anteponerla a la matriz que generaremos ahora.
Funciona de la siguiente manera.
¤
combina los dos enlaces a la izquierda en una cadena niládica. El primero,“|_/-\/\|‘
produce los puntos de código de los caracteres especificados, produciendo [124, 95, 47, 45, 92, 47, 92, 124] . Luego,Ė
enumera los puntos de código, obteniendo[[1, 124], [2, 95], [3, 47], [4, 45], [5, 92], [6, 47], [7, 92] , [8, 124]] . El par [n, c] medios que el n º carrera será el carácter ASCII con punto de código c .
concatena las matrices generadas. El resultado es la matriz
[[9,6,7,9,6,2,2,7,1,5,3,8,1,3,5,8,4,4,4,4], [1,124 ], [2,95], [3,47], [4,45], [5,92], [6,47], [7,92], [8,124]] .
realiza una reducción acumulativa (es decir, que muestra todos los pasos intermedios), utilizando la transliteración (
y
) con argumentos intercambiados (@
). En el primer paso, por ejemplo, reemplazamos cada 1 en la matriz original con 124 , que es el punto de código del carácter | .aplana el resultado y reemplaza todos los puntos de código con los caracteres ASCII correspondientes. En todos los pasos, esto generará algunos caracteres no imprimibles con los puntos de código 1 a 9 .
toma el máximo en cuanto a caracteres con el carácter de espacio, reemplazando todos los caracteres no imprimibles con espacios.
divide la cadena generada en trozos de longitud cuatro y los une con un salto de línea como separador.
fuente
Javascript (ES6),
119116969291 bytesfuente
Lotes,
356344341337 bytes|
Reglas|
de citas estúpidas por lotes ... si desea un en una variable, debe citarlo con tres^
s, por lo que es más barato usarlo@
y sustituirlo en la salida, aunque para lograr esto tengo que comenzar con la pared izquierda. La línea uno tiene un espacio final.echo(
se utiliza debido a que elr
,c
yf
variables podrían estar vacío y no queremosECHO is off.
imprimir.Editar: guardado 12 bytes mediante el uso de fallthrough para la última parte. Guarde 3 bytes usando un
for
bucle para imprimir cada parte, esto significa que ahora uso|
s en mis variables, lo que hace que el código sea un poco más fácil de leer. Guardado 4 bytes mediante el uso de@
caracteres explícitos en lugar de@echo off
. Creo que comenzar con la pared izquierda todavía requiere la menor cantidad de bytes.fuente
echo:
es más estándar peroecho(
parece que estás abusando de una función de idioma, por lo que +1.echo:
falla en algunos casos extremos oscuros, pero no conozco ningún caso de falla paraecho(
.foo.bat
en el directorio actual,echo(\..\foo.bat
echos\..\foo.bat
pero seecho:\..\foo.bat
ejecutafoo.bat
.echo:.\foo.bat
que tendría ese efecto en su lugar. ¿Se debe a una falla en la pila del directorio, donde el "ARRIBA" del directorio raíz es el directorio actual?C, 118 bytes
fuente
char*p
(sin espacio) y cambiar'B'
y'J'
sus códigos ASCII./// , 112 bytes
Pruébalo en línea!
fuente
PHP,
9895 bytesinspirado por solución de Arnauld
Nota: La primera línea de código tiene un espacio final.
fuente
PHP con GD,
348338 bytes (no compite)no exactamente lo que se pedía, pero ...
guardar en archivo, llamar en un navegador
Descompostura
Para dibujar una casa más grande, cambie
$w=9
al ancho deseado.fuente