Latar Belakang:
Tantangan Angka Sempurna saat ini agak cacat dan rumit, karena ia meminta Anda untuk menghasilkan dalam format yang kompleks yang melibatkan faktor-faktor angka. Ini adalah repost masalah keputusan murni dari tantangan.
Tantangan
Diberi bilangan bulat positif melalui format input standar apa pun , bedakan antara sempurna atau tidak.
Angka sempurna adalah angka yang sama dengan jumlah semua pembagi yang tepat (pembagi positifnya kurang dari itu sendiri). Misalnya, adalah angka sempurna, karena pembagi-nya adalah , yang berjumlah hingga , sedangkan bukan angka yang sempurna karena pembagi-pembaginya ( ) berjumlah hingga , bukan .
Kasus uji:
Imperfect:
1,12,13,18,20,1000,33550335
Perfect:
6,28,496,8128,33550336,8589869056
Aturan
- Program Anda tidak harus menyelesaikan kasus uji yang lebih besar, jika ada memori atau kendala waktu, tetapi harus secara teoritis dapat jika diberikan lebih banyak memori / waktu.
- Output dapat berupa dua nilai yang berbeda dan konsisten melalui format output yang diizinkan . Jika tidak jelas apa yang mewakili Sempurna / Tidak Sempurna, pastikan untuk menentukan jawaban Anda.
1
sempurna, karena setiap angka dapat dibagi dengan1
sendirinya. Jumlah dari pembagi yang tepat1
adalah0
Jawaban:
Brachylog , 4 byte
Cobalah online!
Predikat berhasil untuk input sempurna dan gagal untuk input tidak sempurna, pencetakan
true.
ataufalse.
jika dijalankan sebagai program lengkap (kecuali pada test case terakhir yang membutuhkan lebih dari satu menit pada TIO).sumber
fk
: xNeim , 3 byte
Cobalah online!
(Saya tidak benar-benar tahu cara menjalankan semua kasus uji sekaligus, karena saya mulai belajar Neim sekitar lima belas menit yang lalu, tetapi saya memang memeriksanya secara individual.)
Mencetak 0 untuk imperfect, 1 untuk perfect.
sumber
𝔼
1 byte? Apakah Neim hanya menggunakan 128 karakter yang tidak standar?R ,
3329 byteCobalah online!
Pengembalian
TRUE
untuk angka sempurna danFALSE
untuk yang tidak sempurna.sumber
0
(sempurna) keFALSE
dan bukan nolTRUE
tetapi saya menghapus salah satu dari mereka untuk membalikkan pemetaan. Ini adalah trik golf yang berguna untuk melakukan lemparannumeric
kelogical
, sering bersamaan denganwhich
atau[
.Jelly , 3 byte
Cobalah online!
sumber
Japt
-!
, 4 byteUntuk beberapa alasan
¦
tidak berfungsi pada tio jadi saya harus menggunakan-!
flag dan¥
sebagai gantinyaCobalah online!
sumber
U
tidak dimasukkan secara otomatis sebelumnya!
.Python 3 , 46 byte
Cobalah online!
Brute force, jumlah faktor dan memeriksa kesetaraan.
sumber
lambda x:sum(i for i in range(1,x)if x%i<1)^x
harusnya bekerja juga.Python , 45 byte
True
untuk sempurna;False
untuk orang lain (ganti ini dengan==
->!=
)Cobalah online!
44 4241 byte (-2 terima kasih kepada ovs) jika kita dapat menampilkan menggunakan "truthy vs falsey":(falsey (
0
)) untuk sempurna; kebenaran (bilangan bulat bukan nol) sebaliknyasumber
Oktaf , 25 byte
Cobalah online!
Penjelasan
sumber
JavaScript, 38 byte
Cobalah online!
(Batas waktu testcase terakhir di TIO.)
sumber
f=
setelah mengkonversi dari fungsi rekursif.C # (Visual C # Interactive Compiler) , 46 byte
Mengembalikan 0 jika sempurna, jika tidak, mengembalikan angka positif. Saya tidak tahu apakah mengeluarkan tipe integer yang berbeda diperbolehkan sebagai pengganti dari dua nilai kebenaran dan falsy yang berbeda, dan tidak dapat menemukan diskusi tentang meta tentang hal itu. Jika ini tidak valid, saya akan menghapusnya.
Cobalah online!
C # (Visual C # Interactive Compiler) ,
4947 byteCobalah online!
sumber
Ruby , 33 byte
Cobalah online!
sumber
TI-BASIC (TI-84),
3023 byteSangat tidak efisien, tetapi berhasil.Mengurangi bytecount mempercepat program dengan banyak.
Input di
Ans
.Keluaran dalam
Ans
dan secara otomatis dicetak ketika program selesai.Penjelasan:
(TI-BASIC tidak memiliki komentar, jadi anggap saja
;
membuat komentar)Contoh:
Catatan: Hitungan byte suatu program dievaluasi menggunakan nilai dalam [MEM] > [2] > [7] (36 byte) lalu kurangi panjang nama program
CDGF2
,, (5 byte) dan tambahan 8 byte yang digunakan untuk menyimpan program:36 - 5 - 8 = 23 byte
sumber
Java (JDK) , 54 byte
Cobalah online!
Meskipun untuk nomor ketat dengan nomor yang cocok, berikut ini akan mengembalikan nilai yang sama, tetapi hanya 40 byte.
Cobalah online!
sumber
Your program doesn't have to complete the larger test cases, if there's memory or time constraints, but it should be theoretically able to if it were given more memory/time.
int
sama sekali, tetapi lebih dari ituBigInteger
? Karena Java memilikiBigIntegers
, tetapi tidak akan pernah memilikiint
yang lebih dari 31 bit seperti yang ditandatangani, yang tidak dapat memiliki nilai selain yang diwakili di sini ...int
jenisnya tidak terikatx86 Assembly,
4543 Bytes.Penjelasan (Sintaks Intel):
Input harus disediakan di
EAX
.Fungsi diatur
EAX
ke1
untuk sempurna dan0
untuk tidak sempurna.EDIT : Mengurangi Byte-Count oleh dua dengan mengganti
MOV EAX, $1
denganXOR EAX, EAX
danINC EAX
sumber
Labirin , 80 byte
Karakter Latin
perfect puts zero else neg I
sebenarnya hanya komentar *.yaitu jika input sempurna a
0
dicetak, sebaliknya-1
adalah.Cobalah online!
* jadi ini atau ini bekerja juga ...
Bagaimana?
Dibawa sebagai input bilangan bulat positif
n
dan menempatkan variabel akumulator-n
ke dalam tumpukan bantu, kemudian melakukan tes pembagian untuk setiap bilangan bulat darin-1
bawah hingga, dan termasuk1
, menambahkan apa pun yang membagin
ke akumulator. Setelah ini selesai jika variabel akumulator adalah bukan-nol-1
adalah keluaran, jika tidak maka0
adalah.Ini
?::`}:(
hanya dieksekusi satu kali, pada awal eksekusi:Instruksi berikutnya
"
,, adalah no-op, tetapi kami memiliki tiga instruksi tetangga sehingga kami bercabang sesuai dengan nilai di atas Main, nol membawa kita maju, sedangkan non-nol membawa kita benar.Jika input tadi
1
kita maju karena bagian atas Main adalah nol:Tetapi jika input lebih besar dari
1
kita belok kanan karena bagian atas Main tidak nol:Pada titik ini kami memiliki cabang tiga tetangga, tetapi kami tahu
n-1
tidak nol, jadi kami belok kanan ...Kami sekarang berada di cabang tiga tetangga lainnya di
%
.Jika hasilnya
%
bukan nol, kita ke kiri untuk mengurangi pembagi potensial kitap=p-1
,, dan meninggalkan akumulatora
, seperti:... tetapi jika hasil
%
adalah nol (untuk lulus pertama hanya ketikan=2
) kita pergi langsung ke KEDUA menambahkan pembagi untuk akumulator kami,a=a+p
, DAN pengurangan potensi pembagi kami,p=p-1
:Pada titik ini jika
p-1
masih nol kita belok kiri:... tetapi jika
p-1
mencapai nol kita langsung menuju:
pada baris kedua labirin (Anda telah melihat semua instruksi sebelumnya, jadi saya meninggalkan deskripsi mereka dan hanya memberikan efeknya):Sekarang ini
{
memiliki tiga instruksi tetangga, jadi ...... jika
a
nol, yang akan sempurnan
, maka kita langsung:... jika
a
tidak-nol, yang akan menjadi non-sempurnan
, maka kita belok kiri:sumber
CJam , 17 byte
Cobalah online!
sumber
Javascript, 62
Penjelasan (meskipun sangat sederhana)
Terima kasih kepada Jo King untuk peningkatannya!
sumber
05AB1E , 4 byte
Cobalah online!
Penjelasan
sumber
Powershell,
46 byte,43 byteCobalah secara Online!
Edit: -3 byte terima kasih kepada @AdmBorkBork
sumber
2*$i
untuk menghilangkan subtract-one parens.C (gcc) , 41 byte
Cobalah online!
Beritahu saya jika kegagalan untuk kasus terakhir adalah masalah.
sumber
n=!s;
bukannyareturn!s;
menyimpan 5 byte.s=s
yang lebih mungkin dioptimalkan.Smalltalk, 34 byte
sumber
Keempat (gforth) , 45 byte
Cobalah online!
Penjelasan
Ulangi setiap angka dari 1 hingga n-1, menjumlahkan semua nilai yang membagi n dengan sempurna. Mengembalikan nilai true jika jumlah sama dengan n
Penjelasan Kode
sumber
Pyth , 9
13byteCobalah online!
Terima kasih kepada komentator atas bantuan golfnya
Menemukan semua faktor input, menjumlahkannya, dan membandingkannya dengan input asli.
sumber
q0
dapat diganti dengan!
, danSQ
menghasilkan rentang[1-Q]
, sehingga rentang tersebut[1-Q)
dapat dihasilkan menggunakanStQ
. KarenaQ
s sekarang di akhir program, keduanya dapat dihilangkan. Versi lemah, 9 byte -qsf!%QTSt
Batch, 81 byte
Dibawa
n
sebagai parameter baris perintah dan output1
jika angka yang sempurna. Metode brute force, memulai penjumlahan di-n
sehingga dapat memasukkann
dirinya sendiri dalam loop.sumber
Arang , 13 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Output
-
untuk angka sempurna. Menggunakan kekuatan kasar. Penjelasan:sumber
Bahasa Wolfram (Mathematica) , 14 byte
Cobalah online!
sumber
Pyth, 8 byte
Cobalah online di sini .
sumber
Retina 0.8.2 , 44 byte
Cobalah online! Menggunakan kekuatan kasar, jadi tautan hanya mencakup test case yang lebih cepat. Penjelasan:
Konversikan ke unary.
Cocokkan semua faktor input. Ini menggunakan mode tumpang tindih, yang dalam Retina 0.8.2 mengharuskan semua pertandingan dimulai pada posisi yang berbeda, sehingga pertandingan benar-benar dikembalikan dalam urutan menurun, dimulai dengan input asli.
Kurangi faktor yang tepat dari input.
Uji apakah hasilnya nol.
sumber
Java 8, 66 byte
Seseorang harus menggunakan stream API di beberapa titik, bahkan jika ada cara yang lebih pendek untuk melakukannya
Cobalah online!
sumber
cQuents , 8 byte
Cobalah online!
Penjelasan
sumber