Misalkan (Input)
Maka pembagi adalah: 1, 2, 3, 6, 7, 14, 21, 42
Mengkuadratkan setiap pembagi: 1, 4, 9, 36, 49, 196, 441, 1764
Mengambil jumlah (menambahkan): 2500
Karena maka kami mengembalikan nilai kebenaran. Jika itu bukan kuadrat sempurna, kembalikan nilai falsy.
contoh:
42 ---> true
1 ---> true
246 ---> true
10 ---> false
16 ---> false
Ini adalah kode-golf sehingga kode terpendek dalam byte untuk setiap bahasa menang
Terima kasih kepada @Arnauld karena menunjukkan urutannya: A046655
code-golf
math
number
decision-problem
Pengguna any3nymous
sumber
sumber
Jawaban:
R ,
3937 byteCobalah online!
Menggunakan pendekatan "test if perfect square" klasik, mengambil bagian non-integral dari akar kuadrat
S^.5%%1
dan mengambil negasi logis dari itu, karena memetakan nol (kuadrat sempurna) keTRUE
dan bukan nol keFALSE
.Terima kasih kepada Robert S karena telah menghemat beberapa byte!
sumber
scan()
untuk menyimpan beberapa byte?JavaScript (ES7),
46 4442 byteDisimpan 1 byte berkat @Hedi
Cobalah online!
Berkomentar
sumber
d
pergi darin
ke0
bukan2
untukn
seperti ini:n=>!((g=d=>d?d*d*!(n%d)+g(d-1):0)(n)**.5%1)
05AB1E , 5 byte
Cobalah online!
Bagaimana?
sumber
Bahasa Pemrograman Shakespeare ,
434428415 byteCobalah online!
-13 byte terima kasih kepada Jo King!
Keluaran
1
untuk hasil benar, keluaran0
untuk hasil salah.sumber
Python 2 , 55 byte
Cobalah online!
sumber
Neim , 5 byte
Penjelasan:
Cobalah online!
sumber
C (gcc) ,
67636059 byte-1 byte, terima kasih kepada @JonathanFrech
Cobalah online!
sumber
++i<=n
menjadii++<n
?Brachylog ,
128 byte-4 Bytes berkat Fatelize karena saya tidak menyadari brachylog memiliki fungsi faktor
penjelasan
Cobalah online!
sumber
f^₂ᵐ
lebih pendek 4 byte dariḋ{⊇×^₂}ᵘ
MathGolf ,
54 byteCobalah online!
Penjelasan
Sangat mirip dengan jawaban lain, dibandingkan dengan 05AB1E saya mendapatkan satu byte untuk operator "is perfect square" saya.
sumber
MATL , 9 byte
Cobalah online!
Sesederhana itu
sumber
PowerShell ,
6856 byteCobalah online!
Tampak panjang ...-12 byte berkat mazzy
Melakukan persis apa yang tertulis di kaleng. Membawa rentang dari
1
ke input$n
dan mengalikan kuadrat$_*$_
kali apakah itu pembagi atau tidak!($n%$_)
. Ini membuat pembagi sama dengan angka bukan nol dan pembagi tidak sama dengan nol. Kami kemudian mengambil jumlah dari mereka dengan akumulator kami$a
. Selanjutnya, kita loop lagi dari1
atas ke$a
dan menarik angka-angka di mana|?{...}
itu-eq
kuadratkan ke$a
. Yang tersisa di pipa dan output tersirat.Menghasilkan bilangan bulat positif untuk kebenaran, dan tidak ada untuk falsey.
sumber
$args[0]
lebih pendek :)1..$args[0]|%{$a+=$_*$_*!($n%$_)};1..$a|?{$_*$_-eq$a}
$n
di dalam loop untuk!($n%$_)
. Tetapi, penulisan ulang jumlah yang Anda lakukan berhasil menghemat 12 byte, jadi terima kasih!$args[0]
Japt ,
1197 byte-2 byte dari @Giuseppe dan -2 dari @Shaggy
Cobalah online!
sumber
APL (Dyalog Unicode) , 18 byte
Cobalah online!
Lambda anonim Mengembalikan 1 untuk truey dan 0 untuk falsy (kasus uji di TIO sudah dipraih).
Shoutouts to @ H.PWiz selama 4 byte!
Bagaimana:
sumber
not
daripada0=
menyimpan byte?not
operator APL (~
), bila digunakan secara monadik, hanya bekerja dengan boolean (baik 0 atau 1). Karena angka apa pun modulo 1 tidak pernah sama dengan 1, jika saya menggunakan~
alih-alih0=
, saya akan mendapatkandomain error
angka berapa pun yang bukan kuadrat sempurna, karena nilai desimal berada di luar~
domain. Selain itu, saya tidak bisa begitu saja menghilangkan0=
, karena nilai kebenaran APL adalah 1, bukan 0, dan itu tidak akan memiliki output yang konsisten untuk nilai-nilai palsu.K (oK) ,
262522 byteLarutan:
Cobalah online!
Penjelasan:
Catatan:
sumber
Pari / GP , 23 byte
Cobalah online!
sumber
Matlab,
3937 byteSayangnya, itu tidak berfungsi pada Oktaf (pada tio) jadi tidak ada tautan tio.
Catatan Seperti yang dikatakan @LuisMendo,
divisors()
milik Symbolic Toolbox.sumber
divisors
milik Symbolic Toolbox. Anda harus menyatakannya dalam judul. Selain itu, Anda dapat menggunakannya~···
sebagai pengganti···==0
sum(...)^.5
bukansqrt(sum(...))
Haskell ,
786453 byte-14 byte terima kasih Ørjan Johansen . -11 byte berkat ovs .
Cobalah online!
Hei, sudah lama sejak saya ... menulis apa pun kode , sehingga Haskell dan golf saya mungkin agak berkarat. Saya lupa tipe numerik Haskell yang merepotkan. : P
sumber
Pyt , 7 byte
Cobalah online!
Penjelasan
Cobalah online!
Penjelasan
Cobalah online!
Penjelasan
sumber
Sekam , 6 byte
Cobalah online!
Penjelasan
sumber
Jelly , 6 byte
Cobalah online! Atau lihat test-suite .
Bagaimana?
sumber
Proton , 41 byte
Cobalah online!
Pendekatan serupa dengan jawaban Python.
sumber
Mathematica, 32 byte
Fungsi murni. Mengambil angka sebagai input dan mengembalikan
True
atauFalse
sebagai output. Tidak sepenuhnya yakin apakah ada metode yang lebih pendek untuk memeriksa kuadrat sempurna.sumber
Oktaf / MATLAB, 43 byte
Cobalah online!
sumber
Merah , 67 byte
Cobalah online!
sumber
Scala ,
6867 byteCobalah online!
sumber
Perl 6 , 34 byte
-1 byte terima kasih kepada nwellnhof
Cobalah online!
sumber
**.5
lebih pendek satu byte dari.sqrt
.F #, 111 byte
Cobalah online!
Jadi
d
dapatkan pembagi untuk semua angka antara 1 dann
inklusif. Dalam fungsi utamau
, baris pertama menetapkan jumlah semua pembagi kuadratm
. Baris kedua mendapatkan pembagi untukm
dan menentukan apakah ada yang kuadrat samam
.sumber
Perl 5, 47 byte
Mengembalikan 1 untuk true dan nothing for false.
Penjelasan:
sumber
Asyik , 47 byte
Seorang lambda menerima argumen numerik.
Penjelasan
(1..n)
menciptakan larik nilai 1 hingga nn%i
salah (seperti 0 adalah salah) jikai
membaginyan
tanpa sisan%i ? 0 : i*i
adalah jumlah kuadrat dari nilaii
jika ia membagin
tanpa sisa, jika tidak adalah 0sum{ i-> n%i ? 0 : i*i }
menjumlahkan hasil sebelumnya di semuai
dalam array.s%Math.sqrt(s)
salah (seperti 0 adalah salah) jika sqrt daris
membagis
tanpa sisa!(s%Math.sqrt(s))
kembali dari lambda (return
tersirat pada pernyataan terakhir)!false
ketika sqrt daris
membagis
tanpa sisaCobalah online!
sumber
Java 8,
7570 byte-5 byte terima kasih kepada @ archangel.mjj .
Cobalah online.
Penjelasan:
sumber
n->{int s=0,i=0;for(;++i<=n;)s+=n%i<1?i*i:0;return Math.sqrt(s)%1==0;}