Mieliśmy kilka z wyzwań o spirali Ulama. Ale to nie wystarczy.
W tym wyzwaniu narysujemy trójkątną spiralę Ulama (w przeciwieństwie do zwykłej kwadratowej spirali Ulama). Oto szkic tego, jak wygląda spirala.
Jak wiemy, spirala Ulama układa wszystkie liczby naturalne w spiralę zewnętrzną i zaznacza tylko te, które są pierwsze. Na powyższym szkicu pokazane byłyby tylko liczby, które pojawiają się na czarno (liczby pierwsze).
Wyzwanie
Zaakceptuj liczbę N jako dane wejściowe i wyświetl trójkątną spiralę Ulama do tej liczby.
- Dane wejściowe mogą być argumentem standardowym lub funkcyjnym.
- Spirala powinna obrócić się w kierunku dodatnim (to znaczy przeciwnie do ruchu wskazówek zegara), jak na powyższym rysunku.
- Dowolny zwojów o 120 stopni powyższej liczby byłby prawidłowy, a zwrot może być inny dla różnych danych wejściowych. Ale najniższa strona implikowanych trójkątów powinna być pozioma, ponieważ jedynymi dozwolonymi zwojami są (wielokrotności) 120 stopni.
- Kod powinien działać teoretycznie (biorąc pod uwagę wystarczającą ilość czasu i pamięci) dla dowolnego N, aż do poziomu dozwolonego przez jakiekolwiek pośrednie obliczenia wykonane z domyślnym typem danych.
double
wystarczy; nie potrzeba dużych typów całkowitych. - Wszystkie wbudowane funkcje są dozwolone.
- Nie zaakceptuję własnej odpowiedzi (nie sądzę, że i tak byłaby najkrótsza ...).
Formaty wyjściowe
Wybierz jedną z poniższych opcji.
Wyświetl wykres ze znacznikiem (kropka, okrąg, krzyż, cokolwiek wolisz) przy liczbach pierwszych i nic przy liczbach innych niż pierwsze. Skala nie musi być taka sama dla dwóch osi. Oznacza to, że implikowane trójkąty nie muszą być równoboczne. Osie, linie siatki i etykiety osi są opcjonalne. Wymagane są tylko znaczniki liczb pierwszych.
Przykładowy wynik dla N = 12 byłby następujący (porównaj z powyższym szkicem). Drugi wykres jest bardziej interesującym przykładem, odpowiadającym N = 10000.
- Utwórz plik obrazu z powyższym, w dowolnym dobrze znanym formacie obrazu (takim jak png, tiff, bmp).
Wyświetl spiralę jako grafikę ASCII , używając jednego wybranego znaku dla liczb pierwszych i pustego miejsca dla liczb niepierwszych, z pustym miejscem do oddzielenia pozycji liczbowych w tym samym rzędzie. Dopuszczalne są wiodące lub końcowe spacje lub znaki nowej linii. Na przykład przypadek N = 12 użyty
o
jako znak byłbyo · · · o · o · · · o · o
gdzie oczywiście
o
byłby wyświetlany tylko znak na liczbach pierwszych. W·
non-primes pokazano tutaj tylko w celach informacyjnych.
Kryterium wygranej
Prawdziwą nagrodą jest przekonanie się o tych niesamowitych wzorach Kod golfa, najkrótszy kod wygrywa.