La quadrature du carré est un processus de pavage d'un carré en utilisant uniquement d'autres carrés. Si ce carrelage n'utilise que des carrés de tailles différentes, il est alors considéré comme parfait . Le carré carré parfait le plus petit possible est un carré de 112x112 carrelé utilisant 21 carrés différents.
J'ai créé la version art ascii de ce carré ci-dessous:
################################################################################################################
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ############################
# ## ############################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ############################################# #
# ############################################# #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###############################
# ## ## ###############################
# ## ## ## ## #
# ## ## ## ## #
################################################################## ## ## #
################################################################## ## ## #
# ## ## ########################### #
# ## ## ########################### #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ################## ## #
# ## ################## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###########################################
# ## ## ###########################################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ########################################### #
# ########################################### #
# ## ## ## #
# ## ## ## #
################################## ## #
################################## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
################################################################################################################
Votre soumission doit imprimer le carré ci-dessus. Vous pouvez imprimer une réflexion et / ou une rotation du carré ci-dessus si vous le souhaitez. Une nouvelle ligne de fin sur la dernière ligne est autorisée. Il s'agit d'un code-golf , donc la plus petite soumission gagne!
code-golf
kolmogorov-complexity
Nathan Merrill
la source
la source
#
place deX
Réponses:
CJam,
888483 octetsTestez-le ici.
Explication
Voici l'idée de base: commencer avec un carré 112x112 "vide". Parcourez maintenant les carrés dans l'ordre de lecture (de gauche à droite, de haut en bas). Ajoutez chaque carré dans la première position disponible. Ensuite, imprimez toutes les lignes terminées - cela garantit que nous n'avons qu'à vérifier la première ligne (restante) pour déterminer où va le carré suivant.
La grille vide est initialisée à
p
s, car j'avais besoin d'un caractère avec un code de caractère plus grand que l'espace et#
, et parce que je pouvais réutiliser son propre code de caractère112
pour la taille de la grille initiale. J'ai utilisé certaines des astuces artistiques ASCII de Dennis ici pour remplir les petits carrés dans la grille.la source
Mathematica
360426Le code fonctionne en dessinant d'abord le carré parfait de carrés, en pixellisant et en binarisant l'image, puis en convertissant 0 en "#" et 1 en "".
La sortie est renvoyée sous forme de caractères ASCII ordinaires dans une table.
Je préfère ce rendu, obtenu en supprimant
Thickness[.015]
la source
#
. Il bute contre d'autres carrés à droite et en bas, qui sont dessinés de manière similaire. Lorsque deux carrés qui ont#
tout autour de l'extérieur se rencontrent, vous obtenez donc un double#
pour les lignes intérieures, Et les carrés sont en effet carrés, ils ont le même nombre de caractères verticalement et horizontalement, Le problème est la police. Cette réponse n'est pas conforme à la spécification. Si elle était acceptée, la question serait close pour un gain non objectif.Rubis, 180 octets
Version golfée basée sur la version non golfée ci-dessous. Nous profitons du fait qu'il y a généralement 2 ou 3 carrés avec le même
y
coordonnée pour le coin supérieur gauche.La première chaîne magique contient des codes ASCII pour le
square sidelength+70
ety increment +40
. Lorsque vous rencontrez une longueur latérale carrée (code Ascii> 67), nous supposons que le carré suivant est à la même coordonnée y, et la coordonnée x peut être obtenue en incrémentant la coordonnée x actuelle desidelength+2
. Lorsque vous rencontrez l'incrémentation ay (code Ascii <67), nous incrémentons la coordonnée y en conséquence et réinitialisons la coordonnée x sur le chiffre encodé dans la deuxième chaîne magique.Version originale
Cette solution (totalement non gérée) contient 315 octets, à l'exclusion des lignes vierges et des retraits inutiles. Il crée simplement un tableau de 112 chaînes de 112
#
, puis remplace l'intérieur des carrés par des espaces.la source
C, 198 octets
(Non golfé)
Il suffit de parcourir un tableau de 112 × 112 octets (initialisé à zéro). Chaque fois qu'il rencontre un octet zéro, il récupère une valeur du tableau
i
et ajoute une boîte de la taille correspondante. L'octet supplémentaire dans chaque ligne agit comme un terminateur de chaîne afin que nous puissions utiliserputs()
pour produire des lignes entières au lieu d'utiliserputchar()
pour générer des caractères individuellement.Cela peut probablement être joué un peu plus, mais je ne pense pas que cela ait beaucoup de chances de battre la réponse de steveverrill .
(lien idéone)
la source
#
lorsque!(p%(n-1)&&q%(n-1))
je chercherais également à réduire le nombre defor
boucles de quatre à deux, en utilisantx=i%113
et y =i/113 etc
.R,
293291287282 octetsAprès avoir fait cela, j'ai réalisé que j'avais fait presque le même processus que @steveverrill. Un tableau de '#' et videz les intérieurs carrés. Peut probablement en tirer un peu plus. Le retour chariot pour la 3ème ligne est significatif. Merci à AlexA pour quelques-uns.
la source
s
faites référence qu'une seule fois, alors ne pourriez-vous pas fairefor(g in list(...))
plutôt que de spécifiers
séparément à l'avance? Je pense que cela vous ferait économiser 2-3 octets.Binaire MS-DOS, 137
Le code suivant s'exécutera dans MS-DOS si vous l'écrivez dans un fichier appelé square.com, aucune autre compilation n'est requise (mais comme il est donné en hexadécimal, vous devez d'abord le "décocher"):
La sortie sera méconnaissable dans la plupart des terminaux, mais vous pouvez la rediriger vers un fichier (
square.com > output.txt
) et la regarder dans un éditeur de texte. Si vous voulez quelque chose de plus lisible, le code suivant produira un square.com fonctionnel s'il est introduit dans debug.exe (debug.exe < square.asm
):la source
Matlab / Octave, 258
Comme toujours, Matrices. J'ai codé en dur la ligne et les indices de colonne de chaque carré ainsi que la taille. Je peux les utiliser pour remplir un grand carré «vide» de
#
s.la source
Bash, 252
Chaque codegolfer devrait être capable de battre un algorithme de compression à usage général:
Merci à Toby Speight pour le conseil d'utiliser une entrée plus courte (idiot, j'ai utilisé à la
gzip
place de lagzip -9
compression) et une chaîne ici.la source
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
. Je peux le faire fonctionner en utilisant un sous-shell:,(base64 -d|gunzip)<<<...
mais cela utilise toujours 258 octets.