Po pierwsze ... chciałbym wszystkim życzyć Wesołych Świąt (przepraszam, jeśli spóźnię się o strefę czasową).
Aby uczcić tę okazję, narysujemy płatek śniegu. Ponieważ jest rok 201 5, a Boże Narodzenie przypada na 2 5 (dla dużej części osób), losujemy płatek Penta . Pentaflake to prosty fraktal złożony z pięciokątów. Oto kilka przykładów (wziętych stąd) :
Każdy Pentaflake ma porządek n. Pentaflake rzędu 0 jest po prostu pięciokątem. Dla wszystkich innych zamówień n, Pentaflake składa się z 5 Pentaflake z poprzedniego rzędu ułożonych wokół 6. Pentaflake z poprzedniego rzędu. Na przykład Pentaflake rzędu 1 składa się z 5 pięciokątów rozmieszczonych wokół centralnego pięciokąta.
Wkład
Porządek n
. Można to podać w dowolny sposób poza zmienną predefiniowaną.
Wydajność
Obraz zamówienia n
Pentaflake. Musi mieć co najmniej 100 pikseli szerokości i 100 pikseli długości. Może być zapisany w pliku, wyświetlony użytkownikowi lub wysłany do STDOUT
. Wszelkie inne formy wyników są niedozwolone. Wszystkie formaty obrazów istniejące przed tym wyzwaniem są dozwolone.
Zwycięski
Jako codegolf wygrywa osoba z najmniejszą liczbą bajtów.
źródło
n
można go jednak wstępnie zdefiniować w pliku skryptu. Można odczytaćn
zSTDIN
, szybka ono od użytkownika, należy przyjąć ją jako funkcja / commad linii argumentacji ... w zasadzie wszystko, co chcesz z wyjątkiem bezpośrednio osadzenie go w kodzie.Odpowiedzi:
Matlab, 226
Nie golfowany:
Piąta iteracja (renderowanie zajęło już sporo czasu).
Niewielka zmiana kodu (niestety więcej bajtów) powoduje, że to piękno =)
Aha i jeszcze jedno:
źródło
Mathematica, 200 bajtów
Ostatni wiersz jest funkcją, którą można zastosować do liczby całkowitej
n
.Nazwy funkcji matematycznych są długie. Ktoś powinien je zakodować entropijnie i stworzyć z niego nowy język. :)
Po zastosowaniu do
1
:Po zastosowaniu do
2
:źródło
MATLAB,
235233217 bajtówAktualizacja: kilka sugestii z @flawr pomogło mi stracić 16 bajtów. Ponieważ tylko to pozwoliło mi pokonać rozwiązanie flawr i że nie znalazłbym wyzwania bez pomocy flawr w pierwszej kolejności, rozważ to jako wspólne zgłoszenie :)
To kolejne rozwiązanie MATLAB oparte na filozofii iterowanych systemów funkcyjnych. Byłem najbardziej zainteresowany opracowaniem samego algorytmu i nie grałem zbyt dużo w rozwiązanie. Z pewnością jest miejsce na ulepszenia. (Rozważałem użycie zakodowanego na stałe przybliżenia dla punktu stałego
c
, ale to nie byłoby miłe.)Wersja bez golfa:
Wynik dla
N=5
(z kolejnymaxis equal off
dla ładności, ale mam nadzieję, że to się nie liczy bajtowo):źródło
R=[p(:,2),[-p(2,2);p(1,2)]];
(i eliminując poprzednieR,C,S
) i możesz użyćq=[q R^l*[c-1+t(1,:);t(2,:)]/c]
i myślęc=1.5+5^.5/2;
q
, miałem nawet niepotrzebną parę nawiasów ... 3. dzięki, ale co to za magia ??: D 4. ponieważ rozwiązanie jest teraz krótsze niż oryginał, uważam, że jest to częściowo również przesłanie.Mathematica, 124 bajty
Mathematica obsługuje nową składnię
Table
od wersji 10Table[expr, n]
:, która oszczędza kolejny bajt.Table[expr, n]
jest równoważne zTable[expr, {n}]
.Rdzeniem tej funkcji jest używanie liczb zespolonych do wykonywania transformacji, a następnie przekształcanie ich w punkty o
ReIm
.Przypadek testowy:
źródło
π
zajmuje dwa bajty w UTF-8, więc wychodzisz do 125 bajtów ogółem.Mathematica,
199196 bajtówKończąc włosami odpowiedź Petera Richtera, oto moja własna. Opiera się głównie na funkcjonalności grafiki, a mniej na matematyce i FP. Wbudowane CirclePoints jest nowe w 10.1 .
Edycja: Dzięki DumpsterDoofus dla GoldenRatio
źródło
((1+Sqrt@5)/2)
jeGoldenRatio
. Również w drugim wierszu myślę, że powinno byćp@0=Polygon@c[{1,0},5];
zamiastp@0=Polygon@cp[{1,0},5];
. (BTW Jestem właściwie Peter, mam dwa profile lol).Mathematica, 130 bajtów
Używam techniki podobnej do odpowiedzi njpipeorgan (w rzeczywistości ukradłem jego
2Pi I/5 == Pi.4I
sztuczkę), ale zaimplementowałem ją jako funkcję rekurencyjną.Przykładowe użycie (użycie w
%
celu uzyskania dostępu do funkcji anonimowej, która została wyprowadzona w ostatniej linii):źródło