W Base-10 wszystkie idealne kwadraty kończą się cyframi 0 , 1 , 4 , 5 , 6 lub 9 .
W Base-16 wszystkie idealne kwadraty kończą się cyframi 0 , 1 , 4 lub 9 .
Nilknarf opisuje, dlaczego tak jest i jak to bardzo dobrze rozwiązać w tej odpowiedzi, ale dam również krótki opis tutaj:
Kwadratowa liczba Base-10, N , cyfra „jedynki” nie ma wpływu na to, co jest w cyfrze „dziesiątki” lub cyfra „setki” i tak dalej. Tylko cyfra „jedynki” w N wpływa na cyfrę „jedynki” w N 2 , więc łatwym (ale może nie najbardziej golfowym) sposobem znalezienia wszystkich możliwych ostatnich cyfr dla N 2 jest znalezienie n 2 mod 10 dla wszystkich 0 <= n < 10 . Każdy wynik jest możliwą ostatnią cyfrą. Dla Base-m można znaleźć n 2 mod m dla wszystkich 0 <= n < m .
Napisz program, który otrzyma wejście N , wypisuje wszystkie możliwe ostatnie cyfry idealnego kwadratu w Base-N (bez duplikatów). Możesz założyć, że N jest większe od 0 i że N jest wystarczająco małe, aby N 2 się nie przelał (jeśli możesz przetestować aż do N 2 , dam ci skończoną liczbę punktów brownie, ale wiedz, że kurs wymiany punktów brownie na punkty rzeczywiste wynosi nieskończoność do jednego).
Testy:
Input -> Output
1 -> 0
2 -> 0,1
10 -> 0,1,5,6,4,9
16 -> 0,1,4,9
31 -> 0,1,2,4,5,7,8,9,10,14,16,18,19,20,25,28
120 -> 0,1,4,9,16,24,25,36,40,49,60,64,76,81,84,96,100,105
to jest golf golfowy , więc obowiązują standardowe zasady!
(Jeśli uznasz to za zbyt łatwe lub chcesz uzyskać bardziej dogłębne pytanie na ten temat, rozważ to pytanie: Minimalne pokrycie zasad dla kwadratowego badania pozostałości kwadratowości ).
źródło
Odpowiedzi:
Galaretka , 5 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Arkusze Google,
525147 bajtówZaoszczędź 4 bajty dzięki Taylor Scott
Arkusze automatycznie dodają 4 nawiasy zamykające na końcu formuły.
Nie zwraca wyników w kolejności rosnącej, ale zwraca prawidłowe wyniki.
źródło
)
s dla -4 bajtów05AB1E , 5 bajtów
Wypróbuj online! lub jako pakiet testowy
źródło
s
tu działa? Czy dane są powtarzane?s
jestpop a,b; push b,a
. Gdy polecenie próbuje wyskoczyć coś ze stosu i nic nie pozostało, używane jest następne wejście. Jeśli nie ma już żadnych danych wejściowych, używane jest ostatnie wejście ( oto przykład ). W tym przypadku mogłem użyć,¹
który wypycha pierwsze wejście, ales
działa lepiej dla zestawu testowego.Ln¹%ê
jest tutaj równoważne.s
.Swift ,
47 3532 * bajtów* -3 dzięki @Alexander.
Być może pierwszy raz w historii Szybkie
więzipokonały Pythona?Wypróbuj online!
Wyjaśnienie
(0..<m).map{}
- Iteruje przez zakres[0...m)
i mapuje następujące wyniki:$0*$0%m
- Kwadrat każdej liczby całkowitej modulo podstawym
.Set(...)
- Usuwa duplikaty.m in
- Przypisuje bazę do zmiennejm
źródło
C #, 63 bajty
Wypróbuj online!
źródło
JavaScript (ES6), 52 bajty
Przypadki testowe
Pokaż fragment kodu
Wersja nierekurencyjna,
6058 bajtówZaoszczędź 2 bajty dzięki @ThePirateBay
Przypadki testowe
Pokaż fragment kodu
źródło
m=>(a=[...Array(m).keys()]).filter(v=>a.some(n=>n*n%m==v))
Pyth, 6 bajtów
Wypróbuj online
Jak to działa
źródło
Brachylog ,
109 bajtówWypróbuj online!
Wyjaśnienie
źródło
{>≜^₂;?%}ᵘ
jako alternatywę ... wtedy zdałem sobie sprawę, że są też liczby ujemne. > _ <≜
.>
nadal uwzględniają liczby ujemne afaik.Japt ,
76 bajtówSprawdź to
1 bajt zapisany dzięki Oliverowi
Wyjaśnienie
Domniemane wprowadzenie liczby całkowitej
U
.Utwórz tablicę liczb całkowitych od
0
doU-1
, włącznie i przekaż każdą funkcję.Plac.
Modulo
U
.Pobierz wszystkie unikalne elementy z tablicy i niejawnie wyślij wynik.
źródło
Dz%UÃâ
wydaje się działać dobrze.Python 3 ,
403937 bajtów-1 bajt dzięki Mr. Xcoder. -2 bajty dzięki Business Cat.
Wypróbuj online!
źródło
n**2
zn*n
?range(m)
wystarczyWłaściwie 11 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
CJam , 12 bajtów
Anonimowy blok akceptujący numer i zwracający listę.
Wypróbuj online!
Wyjaśnienie
źródło
{:X{_*X%}%_&}
dla 13 bajtówHaskell , 45 bajtów
-4 bajty od Andersa Kaseorga
Wypróbuj online!
źródło
f m=nub$map((`mod`m).(^2))[0..m]
jest tak samo długa, chyba że istnieje podstępna składnia pozwalająca pozbyć się dodatkowych nawiasów.MATL ,
65 bajtów-1 bajt dzięki @LuisMendo
Wypróbuj online!
źródło
Oktawa , 27 bajtów
Wypróbuj online!
źródło
Mathematica, 30 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 48 bajtów
43 bajty, jeśli zwracanie
Set
zamiast tablicy jest dopuszczalne.źródło
Scala ,
32 lata30 bajtówProste użycie łatwej końcówki z OP.
Wypróbuj online!
-2 bajty dzięki @MrXcoder, z priorytetów (nie ma potrzeby
()
około*
operacji)Zastanawiasz się: czy jest to możliwe, aby pośrednio powiedzieć kompilatorowi, aby rozumiał takie rzeczy
(0 to n-1)map(x=>x*x%n)toSet
(bez koniecznościimport scala.language.postfixOps
)?źródło
(0 to n-1).map(x=>x*x%n).toSet
przez 30 bajtów. Potęgowanie ma wyższy priorytet niż modulo.Haskell , 44 bajty
Wypróbuj online!
źródło
Siatkówka oka , 70 bajtów
Wypróbuj online!Ostrzeżenie: Wolno przy dużych wejściach. Nieco szybsza 72-bajtowa wersja:
Wypróbuj online!
źródło
Clojure, 40 bajtów
źródło
Perl 6 , 19 bajtów
Sprawdź to
Rozszerzony:
źródło
Pyth , 13 bajtów
Wypróbuj online.
Kiepska próba wyjaśnienia:
Aby posortować dane wyjściowe, wstaw
S
po dowolnej stronie pliku{
Myślę, że powinna istnieć krótsza droga ...
źródło
map
jest twoim przyjacielem!Python 2 , 59 bajtów
Wypróbuj online!
źródło
PowerShell , 35 bajtów
Wypróbuj online!
źródło
R , 28 bajtów
Wypróbuj online!
źródło
Rubin ,
3130 bajtówWypróbuj online!
źródło
PHP , 53 bajty
Zapętlaj od 0 do liczby wejściowej, korzystając ze
n^2 mod base
wzoru, aby zaznaczyć używane liczby. Przechodzi do tej pozycji w tablicy, sprawdzając, czy została zwiększona i wyprowadzając ją, jeśli nie. Następnie zwiększa ją, aby zduplikowane wartości nie zostały wydrukowane.Wypróbuj online!
źródło
8th ,
138131 bajtówKod
Wyjaśnienie
[]
- Utwórz tablicę wyjściowąswap dup >r
- Zapisz dane wejściowe do późniejszego wykorzystania( 2 ^ r@ n:mod a:push ) 1 rot loop
- Oblicz kwadratowy koniecrdrop
- Czysty stos r' n:cmp a:sort
- Sortuj tablicę wyjściową' n:cmp >r -1 a:@ swap ( tuck r@ w:exec ) a:filter rdrop nip
- Pozbądź się kolejnych duplikatów z tablicySED (diagram efektu stosu) to:
a -- a
Zastosowanie i przykład
źródło
Perl 5 , 41 + 1 (-n) = 42 bajty
Wypróbuj online!
źródło