Cuadrar el cuadrado es un proceso de mosaico de un cuadrado usando solo otros cuadrados. Si este mosaico solo usa cuadrados de diferentes tamaños, entonces se considera perfecto . El cuadrado cuadrado perfecto más pequeño posible es un mosaico cuadrado de 112x112 con 21 cuadrados diferentes.
He creado la versión de arte ascii de este cuadrado a continuación:
################################################################################################################
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ############################
# ## ############################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ############################################# #
# ############################################# #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###############################
# ## ## ###############################
# ## ## ## ## #
# ## ## ## ## #
################################################################## ## ## #
################################################################## ## ## #
# ## ## ########################### #
# ## ## ########################### #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ################## ## #
# ## ################## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###########################################
# ## ## ###########################################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ########################################### #
# ########################################### #
# ## ## ## #
# ## ## ## #
################################## ## #
################################## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
################################################################################################################
Su envío debe imprimir el cuadrado de arriba. Puede imprimir un reflejo y / o rotación del cuadrado de arriba si lo desea. Se permite una nueva línea final en la última línea. Este es un código de golf , por lo que gana la presentación más pequeña.
code-golf
kolmogorov-complexity
Nathan Merrill
fuente
fuente
#
lugar deX
Respuestas:
CJam,
888483 bytesPruébalo aquí.
Explicación
Aquí está la idea básica: comience con un cuadrado "vacío" de 112x112. Ahora ve a través de los cuadrados en orden de lectura (de izquierda a derecha, de arriba a abajo). Agregue cada cuadrado en la primera posición disponible. Luego, imprima todas las líneas completadas; esto garantiza que solo necesitemos verificar la primera línea (restante) para averiguar dónde va el siguiente cuadrado.
La cuadrícula vacía se inicializa en
p
s, porque necesitaba un carácter con un código de caracteres más grande que el espacio y#
, y porque podía reutilizar su propio código de caracteres112
para el tamaño de la cuadrícula inicial. Hice uso de algunos de los trucos de arte ASCII de Dennis aquí para llenar los cuadrados pequeños en la cuadrícula.fuente
Mathematica
360426El código funciona dibujando primero el cuadrado perfecto de los cuadrados, rasterizando y binarizando la imagen, y luego convirtiendo 0 en "#" y 1 en "".
La salida se devuelve como caracteres ASCII ordinarios en una tabla.
Prefiero esta representación, obtenida eliminando
Thickness[.015]
fuente
#
's. Choca contra otros cuadrados a la derecha e inferior, que se dibujan de manera similar. Cuando dos cuadrados que tienen#
todo el exterior se encuentran, por lo tanto, obtienes un doble#
para las líneas internas, y los cuadrados son cuadrados, tienen el mismo número de caracteres vertical y horizontalmente. El problema es la fuente. Esta respuesta no cumple con la especificación. Si se aceptara, la pregunta se votaría de cerca por una victoria no objetiva.Rubí, 180 bytes.
Versión de golf basada en la versión sin golf de abajo. Aprovechamos el hecho de que normalmente hay 2 o 3 cuadrados con la misma
y
coordenada para la esquina superior izquierda.La primera cadena mágica contiene códigos ASCII para
square sidelength+70
yy increment +40
. Al encontrar una longitud lateral cuadrada (código Ascii> 67) asumimos que el siguiente cuadrado está en la misma coordenada y, y la coordenada x se puede obtener incrementando la coordenada x actual ensidelength+2
. Al encontrar un incremento ay (código Ascii <67) incrementamos la coordenada y en consecuencia y restablecemos la coordenada x a la figura codificada en la segunda cadena mágica.Versión original
Esta solución (completamente no oculta) contiene 315 bytes, excluyendo líneas en blanco y sangrías innecesarias. Simplemente crea una matriz de 112 cadenas de 112
#
y luego reemplaza el interior de los cuadrados con espacios.fuente
C, 198 bytes
(Sin golf)
Todo lo que hace es escanear a través de una matriz de 112 × 112 bytes (inicializados a cero). Cada vez que encuentra un byte cero, obtiene un valor de la matriz
i
y agrega un cuadro del tamaño correspondiente. El byte adicional en cada fila actúa como un terminador de cadena, por lo que podemos usarputs()
para generar líneas completas en lugar de usarputchar()
para generar caracteres individualmente.Probablemente esto se pueda jugar un poco más, pero no creo que tenga muchas posibilidades de superar la respuesta de steveverrill .
(enlace ideone)
fuente
#
cuando!(p%(n-1)&&q%(n-1))
también buscaría reducir el número defor
bucles de cuatro a dos, usandox=i%113
e y =i/113 etc
.R,
293291287282 bytesDespués de hacer esto, me di cuenta de que había hecho casi el mismo proceso que @steveverrill. Una matriz de '#' y deja en blanco los interiores cuadrados. Probablemente pueda exprimir un poco más de esto. El retorno de carro para la tercera línea es significativo. Gracias a AlexA por unos pocos.
fuente
s
una vez, ¿no podría hacerlo enfor(g in list(...))
lugar de especificar pors
separado de antemano? Creo que eso te ahorraría 2-3 bytes.Binario de MS-DOS, 137
El siguiente código se ejecutará en MS-DOS si lo escribe en un archivo llamado square.com, no se requiere compilación adicional (pero dado que se proporciona en hexadecimal, primero debe "deshex"):
El resultado será irreconocible en la mayoría de los terminales, pero puede redirigirlo a un archivo (
square.com > output.txt
) y mirarlo en un editor de texto. Si desea algo más legible, el siguiente código producirá un square.com que funcione si se alimenta a debug.exe (debug.exe < square.asm
):fuente
Matlab / Octave, 258
Como siempre, Matrices. Codifiqué la fila y los índices de columna de cada cuadrado y el tamaño. Puedo usar estos para llenar un gran cuadrado 'en blanco' de
#
s.fuente
Bash, 252
Cada codegolfer debería poder superar un algoritmo de compresión de propósito general:
Gracias a Toby Speight por la sugerencia de usar una entrada más corta (tonto que yo usé en
gzip
lugar degzip -9
compresión) y una cadena aquí.fuente
base64 -d<<<H4sIAP9YuVUAA+3XQQrDIBAF0H1PUfD+d+yq0FA7GirGie/vdEZfkCy0lLl5lOfJlPaKoAUIBAKBQCAQCLwzOP3mfdFVv9IKBM4BTyQpGA0PE0AgcB8wzC3A6vS7egH4d5YH64WPtVGh/zvygj8agcCvQuufzA+2GoFA4AZgd9KCwS7Hzu3B7qQFO09rbXDEaa0NjtgLCAQCgUAgEAgEAoHz34dj8wLKvMUNbzEAAA==|gunzip
base64 -d<<<H4sIADyFv1UCA+3ZOw6EMAwFwH5PgeT735EOUSyfQAgOmVeCxUgusAkRbfOLqTARd0qAQCAQCAQCgcAvg80375dW/T+lQGAbsCCdgvsdXl0AAoHjgM8e7mUA92bKG+DtpAevDPflRsko7BXcKAQCD9+X3wOPCoFA4ABgnZ/OmcHTS+bw4PXzkV7Ak93KDdboVm6wxrOAQCAQCAQCgUAgENj++7BuZsq8xQ1vMQAA|gunzip
gunzip: command not found
. Puedo hacerlo funcionar usando un subshell:(base64 -d|gunzip)<<<...
pero eso todavía usa 258 bytes.