Twierdzenie Nichomachusa odnosi kwadrat sumy do sumy kostek:
i ma piękną geometryczną wizualizację:
Wyzwanie: Stwórz drugą część tej wizualizacji w ascii.
Musisz upewnić się, że wszystkie wizualne rozgraniczenia są przestrzegane na diagramie. Najłatwiej jest to zrobić z czterema „kolorami”, choć można to osiągnąć tylko z trzema (jak to zrobić w ostatnim przykładzie poniżej). W przypadku czterech kolorów używasz dwóch, aby rozróżnić regiony w obrębie „paska” (tj. Różnych części tworzących pojedynczy sześcian), a dwóch, aby rozróżnić sąsiednie paski. Możesz także użyć więcej niż czterech kolorów, jeśli chcesz. Jeśli którykolwiek z nich jest mylący, poniższe dane wyjściowe powinny wyjaśnić.
Wejście wyjście
Dane wejściowe to jedna liczba całkowita większa od 0. Dane wyjściowe to siatka ascii podobna do poniższych przykładów, odpowiadająca spłaszczonej siatce dla tego numeru wejściowego na powyższym obrazku. Wiodące i końcowe białe znaki są w porządku.
To jest golf golfowy, ze standardowymi zasadami.
Przykładowe wyniki
N = 1
#
N = 2
#oo
o@@
o@@
N = 3
#oo+++
o@@+++
o@@+++
+++###
+++###
+++###
N = 4
#oo+++oooo
o@@+++oooo
o@@+++@@@@
+++###@@@@
+++###@@@@
+++###@@@@
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
oo@@@@oooo
N = 5
#oo+++oooo+++++
o@@+++oooo+++++
o@@+++@@@@+++++
+++###@@@@+++++
+++###@@@@+++++
+++###@@@@#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
oo@@@@oooo#####
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
+++++#####+++++
Trzykolorowa wersja dla N = 4 dzięki @BruceForte:
#oo+++oooo
o##+++oooo
o##+++####
+++ooo####
+++ooo####
+++ooo####
oo####++++
oo####++++
oo####++++
oo####++++
Odpowiedzi:
MATL ,
302827 bajtówWypróbuj online!
Dodatkowe atrybuty:
Dla 26 bajtów następująca zmodyfikowana wersja generuje wyjście graficzne :
Wypróbuj w MATL Online!
Obraz prosi o jakiś kolor i kosztuje tylko 7 bajtów:
Wypróbuj w MATL Online!
Lub użyj dłuższej wersji (37 bajtów), aby zobaczyć, jak stopniowo budowana jest matryca znaków :
Wypróbuj w MATL Online!
Przykładowe dane wyjściowe
Dla danych wejściowych
8
poniżej pokazano wersję podstawową, wyjście graficzne i kolorowe wyjście graficzne.Wyjaśnienie
Generalna procedura
Matryca numeryczna jest budowana od warstw zewnętrznych do wewnętrznych w
N
krokach, gdzieN
jest wejście. Każdy krok zastępuje wewnętrzną (lewą górną) część poprzedniej macierzy. Na koniec liczby w uzyskanej macierzy są zamieniane na znaki.Przykład
Dla danych wejściowych
4
pierwszą macierzą jestJako drugi krok macierz
jest nadpisywany w górnej połowie tego ostatniego. To samo dzieje się z
i wreszcie z
Otrzymana macierz to
Na koniec
30
jest dodawany do każdego wpisu, a uzyskane liczby są interpretowane jako punkty kodowe i konwertowane na znaki (zaczynając od33
, odpowiadając!
).Konstrukcja macierzy pośrednich
W przypadku danych wejściowych
N
rozważ zmniejszenie wartościk
odN
do1
. Dla każdego generowany jestk
wektor liczb całkowitych od1
dok*(k+1)
, a następnie każdy wpis jest dzielony przezk
i zaokrąglany w górę. Jako przykładk=4
podajemy (wszystkie bloki mają rozmiark
oprócz ostatniego):natomiast dla
k=3
wyniku byłoby (wszystkie bloki mają rozmiark
):Wektor ten jest dodawany, elementarnie z rozgłoszeniem, do transponowanej kopii samego siebie; a następnie
k
jest dodawany do każdego wpisu. Dok=4
tego dajeJest to jedna z pośrednich matryc pokazanych powyżej, z tym wyjątkiem, że jest odwracana poziomo i pionowo. Pozostaje tylko odwrócić tę macierz i zapisać ją w lewym górnym rogu dotychczasowej macierzy „nagromadzonej”, zainicjowanej na pustą macierz dla pierwszego (
k=N
) kroku.Kod
źródło
Python 2 ,
187178164162152 bajtów-8 bajtów dzięki Mr.Xcoder
-1 bajtów dzięki Stephenowi
-10 bajtów dzięki Jonathanowi Frechowi
Wypróbuj online!
źródło
sum(range(y))%y
->y*~-y/2%y
Węgiel ,
5046 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Poprzednia 50-bajtowa wersja z wyjaśnieniem: Wypróbuj online!
Uwaga: Pętlę nad znakiem, zamiast próbować przypisać go bezpośrednio,
l
ponieważ nie można bezpośrednio przypisać wyniku indeksowania łańcucha do zmiennej, ponieważ jest to niejednoznaczna konstrukcja w grafice. Na szczęście liczba bajtów jest taka sama.źródło
C (gcc) ,
135128120 bajtówWypróbuj online!
Używa tylko trzech kolorów.
Koncepcyjnie działa na siatce obróconej o 180 stopni:
I oblicza kolory według wzoru:
źródło
gcc -O2
.g(i%m,i/m,n)%3
)?x/k&&y/k
zamiastx>=k&y>=k
R ,
131126123 bajtów3 bajty zapisane dzięki @Giuseppe
Wypróbuj online!
Używa tego samego algorytmu, co odpowiedź MATL @LuisMendo . Jedyna różnica polega na tym, że zamiast konwertowania na znaki macierz jest wyprowadzana ze wszystkimi wartościami mod4, aby zapewnić, że każdy element jest pojedynczym znakiem ascii.
źródło
for
pętlę dla -1 bajtów :)Python 2 ,
176175 bajtówWypróbuj online!
źródło
J="".join;
(+10 bajtów) i zamienisz oba"".join
s (-2 * 7 = -14 bajtów) naJ
(+2 bajty), możesz zapisać bajt (ponieważ po bajcie musi być dodatkowa spacjaprint
; +1 bajt) .