Niech (wejście)
Zatem dzielnikami są: 1, 2, 3, 6, 7, 14, 21, 42
Kwadrat każdego dzielnika: 1, 4, 9, 36, 49, 196, 441, 1764
Biorąc sumę (dodanie): 2500
Ponieważ dlatego zwracamy prawdziwą wartość. Jeśli nie jest to idealny kwadrat, zwróć wartość fałszowania.
Przykłady:
42 ---> true
1 ---> true
246 ---> true
10 ---> false
16 ---> false
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach dla każdego języka
Dzięki @Arnauld za wskazanie sekwencji: A046655
code-golf
math
number
decision-problem
Any3nymous użytkownik
źródło
źródło
Odpowiedzi:
R ,
3937 bajtówWypróbuj online!
Wykorzystuje klasyczne podejście „testuj idealnie kwadratowy”, biorąc nie integralną część pierwiastka kwadratowego
S^.5%%1
i przyjmując logiczną negację, ponieważ odwzorowuje zero (idealny kwadrat) naTRUE
i niezeroweFALSE
.Dziękujemy Robertowi S za zaoszczędzenie kilku bajtów!
źródło
scan()
zapisać kilka bajtów?JavaScript (ES7),
46 4442 bajtówZapisano 1 bajt dzięki @Hedi
Wypróbuj online!
Skomentował
źródło
d
dzieje zn
aby0
zamiast2
don
tak:n=>!((g=d=>d?d*d*!(n%d)+g(d-1):0)(n)**.5%1)
05AB1E , 5 bajtów
Wypróbuj online!
W jaki sposób?
źródło
Język programowania Szekspira ,
434428415 bajtówWypróbuj online!
-13 bajtów dzięki Jo King!
Wyjścia
1
dla prawdziwego wyniku, wyniki0
dla fałszywego wyniku.źródło
Python 2 , 55 bajtów
Wypróbuj online!
źródło
Neim , 5 bajtów
Wyjaśnienie:
Wypróbuj online!
źródło
C (gcc) ,
67636059 bajtów-1 bajty dzięki @JonathanFrech
Wypróbuj online!
źródło
++i<=n
byći++<n
?Brachylog ,
128 bajtów-4 bajty dzięki Fatelize, bo nie zdawałem sobie sprawy, że brachylog ma funkcje czynników
wyjaśnienie
Wypróbuj online!
źródło
f^₂ᵐ
jest 4 bajty krótszy niżḋ{⊇×^₂}ᵘ
MathGolf ,
54 bajtówWypróbuj online!
Wyjaśnienie
Bardzo podobny do innych odpowiedzi, w porównaniu do 05AB1E Zyskuję jeden bajt dla mojego operatora „jest idealny kwadrat”.
źródło
MATL , 9 bajtów
Wypróbuj online!
Tak proste, jak to możliwe
źródło
PowerShell ,
6856 bajtówWypróbuj online!
Wydaje się długi ...-12 bajtów dzięki mazzy
Robi dokładnie to, co mówi na puszce. Pobiera zakres od
1
do wejścia$n
i mnoży kwadratowe$_*$_
razy, bez względu na to, czy jest to dzielnik, czy nie!($n%$_)
. To powoduje, że dzielniki są równe liczbie niezerowej, a niepodzielniki równe zeru. Następnie pobieramy ich sumę za pomocą naszego akumulatora$a
. Następnie znów pętla od1
góry do$a
i wyciągnąć te numery, gdzie|?{...}
to jest kwadrat-eq
seksualnego do$a
. Pozostaje to w potoku, a dane wyjściowe są niejawne.Wypisuje dodatnią liczbę całkowitą dla prawdy i nic dla falsey.
źródło
$args[0]
jest krótszy :)1..$args[0]|%{$a+=$_*$_*!($n%$_)};1..$a|?{$_*$_-eq$a}
$n
wewnątrz pętli!($n%$_)
. Ale przepisanie sumy pozwoliło zaoszczędzić 12 bajtów, więc dziękuję!$args[0]
jest krótszy :)Japt ,
1197 bajtów-2 bajty z @Giuseppe i kolejne -2 z @Shaggy
Wypróbuj online!
źródło
APL (Dyalog Unicode) , 18 bajtów
Wypróbuj online!
Anonimowa lambda. Zwraca 1 dla prawdy i 0 dla fałszu (przypadki testowe w TIO są wstępnie zapisane).
Krzyki do @ H.PWiz na 4 bajty!
W jaki sposób:
źródło
not
zamiast0=
zaoszczędzić bajt?not
operator APL (~
), gdy jest używany monadycznie, działa tylko z logicznymi wartościami logicznymi (0 lub 1). Ponieważ dowolna liczba modulo 1 nigdy nie jest równa 1, gdybym użyła~
zamiast niej0=
, dostałbymdomain error
dowolną liczbę, która nie jest idealnym kwadratem, ponieważ wartości dziesiętne są poza~
domeną. Co więcej, nie mogę po prostu pominąć0=
, ponieważ prawdziwa wartość APL to 1, a nie 0, i nie miałby spójnego wyniku dla wartości fałszowania.K (oK) ,
262522 bajtówRozwiązanie:
Wypróbuj online!
Wyjaśnienie:
Uwagi:
źródło
Pari / GP , 23 bajty
Wypróbuj online!
źródło
Matlab,
3937 bajtówNiestety nie działa na Octave (na tio), więc nie ma łącza do tio.
Uwaga Jak stwierdzono w @LuisMendo,
divisors()
należy do Symbolic Toolbox.źródło
divisors
należy do Symbolic Toolbox. Należy podać to w tytule. Możesz także użyć~···
zamiast···==0
sum(...)^.5
zamiastsqrt(sum(...))
Haskell ,
786453 bajtów-14 bajtów dzięki Ørjan Johansen . -11 bajtów dzięki ovs .
Wypróbuj online!
Hej, minęło trochę czasu, odkąd ... napisałem jakikolwiek kod, więc mój Haskell i gra w golfa mogą być trochę zardzewiałe. Zapomniałem kłopotliwych typów numerycznych Haskella. : P
źródło
Pyt , 7 bajtów
Wypróbuj online!
Wyjaśnienie
Wypróbuj online!
Wyjaśnienie
Wypróbuj online!
Wyjaśnienie
źródło
Łuska , 6 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka , 6 bajtów
Wypróbuj online! Lub zobacz zestaw testowy .
W jaki sposób?
źródło
Proton , 41 bajtów
Wypróbuj online!
Podobne podejście do odpowiedzi w języku Python.
źródło
Mathematica, 32 bajty
Czysta funkcja. Pobiera liczbę jako dane wejściowe i zwraca
True
lubFalse
dane wyjściowe. Nie do końca pewny, czy istnieje krótsza metoda sprawdzania idealnych kwadratów.źródło
Octave / MATLAB, 43 bajty
Wypróbuj online!
źródło
Czerwony , 67 bajtów
Wypróbuj online!
źródło
Scala ,
6867 bajtówWypróbuj online!
źródło
Perl 6 , 34 bajtów
-1 bajt dzięki nwellnhof
Wypróbuj online!
źródło
**.5
jest o jeden bajt krótszy niż.sqrt
.F #, 111 bajtów
Wypróbuj online!
Więc
d
dostaje dzielniki dla wszystkich liczb od 1 don
włącznie. W głównej funkcjiu
pierwszy wiersz przypisuje sumę wszystkich dzielników kwadratowych dom
. Druga linia pobiera dzielnikim
i określa, czy którykolwiek z nich jest równym
.źródło
Perl 5, 47 bajtów
Zwraca 1 za prawdę, a nic za fałsz.
Wyjaśnienie:
źródło
Groovy , 47 bajtów
Lambda akceptuje argument liczbowy.
Wyjaśnienie
(1..n)
tworzy tablicę wartości od 1 do nn%i
jest fałszem (ponieważ 0 jest fałszem), jeślii
dzielin
bez resztyn%i ? 0 : i*i
jest sumą kwadratu wartości,i
jeśli dzielin
bez reszty, w przeciwnym razie wynosi 0sum{ i-> n%i ? 0 : i*i }
podsumowuje poprzedni wynik dla wszystkichi
w tablicy.s%Math.sqrt(s)
jest fałszem (ponieważ 0 jest fałszem), jeśli sqrts
dzielis
bez reszty!(s%Math.sqrt(s))
zwraca z lambda (return
domyślnie na ostatniej instrukcji),!false
gdy sqrts
dzielis
bez resztyWypróbuj online!
źródło
Java 8,
7570 bajtów-5 bajtów dzięki @ archangel.mjj .
Wypróbuj online.
Wyjaśnienie:
źródło
n->{int s=0,i=0;for(;++i<=n;)s+=n%i<1?i*i:0;return Math.sqrt(s)%1==0;}