Kwadratowanie kwadratu to proces układania kwadratu za pomocą tylko innych kwadratów. Jeśli ten kafelek wykorzystuje tylko kwadraty o różnych rozmiarach, wówczas uważa się go za idealny . Najmniejsza idealny kwadrat kwadrat jest kwadrat 112x112 kafelki przy użyciu 21 różnych kwadratów.
Poniżej utworzyłem wersję ascii tego kwadratu:
################################################################################################################
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ############################
# ## ############################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ############################################# #
# ############################################# #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###############################
# ## ## ###############################
# ## ## ## ## #
# ## ## ## ## #
################################################################## ## ## #
################################################################## ## ## #
# ## ## ########################### #
# ## ## ########################### #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ################## ## #
# ## ################## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###########################################
# ## ## ###########################################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ########################################### #
# ########################################### #
# ## ## ## #
# ## ## ## #
################################## ## #
################################## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
################################################################################################################
Twoje zgłoszenie powinno wydrukować powyższy kwadrat. Możesz wydrukować odbicie i / lub obrót powyższego kwadratu, jeśli chcesz. Końcowy znak nowej linii w ostatnim wierszu jest dozwolony. To jest golf golfowy , więc najmniejsze zgłoszenie wygrywa!
code-golf
kolmogorov-complexity
Nathan Merrill
źródło
źródło
#
zamiastX
Odpowiedzi:
CJam,
888483 bajtówSprawdź to tutaj.
Wyjaśnienie
Oto podstawowa idea: zacznij od „pustego” kwadratu 112 x 112. Teraz przejdź przez kwadraty w kolejności czytania (od lewej do prawej, od góry do dołu). Dodaj każdy kwadrat do pierwszej dostępnej pozycji. Następnie wydrukuj wszystkie ukończone linie - to gwarantuje, że musimy tylko sprawdzić pierwszą (pozostałą) linię, aby dowiedzieć się, gdzie idzie następny kwadrat.
Pusta siatka jest inicjowana na
p
s, ponieważ potrzebowałem znaku o kodzie znaków większym niż spacja#
, oraz ponieważ mogłem ponownie użyć własnego kodu znaków112
dla rozmiaru początkowej siatki. Wykorzystałem tutaj niektóre sztuczki Dennisa ASCII , aby wypełnić małe kwadraty na siatce.źródło
Mathematica
360426Kod działa najpierw poprzez narysowanie idealnego kwadratu, rasteryzację i binaryzację obrazu, a następnie konwersję 0 na „#” i 1 na „”.
Dane wyjściowe są zwracane jako zwykłe znaki ASCII w tabeli.
Wolę to renderowanie, uzyskane przez usunięcie
Thickness[.015]
źródło
#
„s”. Styka się z innymi kwadratami po prawej iu dołu, które są rysowane w podobny sposób. Tam, gdzie dwa kwadraty#
wokół siebie się spotykają, otrzymujesz podwójną#
linię wewnętrzną, a kwadraty rzeczywiście są kwadratowe, mają taką samą liczbę znaków w pionie i poziomie, Problemem jest czcionka. Ta odpowiedź nie jest zgodna ze specyfikacją. Jeśli zostanie zaakceptowana, pytanie zostanie ocenione z bliska na zwycięstwo bez celu.Rubinowy, 180 bajtów
Wersja do gry w golfa oparta na wersji bez golfa poniżej. Korzystamy z faktu, że zazwyczaj
y
lewy górny róg ma zwykle 2 lub 3 kwadraty o tej samej współrzędnej.Pierwszy ciąg znaków zawiera kody ASCII dla
square sidelength+70
iy increment +40
. Kiedy napotykamy kwadratową długość boczną (kod Ascii> 67), zakładamy, że następny kwadrat ma tę samą współrzędną y, a współrzędną x można uzyskać poprzez zwiększenie bieżącej współrzędnej x osidelength+2
. Po napotkaniu przyrostu a (kod Ascii <67) odpowiednio zwiększamy współrzędną y i resetujemy współrzędną x do postaci zakodowanej w drugim ciągu magicznym.Orginalna wersja
To (całkowicie niestosowne) rozwiązanie zawiera 315 bajtów, z wyłączeniem niepotrzebnych pustych linii i wcięć. Po prostu tworzy tablicę 112 ciągów 112
#
, a następnie zamienia wnętrze kwadratów spacjami.źródło
C, 198 bajtów
(Nie golf)
Wszystko to polega na skanowaniu tablicy 112 × 112 bajtów (zainicjowanej na zero). Ilekroć napotyka bajt zerowy, pobiera wartość z tablicy
i
i dodaje pole o odpowiednim rozmiarze. Dodatkowy bajt w każdym wierszu działa jako terminator ciągów, dzięki czemu możemy użyćputs()
do wypisania całych linii zamiastputchar()
do wypisania pojedynczych znaków.Prawdopodobnie można to trochę pograć w golfa, ale nie sądzę, że ma dużą szansę na pokonanie odpowiedzi Steveverrilla .
(link ideone)
źródło
#
kiedy!(p%(n-1)&&q%(n-1))
chciałbym również zmniejszyć liczbęfor
pętli z czterech do dwóch, używającx=i%113
i y =i/113 etc
.R
293291287282 bajtówPo tym zdałem sobie sprawę, że wykonałem prawie identyczny proces jak @steveverrill. Tablica „#” i puste kwadratowe wnętrza. Może prawdopodobnie wycisnąć z tego trochę więcej. Zwrot karetki dla 3. linii jest znaczący. Podziękowania dla AlexA za kilka.
źródło
s
raz, więc czy nie możesz zrobić inaczejfor(g in list(...))
niżs
wcześniej określić osobno? Myślę, że zaoszczędziłoby to 2-3 bajty.MS-DOS Binary, 137
Poniższy kod będzie działał w MS-DOS, jeśli zapiszesz go w pliku o nazwie square.com, nie jest wymagana dalsza kompilacja (ale ponieważ jest podany w postaci szesnastkowej, musisz go najpierw usunąć z pamięci):
Dane wyjściowe będą nierozpoznawalne w większości terminali, ale można przekierować je do pliku (
square.com > output.txt
) i obejrzeć w edytorze tekstu. Jeśli chcesz czegoś bardziej czytelnego, poniższy kod utworzy działający square.com, jeśli zostanie wprowadzony do debug.exe (debug.exe < square.asm
):źródło
Matlab / Octave, 258
Jak zawsze Matryce. Na stałe zakodowałem indeks wierszy i kolumn dla każdego kwadratu oraz rozmiar. Mogę ich użyć do wypełnienia dużego „pustego” kwadratu
#
s.źródło
Bash, 252
Każdy kodegolfer powinien być w stanie pokonać algorytm kompresji ogólnego przeznaczenia:
Dzięki Toby Speightowi za podpowiedź do użycia krótszych danych wejściowych (głupie ja użyłem
gzip
zamiastgzip -9
do kompresji) i ciąg znaków tutaj.źródło
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
. Mogę uruchomić go za pomocą podpowłoki:(base64 -d|gunzip)<<<...
ale nadal używa 258 bajtów.