Definicja
„Trójkąt całkowity” to taki, który ma współrzędne całkowite. Na przykład następujący trójkąt jest trójkątem całkowitym:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650.
Zadanie
Celem tego wyzwania jest policzenie wszystkich trójkątów całkowitych (do zgodności) o obwodzie mniejszym niż n.
Wejście i wyjście
Argument zostanie podany jako liczba całkowita, a wynik powinien być liczbą trójkątów o obwodzie ściśle mniejszym niż argument.
Przykłady
Najmniejszy całkowity trójkąt na obwodzie jest zgodny z
(0, 0), (0, 1), (1, 0) which has perimeter 2 + sqrt(2) ≈ 3.414
Kolejne najmniejsze to:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650,
(0, 0), (0, 2), (1, 1) with perimeter 2 + 2sqrt(2) ≈ 4.828,
(0, 0), (0, 2), (1, 0) with perimeter 3 + sqrt(5) ≈ 5.236, and
(0, 0), (1, 2), (2, 1) with perimeter sqrt(2) + 2sqrt(5) ≈ 5.886
Przypadki testowe:
a(1) = 0
a(2) = 0
a(3) = 0
a(4) = 1
a(5) = 3
a(6) = 5
a(7) = 11
a(8) = 18
a(9) = 29
a(10) = 44
a(12) = 94
a(20) = 738
a(30) = 3756
a(40) = 11875
Mam współrzędne dla każdego z trójkątów w tej Gist .
Ostrzeżenia
Zauważ, że dwa nie przystające trójkąty mogą mieć ten sam obwód:
(0, 0), (0, 3), (3, 0) and (0, 0), (0, 1), (3, 4) both have perimeter 6 + 3sqrt(2).
Pamiętaj również, że nierówność jest surowa ; trójkąt pitagorejski 3-4-5 powinien być policzony jako (13), a nie (12).
Punktacja
To jest golf golfowy - wygrywa najkrótszy kod!
code-golf
sequence
geometry
combinatorics
Peter Kagey
źródło
źródło
Odpowiedzi:
Galaretka ,
28272523 bajtówWypróbuj online!
Jak to działa
źródło
Galaretka ,
3833 bajtów-1 dzięki Erikowi Outgolfer (inwertowanie
SP¬+÷/E$
przy użyciuSẠ>÷/E$
i użyciuÇÐf
zamiastÇÐḟ
) -1 dzięki Panu Xcoderowi (nie trzeba spłaszczać przed sortowaniem)-2 dzięki Panu Xcoderowi (
S<¥Ðf³L
->S€<³S
)-1 kradnącego lewę z wcześniejsza wersja odpowiedzi Dennisa (
ṗ2’Œc
->p`⁺’
- więcej zbędnych przypadków, ale golfista!)Pełny program przyjmujący liczbę całkowitą i drukujący wynik.
Wypróbuj online! (zbyt wolno, aby ukończyć testy 20+ w wieku poniżej 60 lat)
W jaki sposób?
źródło
[(a+c)×(b+d)]
->(a+c)×(b+d)
,[c÷a,d÷b]
->[a÷c,b÷d]
,c÷a==d÷b
->a÷c==b÷d
," c÷a==d÷b
->" a÷c==b÷d
. Funkcja .nan
.SP¬
i nie nadużywa podziału przez zero wyników (myślę, że może to być jednoznaczne z faktycznym lub)¬+
z<
. (EDIT: nie trzeba wymienićP
zẠ
, jak używasz tylko nieujemne współrzędnych.)7
zwraca21
)JavaScript (ES7), 157 bajtów
Przypadki testowe
Tylko małe wartości mogą być obliczone przy domyślnym rozmiarze stosu większości silników JS.
Pokaż fragment kodu
Wersja nierekurencyjna, 165 bajtów
Przypadki testowe
Ta wersja działa również w wersjach (30) i (40) , ale fragment kodu zajmie zbyt dużo czasu.
Pokaż fragment kodu
źródło
Julia 0.6 , 135 bajtów
Iteruj nad możliwymi punktami niebędącymi początkami, aby utworzyć trójkąt, przedstawić je jako liczby zespolone, posortować długości kwadratów i przechowywać je w zestawie, aby sprawdzić zgodność. Unika punktów kolinearnych, sprawdzając, czy kąt między ich liczbami zespolonymi jest niezerowy. Następnie zwraca długość zestawu. Krótsze jest użycie długości bezpośrednio, ale masz złą odpowiedź na
a(40)
. Rozwiązanie jest zbyt wolne, aby można go było uruchomić za(40)
powodu ostrzeżenia o wycofaniu, więc mam też link do szybszej wersji.Wypróbuj online!
Szybsza, dłuższa wersja bez przestarzałości. Wypróbuj online! Używa
sqrt.(g)
zamiast przestarzałego√g
dla pierwiastkowego pierwiastka kwadratowego.źródło
Czysty ,
227... 143 bajtówWypróbuj online!
Wykrywa przystające trójkąty, porównując trzy wartości, które sumują się do obwodu, oraz punkty współliniowe, sprawdzając, czy dwie najmniejsze takie wartości nie sumują się do trzeciej.
Oto wersja, która wykorzystuje szybsze, bardziej obciążające pamięć podejście: Wypróbuj online!
źródło
Start = @ 12.0
, nie otrzymam żadnych wyników, czy robię coś źle?