Wyzwanie polega na tym, aby dokładnie przedstawić kwiat życia (według niektórych świętą figurę geometryczną) w wybranym języku.
Projekt składa się z układu okręgów i częściowych okręgów o promieniu 1, jak pokazano, których środki ułożone są na trójkątnej siatce o skoku 1, oraz wokół jednego większego okręgu o promieniu 3, który je otacza.
Projekt można skalować według własnego uznania, ale dopuszczalny jest błąd maksymalny 2% z poprawności matematycznej. W przypadku korzystania z grafiki rastrowej skutecznie ogranicza to średnicę małych kółek do co najmniej około 100 pikseli.
Ponieważ jest to golfowy kod, wygrywa najkrótszy kod (bajty).
code-golf
ascii-art
graphical-output
Benjamin Spector
źródło
źródło
Odpowiedzi:
Mathematica,
177173128124120 bajtówGłówną ideą jest skomponowanie wyniku z sześciu obróconych wersji tego:
To z kolei jest prostokątnym stołem o identycznych łukach koła z odciętymi dwoma narożnikami. Jeśli usuniemy ścinanie i reprezentujemy każdy środek okręgu za pomocą
#
, zasadniczo chcemy rozmieścić koła w tym wzorze:Te krawędzie są odcięte przez nałożenie warunku
-3 < x-y < 4
na wskaźniki 2D (ponieważ wartośćx-y
jest stała wzdłuż przekątnych), a ścinanie pochodzi z pomnożenia ichx
orazy
przez nieortogonalne wektory bazowe, które obejmują siatkę, której szukamy.Ta szczególna orientacja nieobróconych łuków okazuje się być najkrótsza, ponieważ oba końce łuku dzielą się równomiernie,
Pi
dzięki czemu łuk może być wyrażony jakoPi/{6,2}
(wszystkie inne łuki wymagałyby dodatkowego znaku minus lub liczb całkowitych w liczniku).źródło
OpenSCAD, 228 bajtów
Poniżej znajduje się wersja umożliwiająca ustawienie parametrów r (promień) i w (szerokość pierścieni).
Ta wersja ma dokładnie 246 znaków.
Część tego kodu jest technicznie niepotrzebna, ale sprawia, że wygląda bardziej jak obrazek.
źródło
Error: Error: Parse error on line 1: ...x(k))o();circle(9);};}}}q(2);o(27); -----------------------^ Expecting 'TOK_ID', '}', 'TOK_IF', '!', '#', '%', '*', got ';'
Mathematica 263 bajtów
Niezbyt konkurencyjne wobec przesłania @ MartinEnder, ale mimo to dobrze się bawiłem. Pozwoliłem płatkom na przypadkowy spacer! Płatek chodzi, obracając losowo o 60 stopni wokół jednego z punktów końcowych, który jest również losowo wybierany. Sprawdzam, czy obracający się koniec płatka wypadnie poza duży dysk, a jeśli tak, obrót przebiega w drugą stronę.
Oto kolejny kod, którego użyłem do animacji.
Czytałem gdzieś, że dwuwymiarowe losowe spacery muszą ostatecznie wrócić do źródła. Wygląda na to, że kilka tysięcy kroków gwarantuje wypełnienie dużego dysku.
źródło
Sqrt[3]
is3^.5
. Nie musisz definiowaće
do pierwszego użycia i możesz użyć tej sztuczki, aby zapisać na niej bajt, więcv={e=0{,},{0,2}}
. Możesz także użyć notacji infix, takiej jake~c~6
lube~Disk~6
, iArcTan@@Subtract@@v
powinna ona być równoważna zArcTan@@(#-#2)&@@v
.JavaScript (ES6) / SVG, 299 bajtów
Działa, generując wiele par łuków o różnych długościach, a następnie obracając je na miejsce.
źródło