Esquadrar o quadrado é um processo de ladrilhar um quadrado usando apenas outros quadrados. Se esse ladrilho usar apenas quadrados de tamanhos diferentes, ele será considerado perfeito . O menor quadrado quadrado perfeito possível é um quadrado de 112x112 lado a lado usando 21 quadrados diferentes.
Eu criei a versão ascii art deste quadrado abaixo:
################################################################################################################
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ############################
# ## ############################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ############################################# #
# ############################################# #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###############################
# ## ## ###############################
# ## ## ## ## #
# ## ## ## ## #
################################################################## ## ## #
################################################################## ## ## #
# ## ## ########################### #
# ## ## ########################### #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ################## ## #
# ## ################## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###########################################
# ## ## ###########################################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ########################################### #
# ########################################### #
# ## ## ## #
# ## ## ## #
################################## ## #
################################## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
################################################################################################################
O envio deve ser impresso no quadrado acima. Você pode imprimir um reflexo e / ou rotação do quadrado acima, se desejar. Uma nova linha à direita na última linha é permitida. Este é um código de golfe , então a menor finalização ganha!
code-golf
kolmogorov-complexity
Nathan Merrill
fonte
fonte
#
vez deX
Respostas:
CJam,
888483 bytesTeste aqui.
Explicação
Aqui está a idéia básica: comece com um quadrado 112x112 "vazio". Agora percorra os quadrados em ordem de leitura (da esquerda para a direita, de cima para baixo). Adicione cada quadrado na primeira posição disponível. Depois, imprima todas as linhas concluídas - isso garante que apenas precisamos verificar a primeira linha (restante) para descobrir para onde o próximo quadrado vai.
A grade vazia é inicializada como
p
s, porque eu precisava de um caractere com um código de caractere maior que o espaço e#
, e porque poderia reutilizar seu próprio código de caractere112
para o tamanho da grade inicial. Eu usei alguns dos truques de arte ASCII de Dennis aqui para preencher os pequenos quadrados na grade.fonte
Mathematica
360426O código funciona primeiro desenhando o quadrado perfeito de quadrados, rasterizando e binarizando a imagem e depois convertendo 0 em "#" e 1 em "".
A saída é retornada como caracteres ASCII comuns em uma tabela.
Eu prefiro essa renderização, obtida pela exclusão
Thickness[.015]
fonte
#
's. Ele colide com outros quadrados à direita e na parte inferior, desenhados de maneira semelhante. Onde dois quadrados que#
circundam o lado de fora se encontram, você recebe um dobro#
para as linhas internas. E os quadrados são de fato quadrados, eles têm o mesmo número de caracteres na vertical e na horizontal. O problema é a fonte. Esta resposta não está de acordo com as especificações. Se fosse aceita, a pergunta seria votada de perto para uma vitória não objetiva.Ruby, 180 bytes
Versão golfe com base na versão não-golfada abaixo. Aproveitamos o fato de que normalmente existem 2 ou 3 quadrados com a mesma
y
coordenada no canto superior esquerdo.A primeira string mágica contém códigos ASCII para
square sidelength+70
ey increment +40
. Ao encontrar um comprimento de linha quadrado (código Ascii> 67), assumimos que o próximo quadrado está na mesma coordenada y, e a coordenada x pode ser obtida incrementando a coordenada x atual emsidelength+2
. Ao encontrar um incremento ay (código Ascii <67), incrementamos a coordenada y de acordo e redefinimos a coordenada x para a figura codificada na segunda seqüência mágica.Versão original
Esta solução (completamente não destruída) contém 315 bytes, excluindo linhas em branco e recuos desnecessários. Ele simplesmente cria uma matriz de 112 seqüências de 112
#
e substitui o interior dos quadrados por espaços.fonte
C, 198 bytes
(Ungolfed)
Tudo isso é feito através da varredura de uma matriz de 112 × 112 bytes (inicializada como zero). Sempre que encontra um byte zero, ele busca um valor da matriz
i
e adiciona uma caixa do tamanho correspondente. O byte extra em cada linha atua como um terminador de string, para que possamos usarputs()
linhas inteiras em vez de usarputchar()
caracteres individuais.Provavelmente isso pode ser jogado um pouco mais, mas não acho que haja muita chance de vencer a resposta de steveverrill .
(link ideone)
fonte
#
quando!(p%(n-1)&&q%(n-1))
eu também gostaria de reduzir o número defor
loops de quatro para dois, usandox=i%113
ey =i/113 etc
.R,
293291287282 bytesDepois disso, percebi que tinha feito quase o mesmo processo que o @steveverrill. Uma matriz de '#' e em branco os interiores quadrados. Provavelmente pode espremer um pouco mais disso. O retorno de carro para a 3ª linha é significativo. Obrigado a AlexA por alguns.
fonte
s
uma vez; portanto, não poderia fazer isso emfor(g in list(...))
vez de especificars
separadamente antecipadamente? Eu acho que você iria economizar 2-3 bytes.Binário do MS-DOS, 137
O código a seguir será executado no MS-DOS se você o gravar em um arquivo chamado square.com, sem necessidade de compilação adicional (mas, como é fornecido em hexadecimal, você precisa "desexistir" primeiro):
A saída será irreconhecível na maioria dos terminais, mas você pode redirecioná-la para um arquivo (
square.com > output.txt
) e examiná-la em um editor de texto. Se você quiser algo mais legível, o código a seguir produzirá um square.com funcional se alimentado em debug.exe (debug.exe < square.asm
):fonte
Matlab / Oitava, 258
Como sempre, matrizes. Eu codifiquei a linha e os índices da coluna de cada quadrado e do tamanho. Eu posso usá-los para preencher um grande quadrado em branco de
#
s.fonte
Bash, 252
Todo codegolfer deve ser capaz de vencer um algoritmo de compactação de uso geral:
Agradeço a Toby Speight pela dica de usar entradas mais curtas (bobo me usado em
gzip
vez degzip -9
compressão) e uma string aqui.fonte
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
. Posso fazê-lo funcionar usando um subshell:,(base64 -d|gunzip)<<<...
mas que ainda usa 258 bytes.