Beim Quadrieren des Quadrats werden nur andere Quadrate nebeneinander angeordnet. Wenn für diese Kacheln nur Quadrate unterschiedlicher Größe verwendet werden, gilt dies als perfekt . Das kleinstmögliche Quadrat mit den perfekten Quadraten ist ein 112 x 112-Quadrat, das aus 21 verschiedenen Quadraten zusammengesetzt ist.
Ich habe die ASCII-Kunstversion dieses Quadrats unten erstellt:
################################################################################################################
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ############################
# ## ############################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ############################################# #
# ############################################# #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###############################
# ## ## ###############################
# ## ## ## ## #
# ## ## ## ## #
################################################################## ## ## #
################################################################## ## ## #
# ## ## ########################### #
# ## ## ########################### #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ################## ## #
# ## ################## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###########################################
# ## ## ###########################################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ########################################### #
# ########################################### #
# ## ## ## #
# ## ## ## #
################################## ## #
################################## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
################################################################################################################
Ihr Beitrag sollte das obige Quadrat ausdrucken. Sie können eine Reflexion und / oder Drehung des obigen Quadrats drucken, wenn Sie möchten. Ein abschließender Zeilenumbruch in der letzten Zeile ist zulässig. Dies ist ein Code-Golf , also gewinnt die kleinste Einreichung!
code-golf
kolmogorov-complexity
Nathan Merrill
quelle
quelle
#
anstelle von verwendenX
Antworten:
CJam,
888483 BytesTeste es hier.
Erläuterung
Hier ist die Grundidee: Beginnen Sie mit einem "leeren" 112x112-Quadrat. Gehen Sie nun die Quadrate in Lesereihenfolge durch (von links nach rechts, von oben nach unten). Addiere jedes Quadrat zu der ersten verfügbaren Position. Drucken Sie anschließend alle ausgefüllten Zeilen aus - dies stellt sicher, dass wir nur die erste (verbleibende) Zeile überprüfen müssen, um herauszufinden, wohin das nächste Quadrat führt.
Das leere Gitter wird mit
p
s initialisiert , weil ich ein Zeichen mit einem Zeichencode benötige, der größer als Leerzeichen ist#
, und weil ich einen eigenen Zeichencode112
für die Größe des anfänglichen Gitters wiederverwenden kann . Ich habe hier einige von Dennis 'ASCII-Kunsttricks verwendet , um die kleinen Quadrate in das Raster zu füllen.quelle
Mathematica
360426Der Code zeichnet zunächst das perfekte Quadrat aus Quadraten, rastert und digitalisiert das Bild und konvertiert dann 0 in "#" und 1 in "".
Die Ausgabe wird als normale ASCII-Zeichen in einer Tabelle zurückgegeben.
Ich bevorzuge dieses Rendering, das durch Löschen erhalten wird
Thickness[.015]
quelle
#
's. Es stößt rechts und unten an andere Quadrate, die auf ähnliche Weise gezeichnet sind. Wenn sich zwei Quadrate#
treffen, die sich ringsum treffen, erhalten Sie also ein Doppel#
für Innenlinien. Und die Quadrate sind in der Tat quadratisch, sie haben die gleiche Anzahl von Zeichen vertikal und horizontal. Das Problem ist die Schriftart. Diese Antwort entspricht nicht der Spezifikation. Wenn sie akzeptiert wird, wird die Frage für einen nicht objektiven Gewinn geschlossen.Ruby, 180 Bytes
Golf-Version basierend auf der ungolfed Version unten. Wir machen uns die Tatsache zunutze, dass es
y
für die linke obere Ecke normalerweise zwei oder drei Quadrate mit der gleichen Koordinate gibt.Die erste magische Zeichenfolge enthält ASCII-Codes für
square sidelength+70
undy increment +40
. Bei einer quadratischen Seitenlänge (ASCII-Code> 67) wird angenommen, dass sich das nächste Quadrat auf derselben y-Koordinate befindet und die x-Koordinate durch Inkrementieren der aktuellen x-Koordinate um erhalten werden kannsidelength+2
. Bei einem y-Inkrement (ASCII-Code <67) erhöhen wir die y-Koordinate entsprechend und setzen die x-Koordinate auf die in der zweiten magischen Zeichenfolge codierte Zahl zurück.Originalfassung
Diese (vollständig ungolfed) Lösung enthält 315 Bytes ohne unnötige Leerzeilen und Einrückungen. Es erstellt einfach ein Array von 112 Zeichenfolgen mit 112
#
Zeichen und ersetzt dann die Innenseiten der Quadrate durch Leerzeichen.quelle
C 198 Bytes
(Ungolfed)
Alles, was dies tut, ist das Durchsuchen eines Arrays von 112 × 112 Bytes (initialisiert auf Null). Immer wenn es auf ein Null-Byte stößt, ruft es einen Wert aus dem Array ab
i
und fügt eine Box der entsprechenden Größe hinzu. Das zusätzliche Byte in jeder Zeile fungiert als Zeichenfolgenabschluss, sodass wirputs()
ganze Zeilen ausgeben können, anstattputchar()
Zeichen einzeln auszugeben.Dies kann wahrscheinlich ein wenig mehr Golf gespielt werden, aber ich glaube nicht, dass es eine große Chance gibt, Steveverrills Antwort zu schlagen .
(ideone link)
quelle
#
wenn!(p%(n-1)&&q%(n-1))
ich auch die Anzahl derfor
Schleifen mitx=i%113
und y = von vier auf zwei reduzieren möchtei/113 etc
.R
293291287282 BytesNachdem ich dies getan hatte, stellte ich fest, dass ich fast den gleichen Prozess wie @steveverrill durchgeführt hatte. Eine Reihe von '#' und leer die quadratischen Innenräume. Kann wahrscheinlich noch mehr herausholen. Der Wagenrücklauf für die 3. Zeile ist signifikant. Vielen Dank an AlexA für ein paar.
quelle
s
einmal, können Sie es also nicht tun,for(g in list(...))
anstatt ess
vorher separat zu spezifizieren ? Ich denke, das würde Ihnen 2-3 Bytes sparen.MS-DOS Binary, 137
Der folgende Code wird unter MS-DOS ausgeführt, wenn Sie ihn in eine Datei mit dem Namen square.com schreiben. Eine weitere Kompilierung ist nicht erforderlich.
Die Ausgabe ist in den meisten Terminals nicht erkennbar, Sie können sie jedoch in eine Datei umleiten (
square.com > output.txt
) und in einem Texteditor anzeigen. Wenn Sie etwas besser lesbares wollen, erzeugt der folgende Code eine funktionierende square.com, wenn er in debug.exe (debug.exe < square.asm
) eingegeben wird :quelle
Matlab / Octave, 258
Wie immer Matrizen. Ich habe die Zeilen- und Spaltenindizes jedes Quadrats und die Größe fest codiert. Ich kann diese verwenden, um ein großes 'leeres' Quadrat von
#
s auszufüllen .quelle
Bash, 252
Jeder Codegolfer sollte in der Lage sein, einen allgemeinen Komprimierungsalgorithmus zu übertreffen:
Vielen Dank an Toby Speight für den Hinweis, dass er kürzere Eingaben (dummes Ich
gzip
anstelle vongzip -9
Komprimierung) und einen Here-String verwendet.quelle
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
. Ich kann es mit einer Subshell zum Laufen bringen:,(base64 -d|gunzip)<<<...
aber das verbraucht immer noch 258 Bytes.