Pitagoras miał wysadzoną nogę podczas wojny. Musiał zostać amputowany i chociaż prawie umarł, przeżył i całkowicie wyzdrowiał. Teraz, po roku chodzenia o kulach, otrzymuje przywilej uzyskania protezy nogi! Chodzi o to, że istnieje kilka pasujących, ale które z nich?
Zadanie
Biorąc pod uwagę dodatnią liczbę całkowitą jako wartość wejściową, która jest długością jednej nogi potrójnego pitagorejskiego, wypisz wszystkie możliwości dla drugiej nogi. Na przykład najmniejszą potrójną pitagorejską jest (3,4,5), która tworzy trójkąt z dwoma nogami o długości 3 i 4 i przeciwprostokątną o długości 5.
Przykłady
Leg:5
12
Leg:28
21
45
96
195
Leg:101
5100
Leg:1001
168
468
660
2880
3432
4080
5460
6468
10200
38532
45540
71568
501000
Zasady
- Wejście będzie pojedynczą dodatnią liczbą całkowitą
n
. - Dane wyjściowe mogą być w dowolnej kolejności, z dowolnym ogranicznikiem, w dowolnej podstawie (choć podstawa ta musi być spójna), z opcjonalnym otwieraniem i zamykaniem nawiasów klamrowych i opcjonalnym końcowym odstępem. Oznacza to, że
1 2 3
,[1,2,3]
i1,11,111
wszystko pasuje tej specyfikacji wyjściowego. - Możesz założyć, że
n
nigdy nie będzie większy niż jedna czwarta czwartego katalogu głównego limitu Twojego języka (bez korzystania z bibliotek). W praktyce możesz założyć, że wartość wejściowa będzie mniejsza niż ta lub 10 000, w zależności od tego, która wartość będzie mniejsza.
Pitagoras czeka na ciebie, więc lepiej napisz swój kod szybko i krótko!
Odpowiedzi:
Pyth - 13 bajtów
Brute zmusza wszystkie możliwe aż do
n^2+1
.Pakiet testowy .
źródło
Galaretka , 8 bajtów
Ta odpowiedź nie jest konkurencyjna, ponieważ wykorzystuje funkcje, które zostały zaimplementowane po opublikowaniu wyzwania. Wypróbuj online!
Podejście to nie wykorzystuje matematyki zmiennoprzecinkowej, więc da poprawną odpowiedź, o ile listy interweniujące mieszczą się w pamięci.
Pomysł
Jeśli (a, b, c) jest potrójną pitagorejską liczbą, istnieją ściśle dodatnie liczby całkowite k, m, n takie, że zachowana jest równość {a, b} = {km 2 - kn 2 , 2kmn} .
W szczególności oznacza to, że a <b 2 i b <a 2 , tak dla wejścia A może po prostu sprawdzić, czy 2 + b 2 jest idealny dla każdego kwadratu B w {1, ... 2 } .
Kod
źródło
Julia, 35 bajtów
Jest to anonimowa funkcja, która przyjmuje liczbę całkowitą i zwraca tablicę.
Dla każdego
i
z 1 do kwadratu wejściowego obliczamy przeciwprostokątną za pomocą wbudowanejhypot
funkcji Julii i określamy, czy część ułamkowa wynosi 0. Jeśli tak, zachowujemy ją, w przeciwnym razie jest wykluczona.źródło
CJam, 17 bajtów
Jest to anonimowa funkcja, która wyrzuca liczbę całkowitą ze stosu i pozostawia tablicę w zamian.
Wypróbuj online!
Pomysł
Jeśli (a, b, c) jest potrójną pitagorejską liczbą, istnieją ściśle dodatnie liczby całkowite k, m, n takie, że zachowana jest równość {a, b} = {km 2 - kn 2 , 2kmn} .
W szczególności oznacza to, że a <b 2 i b <a 2 , tak dla wejścia A może po prostu sprawdzić, czy 2 + b 2 jest idealny dla każdego kwadratu B w {1, ... 2 } .
Kod
źródło
JavaScript ES6, 60
62Taki sam jak inne odpowiedzi, sprawdzanie od 1 do * a-1
Dzięki @ Mwr247 najkrótszym sposobem na zbudowanie zakresu w ES6
2 bajty zaoszczędzone dzięki produkcji @ETH
źródło
a=>[...Array(a*a).keys()].filter(b=>b&&!(Math.hypot(a,b)%1))
C, 96 bajtów
Na przemian zwiększaj
y
(druga noga) iz
(przeciwprostokątna), aż ich różnica spadnie do 1. Generuj każdy dokładny wynik (c==0
), jaki napotkasz po drodze.Wywołaj skompilowany program z parametrem n jako parametrem; wyświetli rozdzieloną spacjami listę liczb dziesiętnych.
Oczywiście nie najkrótszy; Mogę znaleźć ukojenie w najszybszym.
źródło
Wolfram Language (Mathematica) , 40 bajtów
Używam nieudokumentowanej formy
Solve
: gdy lista zmiennych jest pominięta, wówczasSolve
domyślnie rozwiązuje wszystkie symbole w wyrażeniu. W ten sposób oszczędzamy 6 bajtów nad bardziej regularnymiSolve[#^2+b^2==c^2,{b,c},PositiveIntegers]
.PositiveIntegers
jest nowy w wersji 12 Mathematica i dlatego nie jest dostępny w TIO . W wersji stacjonarnej Mathematica otrzymujemyźródło
Python 2, 53 bajty
Proste rozwiązanie wykorzystujące kompleks
abs
do obliczenia długości przeciwprostokątnej.n*n
Ponieważ można bezpiecznie stosować jako górną granicę dla drugiej nogi(n*n)^2 + n^2 < (n*n+1)^2
. Zamiast tego spróbowałem użyć rekurencji, ale nie otrzymałem nic krótszego.źródło
Poważnie, 20 bajtów
Ta sama strategia, co w pytaniu xnor: sprawdź
i in range(1,n*n)
wartości gdzieabs(i+nj) % 1 == 0
i wypisz listę. Wypróbuj onlineWyjaśnienie:
źródło
PARI / GP, 36 bajtów
źródło
APL (NARS), 373 znaków, 746 bajtów
komentarz:
Pomysł byłby uwzględniony na wejściu, aby poznać możliwe m, n, które generują przy użyciu t wszystkich potrójnych Pythagorianów, które mają dane wejściowe jako nogę. Test:
źródło
APL (Dyalog Extended) ,
1514 bajtów SBCSAnonimowa ukryta funkcja prefiksu.
Wypróbuj online!
×⍨
kwadrat (podświetlone selfie z mnożenia) argumentu(
…)
Zastosuj następującą anonimową funkcję ukrytą:⍳
t ntegers 1 poprzez argument⍳
pomnóż przez t ntegers 1 przez argument (tj. kwadrat)⊢(
…)
Zastosuj następującą anonimową ukrytą funkcję z argumentem jako lewym argumentem:+
jest sumą∊
członek⊢
to?⍸
Okazy prawdźródło
Perl 5, 43 bajtów
Jeśli chcesz, aby skrypt się zakończył, możemy sprawdzić tylko inne nogi do n², jak wyjaśniono przez xnor , więc mamy 48 bajtów:
źródło
Japt , 16 bajtów
Wypróbuj online!
Jak to działa
źródło
Stax , 8 bajtów
Uruchom i debuguj
W pseudokodzie:
źródło
05AB1E , 10 bajtów
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
MathGolf , 9 bajtów
Wypróbuj online!
Nie można znaleźć dobrego sposobu na usunięcie któregokolwiek
²
, który zajmuje 3/9 bajtów. W przeciwnym razie jest to dość prosteWyjaśnienie
źródło
Java 8, 72 bajty
Wypróbuj online.
Wyjaśnienie:
źródło