Aquí hay una galleta salada ASCII :
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Aquí hay dos galletas apiladas:
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Escriba el programa más corto posible que tome un número entero positivo y dibuje una pila de tantas galletas saladas ASCII.
La entrada puede provenir de stdin, línea de comando, o simplemente puede escribir una función. La entrada siempre será válida. La salida debe ir a stdout o la alternativa más cercana.
Cada galleta apilada siempre se desplaza 2 caracteres hacia abajo y 7 caracteres a la derecha de la galleta debajo de ella. No debe haber espacios finales ni líneas nuevas extrañas.
El programa más corto en bytes gana.
Ejemplos
Si la entrada es 1
la salida es
_________________
| . . . |
| . . |
| . . . |
| . . |
| . . . |
|_________________|
Si la entrada es 2
la salida es
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Si la entrada es 3
la salida es
_________________
| . . . |
| . __________|______
| . | . . . |
| .| . __________|______
| . | . | . . . |
|______| .| . . |
| . | . . . |
|______| . . |
| . . . |
|_________________|
Y así.
code-golf
ascii-art
kolmogorov-complexity
Pasatiempos de Calvin
fuente
fuente
___|___
lugar de_______
. Supongo que se vería raro si fuera lo últimoRespuestas:
CJAM,
140125119116 bytesPruébalo en línea.
Una sola salina
El fragmento de código
deja lo siguiente en la pila:
Galletas saladas apiladas
Suponga que la salina de arriba se guarda en Z.
fuente
JavaScript (E6) 249
259 289 304 345No estoy tan seguro de la compresión de la cuerda.Encontró una buena compresión para las cuerdas.El simple caso de 1 cracker parece difícil de manejar. Puede haber una mejor manera ...Ungolfed más o menos
Ese es el código básico, antes de comenzar a jugar al golf. No es exactamente lo mismo y funciona solo para n> 2
Prueba en la consola FireFox / FireBug
Salida
fuente
Python,
252241 caracteresGracias a FryAmTheEggman y Vincent por recortar 11 personajes.
Una preponderancia de galletas:
Este código parece realmente ineficiente, pero otras respuestas lo dirán. Simplemente copia y pega la galleta de salina en una matriz en el lugar correcto, explica que la galleta más inferior tenga 1 carácter, luego la imprime todo.
Puedo reducirlo a 230 caracteres si uso un archivo externo (código 202 + tamaño de archivo 38 + 1 nombre de archivo).
fuente
n=1 upto 2^10
que podamos estar seguros de que su programa realmente hace lo correcto.list(' '*(7*N+12))
podría ser[' ']*(7*N+12)
.G=[list(' '*(7*N+12))for _ in R(2*N+5)]
conG=map(list,[' '*(7*N+12)]*(2*N+5))
Perl 189
Robando algunas ideas de compresión de cuerdas de choroba, lo resumí en:
Para una visualización más fácil en su navegador:
Para el contexto, mi mejor antes de eso:
Perl 207
Agregar nuevas líneas y sangría para facilitar la lectura en su navegador:
Puede reemplazar "pop" con "<>" para tomar el recuento de STDIN en lugar de como un parámetro de línea de comandos y llegar a 206 bytes. Ir a STDERR lo dejaría en 204 bytes.
Si pudiera habilitar la función 'decir' sin una penalización de byte, entonces podría llegar a 202.
invocado como:
fuente
say
sin penalización porque es lo mismo que ejecutar en la línea de comando con en-E
lugar de-e
.perl -E''
no cuenta para tus personajes totales._|_
.Perl 201
(eliminar nuevas líneas excepto la primera para obtener el #)
say
+<>
= 198.fuente
Haskell, 215 bytes
Este acumula la pila de galletas de forma inductiva, sacando partes de galletas y separándolas de un par de listas cíclicas:
El flujo de control es bastante sencillo; La mayor parte del truco consiste en reutilizar la mayor cantidad posible de piezas de craqueo.
Sin golf:
fuente
Python, 299
Pensé que estaba siendo inteligente, pero la solución resultó ser demasiado complicada y más larga que cualquier enfoque directo, sin embargo, no pude resistirme a publicarla. El programa calcula explícitamente qué carácter debe trazarse en las diferentes posiciones de la cadena de salida, sin recorrer los crackers individuales.
Y la última línea se expandió para ver qué está pasando:
fuente
C, 284
Para la función
f
y la#define
s, excluyendo espacios en blanco y innecesariosmain
. De acuerdo con el comentario de edc65, he incluido un tipo entero de 128 bits (que iba a hacer de todos modos) pero calculé mal nuevamente y solo puedo hacer 29 crackers antes de que las partes superiores comiencen a faltar.Función completa y programa de prueba a continuación. Lo comentaré más tarde.
Solo hay cuatro caracteres diferentes en la salida. Estos se decodifican a partir de números binarios 0-3 por
" _.|"
. La matrizs[]
contiene un número entero para cada columna de la salida, 2 bits por símbolo, que se inicializa para contener el cracker más a la derecha.El primer
for
bucle copia el craqueador anterior, lo desplaza a la izquierda para moverlo hacia arriba, elimina la esquina inferior derecha usando&
y lo OR con el craqueador anterior, 7 pasos a la izquierda.El segundo
for
bucle decodifica la representación de 2 bits de cada carácter en el carácter real e imprime el carácter. Hay mucho código aquí solo para suprimir espacios en blanco innecesarios en la salida. Estoy decepcionado de que mi puntaje haya subido en lugar de bajar de mi revisión anterior.Salida
Eso es 29 galletas. Reemplacé el espacio con un
-
para una apariencia diferente, y para mostrar que no hay espacios finales o nuevas líneas extrañas en la salida.fuente
JavaScript (ES6) HTML5 - 233
236bytesProbablemente no sea una respuesta válida, pero no pude resistir publicar, lo siento :-P
Prueba en Firefox con
F(1)
,F(2)
,F(3)
, etc.Ejemplo: http://jsfiddle.net/Lvmg9fe8/7/
fuente
F(1)
o cualquier otro número, después de haber ingresado este código en la consola JS en Firefox ...