Tantangan
Jadi, um, tampaknya, sementara kita memiliki banyak tantangan yang bekerja dengan bilangan kuadrat atau jumlah bentuk lainnya, kita tidak memiliki satu yang hanya bertanya:
Diberikan integer n
(di mana n>=0
) sebagai input mengembalikan nilai kebenaran jika n
kuadrat sempurna atau nilai falsey jika tidak.
Aturan
- Anda dapat mengambil input dengan cara yang masuk akal, nyaman selama diizinkan oleh aturan I / O standar .
- Anda tidak perlu menangani input yang lebih besar dari apa yang dapat dipilih oleh bahasa pilihan Anda atau yang akan menyebabkan ketidakakuratan titik mengambang.
- Output harus menjadi salah satu dari dua nilai yang konsisten truthy / falsey (misalnya,
true
ataufalse
,1
atau0
) - truthy jika input adalah persegi sempurna, falsey jika tidak. - Ini adalah kode-golf sehingga jumlah byte terendah menang.
Uji Kasus
Input: 0
Output: true
Input: 1
Output: true
Input: 64
Output: true
Input: 88
Output: false
Input: 2147483647
Output: false
code-golf
math
number
decision-problem
Shaggy
sumber
sumber
18014398509481982
(2**54-2
), yang dapat direpresentasikan dengan ganda, dan menyebabkan jawaban yang digunakansqrt
gagal.2**54-2
masih lebih besar daripada yang bisa ditangani dengan aman, setidaknya di JavaScript18014398509481982 > 9007199254740991
2**54-2
ke konsol JS, dan bandingkan dengan apa yang Anda dapatkan18014398509481982
(nilai persisnya). JS menampilkan nilai yang tepat, oleh karena2**54-2
itu direpresentasikan dengan ganda. Jika itu masih tidak meyakinkan Anda, ambil data biner0100001101001111111111111111111111111111111111111111111111111111
, tafsirkan sebagai pelampung presisi ganda IEEE-754, dan lihat nilai apa yang Anda dapatkan.Jawaban:
Neim , 2 byte
Penjelasan:
Ketika saya mengatakan 'tak terbatas' saya maksudkan sampai kita mencapai nilai maksimum long (2 ^ 63-1). Namun, Neim (perlahan) bertransisi menjadi BigIntegers besar yang secara teoritis sangat besar.
Cobalah!
sumber
Jelly , 2 byte
Cobalah online!
sumber
TI-Basic, 4 byte
Cukup periksa apakah akar kuadrat adalah bilangan bulat dengan mencari bagian pecahan / desimal nol.
sumber
C #, 27 byte
Cara yang lebih benar / akurat untuk melakukan ini adalah:
sumber
...<int>==0
adalah...!<int>
saya pikirJavaScript (ES6), 13 byte
Mengembalikan nilai true jika akar kuadrat dari n adalah bilangan bulat.
Potongan:
sumber
dc, 9
Output 1 untuk truey dan 0 untuk falsey.
Cobalah online .
Catatan
dc
's^
perintah eksponensial memberikan 0 0 = 1 dan 0 n = 0, di mana n> 0.sumber
dc
dengan cara yang cerdik.Retina , 18 byte
Cobalah online! Tanpa malu-malu diadaptasi dari jawaban @ MartinEnder untuk Apakah angka ini berbentuk segitiga? tetapi dengan konversi basis disertakan dengan biaya 6 byte.
Perhatikan bahwa Apakah angka ini berbentuk segitiga? bukan karena alasan yang tidak dapat dijelaskan diperlukan untuk mendukung nol sebagai angka segitiga, jadi bagian dari adaptasi adalah menambahkan a
?
untuk menjadikan 1 sebagai opsional, yang memungkinkan grup untuk mencocokkan string kosong, dan karenanya menjadi input nol. Namun, setelah sekarang mencocokkan string kosong,+
operator berhenti mengulangi, untuk menghindari loop tak terbatas yang akan terjadi jika tetap rakus mencocokkan string kosong (setelah semua,^1?
tentu akan tetap cocok). Ini berarti bahwa ia bahkan tidak mencoba untuk mencocokkan alternatif lain dalam grup, sehingga menghindari kecocokan 2, 6, 12 dll. Seperti yang ditunjukkan oleh @MartinEnder, cara yang lebih sederhana untuk menghindari itu sambil tetap mencocokkan string kosong adalah dengan jangkar pertandingan di awal sementara membuat opsional kelompok untuk menghitung byte yang sama:^(^1|11\1)*$
.sumber
2
,6
atau nomor lainnya dari formulirn^2-n
. ;) (Cara untuk menghindari penjelasan untuk jumlah byte yang sama adalah^(^1|11\1)*$
.)(^|1\1)+$
, saya pikir?+
itu juga akan berhenti pengulangan jika tidak ada lagi alternatif kosong, misalnya dalam kasus((?(1)11\1|1?))+
. Setelah ada iterasi kosong, itu tidak akan mencoba yang lebih lanjut, terlepas dari apakah mereka mungkin kosong atau tidak.C (gcc), 30 byte
Cobalah online!
C, 34 byte
Cobalah online!
C, 33 byte
Cobalah online!
sumber
MATL ,
54 byteTerima kasih kepada Luis untuk mengurangi kode satu byte saya yang lebih panjang dengan dua byte, menjadikannya yang terpendek.
Cobalah online
Penjelasan:
Jawaban lama:
Cobalah online!
sumber
mod(2**127-, 1000)
. Kecuali jika empat angka terakhir adalah 0 ....t:Um
. Itu bekerja untuk input hingga2^53
, karena presisi titik apung terbatasU: str2num / string to array / square
. Saya tahu harus ada fungsi persegi, tapi saya tidak bisa menemukannya ...Python 3 ,
4038 byteTerima kasih kepada squid karena telah menghemat 2 byte!
Cobalah online!
Terlalu lambat untuk mengembalikan jawaban
2147483647
dalam jumlah waktu yang wajar. (Tetapi ditulis menggunakan generator untuk menghemat memori, karena tidak ada biaya byte.)Bekerja di Python 2 juga, meskipun
OverflowError
kemungkinan karenarange
jika Anda mencobanya dengan input besar. (AMemoryError
juga kemungkinan ada di Python 2, juga karenarange
.)sumber
Perl 5 , 14 byte
13 byte kode +
-p
bendera.Cobalah online!
Hitung akar kuadrat, dan lihat apakah itu bilangan bulat (lebih tepatnya, jika tidak mengandung titik (
/\./
).sumber
05AB1E , 4 byte
Cobalah online!
sumber
4111817668062926054213257208
2**127-1
, perdana Mersenne).Python 3 , 19 byte
Cobalah online!
sumber
4111817668062926054213257208
.lambda n:int(n**.5)**2==n
sqrt
) gagal pada nilai-nilai yang berada di luar kisaran ganda, seperti2**4253-1
.%1
pasti<1
, jadi proposal Anda akan kembali benar untuk semua input. Perhatikan bahwa itun**.5
adalah pelampung.SageMath , 9 byte
Cobalah online
Fungsi bawaan melakukan apa yang tertulis di kaleng. Karena Sage menggunakan perhitungan simbolik, itu bebas dari kesalahan akurasi komputasi yang mengganggu IEEE-754 mengapung.
sumber
Japt , 3 byte
Cobalah online!
Tampaknya berfungsi dengan baik
2**54-2
dalam Japt Interpreter tetapi gagal pada TIO karena beberapa alasan ...sumber
2**127-1
, prime Mersenne).2**127-1
baik dalam kisaran ganda.2**53-1
?2**127-1
sebagai angka. Yang paling dekat yang bisa didapat adalah2**127
.Haskell,
2624 byteCobalah online!
Cek apakah n ada dalam daftar semua kotak dari
0
hinggan
.sumber
f n=or[i*i==n|i<-[0..n]]
:)Prolog (SWI) , 27 byte
Cobalah online!
Penjelasan
Menelusuri semua angka yang lebih besar atau sama dengan
0
dan kurang dari atau sama denganN
dan menguji apakah angka kuadrat itu sama denganN
.sumber
MathGolf , 1 byte
Cobalah online!
Saya pikir tidak diperlukan penjelasan. Saya melihat perlunya operator "kotak yang sempurna" sebelum saya melihat tantangan ini, karena bahasanya dirancang untuk menangani tantangan golf terkait matematika. Mengembalikan 0 atau 1, karena MathGolf menggunakan bilangan bulat untuk mewakili boolean.
sumber
PHP, 21 byte
Jika akar kuadrat bukan angka integer,
(-1)**$argn**.5
adalahNAN
.sumber
-F
bendera dan pipa:echo 144 | php -F script.php
.f
punya surat itu. Terima kasih.Ruby, 25 byte
Mungkin ada cara yang lebih pendek tapi hanya itu yang saya temukan.
Cobalah online!
sumber
CJam , 8 byte
Cobalah online!
Penjelasan
Root kuadrat integer, kuadrat, bandingkan dengan angka asli.
sumber
mq1%0=
, yang juga 6 byte{
...}
untuk membuat kode fungsi, jumlah byte yang samari
diperlukan dalam hal iniMathematica, 13 byte
Cobalah online!
sumber
AtomQ
bukanIntegerQ
.@*
.AtomQ@*Sqrt
adalah sinonim untukAtomQ@Sqrt@#&
. Misalnya,AtomQ@*Sqrt@4
pengembalianTrue
danAtomQ@*Sqrt@5
pengembalianFalse
. (Karena didahulukan,AtomQ@*Sqrt[4]
tidak berfungsi dengan benar, kembaliAtomQ@*2
.)APL (Dyalog) , 8 byte
Cobalah online!
0=
adalah nol sama dengan1|
modulus-1 (yaitu bagian fraksional) dari*∘.5
Argumen itu memunculkan kekuatan setengahsumber
AWK , 27 + 2 byte
Cobalah online!
Tambahkan
+2
byte untuk menggunakan-M
flag untuk presisi yang sewenang-wenang. Saya awalnya menggunakan perbandingan string karena jumlah besar dibandingkan sama, meskipun mereka tidak, tetapisqrt
juga mengembalikan nilai yang tidak tepat.2^127-2
seharusnya bukan persegi yang sempurna.sumber
T-SQL, 38 byte
Mencari titik desimal di akar kuadrat.
IIF
khusus untuk MS SQL, diuji dan berfungsi di MS SQL Server 2012.Input pada kolom a dari tabel t yang sudah ada , sesuai aturan input kami .
sumber
Ohm , 2 byte
Menggunakan
CP-437
penyandian.Penjelasan
Input Tersirat -> Built-in kuadrat sempurna -> Output Tersirat ...
sumber
Java 8, 20 byte
Masukan adalah
int
.Coba di sini.
sumber
int
,long
,short
. Dan dengan pertanyaan di mana mereka meminta integer tetapi format input fleksibel, saya kadang-kadang menggunakan input String untuk menyimpan beberapa byte. Secara pribadi saya pikir menggunakann->
baik-baik saja, dan Anda harus menyatakan apa jenisnya, tetapi tampaknya tidak semua orang setuju dengan ini. Di sisi lain, berasal dari sejarah jawaban Java 7, pergi dariint c(int n){return ...;}
ke(int n)->...
merek yang lebih masuk akal daripadan->...
(meskipun saya pribadi lebih suka yang kedua sejak lebih pendek tentu saja).R, 15
^ .5 lebih kecil byte daripada sqrt (). %% 1, modulus, akan menghasilkan 0 jika jawabannya adalah interger. scan () mengambil input pengguna.
http://www.tutorialspoint.com/execute_r_online.php?PID=0Bw_CjBb95KQMSm1qVktIOUdSSDg
sumber
Tambahkan ++ ,
241311 byteCobalah online!
Saya menghapus fungsi kikuk di bagian atas dan menulis ulang ke dalam tubuh pertanyaan untuk menghapus 11 byte.
Karena bagian pertama sudah dijelaskan di bawah, mari kita cari tahu cara kerja bagian baru
Versi lama, 24 byte
Cobalah online!
Fungsi di atas (
D,i,@,1@%!
) adalah bagian utama dari program, jadi mari kita masuk ke detail lebih lanjut.sumber
Python 3 ,
28 2725 byteCobalah online!
sumber