Ta geometryczna spirala wygląda na skomplikowaną, ale dość łatwo ją narysować; weź następujące pole:
Narysuj linię prostą między rogiem pudełka a pewną ustaloną odległością nad następnym rogiem przeciwnie do ruchu wskazówek zegara.
Kontynuuj ten wzór do wewnątrz, zawsze pozostając w tej odległości od narożnika następnej linii. Oto kilka kolejnych wierszy.
Jak widać, w miarę kontynuowania wzoru spirala zbliża się do środka, a rysowane pola zaczynają się obracać. Pamiętaj, że odległość pozostaje stała, niezależnie od kąta.
Wyzwanie
Inspiracja (a także dzięki cudownej osobie, która wprowadziła mnie do tej koncepcji <3)
Biorąc pod uwagę numeryczne (ewentualnie ułamkowe) dane wejściowe od 1 do 25, napisz obraz na dysk, który korzysta z tego wzoru lub wyświetl wynik na ekranie, gdzie odległość od każdego rogu jest odległością jednej początkowej strony pola podzielonej przez dane wejściowe . Kontynuuj wzór do wewnątrz, aż odległość od określonego rogu będzie większa niż długość następnej strony.
Zasady
- Nie możesz używać wbudowanych funkcji do tworzenia spirali, ale możesz używać wbudowanych funkcji przetwarzania obrazu.
- Jeśli piszesz na dysk, musisz wydrukować obraz w dowolnym z plików .jpg, .gif, .tiff, .pbm, .ppm i .png.
- Początkowa długość boku musi wynosić co najmniej 500 pikseli.
- Początkowy róg może być dowolny.
- Jak zawsze, standardowe luki są niedozwolone.
źródło
Odpowiedzi:
Buty (Rubinowy) 163 bajty
Buty to oparty na rubinie zestaw narzędzi GUI.
Nie golfił
Wyjścia n = 4 i n = 25
Pamiętaj, że kształt zawsze kończy się trójkątem, który zapada się dalej do linii. Zastąpienie
size-1
przezsize
nie robi różnicy w wyglądzie wyjścia i zaoszczędziłoby 2 bajty, ale zostawiłem to dla teoretycznej poprawności.Wyjście n = 300
Zainspirowane komentarzem OP, wyższe liczby wyglądają świetnie!
źródło
line
po dolnej linii?*
przekształca układ czterech elementów utworzony przez konwersję liczb zespolonych do czterech parametrówline
. Standardowa składnia polegaline(*(a[j-1].rect+a[j].rect))
więc na usuwaniu nawiasów i dodawaniu spacji, która już oszczędza jeden bajt. Usunięcie spacji powoduje, że Ruby próbuje pomnożyćline
przez zawartość nawiasów, co nie ma sensu i powoduje zgłoszenie błędu. Trzeba tu zagrać w golfa, ale nie tylko. Zajmę się tym później.upto
. Czy próbowałeś też usunąć('')
późniejask
? Nie testowałem tego, ale może to być niepotrzebneJava,
10561005985948522508507504502501493492488474465458 bajtówDzięki CoolestVeto i ECS za jeszcze inne sposoby na zmniejszenie rozmiaru. :-)
źródło
Groovy,
412411403398 bajtówźródło
Caught: groovy.lang.MissingMethodException: No signature of method: static s.div() is applicable for argument types: (java.lang.Float) values: [25.0] Possible solutions: is(java.lang.Object), wait(), run(), run(), find(), any() groovy.lang.MissingMethodException: No signature of method: static s.div() is applicable for argument types: (java.lang.Float) values: [25.0] Possible solutions: is(java.lang.Object), wait(), run(), run(), find(), any() at s$1.<init>(s.groovy:3) at s.run(s.groovy:2)