Ini tantangan pertamaku!
Latar Belakang
Angka sempurna adalah bilangan bulat positif, yaitu sama dengan jumlah semua pembagi, kecuali itu sendiri.
Begitu 6
juga angka sempurna, karena 1 + 2 + 3 = 6
.
Di sisi lain 12
tidak, karena 1 + 2 + 3 + 4 + 6 = 16 != 12
.
Tugas
Tugas Anda sederhana, tulis sebuah program, yang akan, misalnya n
, mencetak salah satu pesan ini:
Saya angka sempurna, karena
d1 + d2 + ... + dm = s == n
saya bukan angka sempurna, karenad1 + d2 + ... + dm = s [<>] n
Di mana
d1, ... dm
semua pembagi n
kecuali n
.
s
adalah jumlah semua pembagi d1, ..., dm
(sekali lagi, tanpa n
).
[<>]
adalah <
(jika s < n
) atau >
(jika s > n
).
Contohnya
Untuk n
menjadi 6
: "Saya seorang angka sempurna, karena 1 + 2 + 3 = 6 == 6"
untuk n
menjadi 12
: "Saya bukan angka sempurna, karena 1 + 2 + 3 + 4 + 6 = 16> 12"
untuk n
makhluk 13
: "Saya bukan angka sempurna, karena 1 = 1 <13"
Aturan
n
tidak lebih besar dari standar bahasa Andaint
.- Anda dapat membaca
n
dari input standar, dari argumen baris perintah atau dari file. - Pesan keluaran harus dicetak pada keluaran standar dan tidak ada karakter tambahan yang dapat muncul di keluaran (mungkin ada spasi tambahan atau baris baru)
- Anda tidak boleh menggunakan fungsi perpustakaan atau built-in apa pun yang akan menyelesaikan tugas (atau bagian utamanya) untuk Anda. Tidak
GetDivisors()
atau semacamnya. - Semua celah standar lainnya berlaku.
Pemenang
Ini adalah kode-golf sehingga kode terpendek dalam byte menang!
sumber
=
dan==
dalam persamaan yang sama? Itu tidak masuk akal. Itu harusd1 + d2 + ... + dm = s = n
IMO.Jawaban:
Pyth, 81 byte
Cobalah online: Demonstrasi atau Test Suite
Penjelasan:
sumber
Java,
255270 byte (Masih FF di basis 17)Dan versi yang lebih mudah dibaca:
Sebelumnya tidak bekerja untuk angka ganjil, jadi saya harus mengubah beberapa hal. Setidaknya saya beruntung dengan hitungan byte lagi. :)
sumber
R,
158163157153143141 byteSaya pikir masih ada ruang untuk bermain golf.
Sunting: Diganti
if(b<n)'<'else if(b>n)'>'else'=='
denganc('<'[b<n],'>'[b>n],'=='[b==n])
. Thepaste(...)
diganti denganrbind(...)[-1]
. Terima kasih @plannapus untuk beberapa byte lagi.Tidak disatukan
Uji coba
sumber
+
masuk di antara pembagi.rbind
trik yang brilian ! Anda dapat menyimpan 2 byte tambahan jika Anda menetapkan2:n-1
ke variabel, katakana
:which(!n%%1:(n-1))
demikian menjadia[!n%%a]
. (Kode lengkapnya saat itun=scan();a=2:n-1;b=sum(w<-a[!n%%a]);cat('I am','not'[b!=n],'a perfect number, because',rbind('+',w)[-1],'=',b,c('<'[b<n],'>'[b>n],'==')[1],n)
)Python 2,
183173170 byteContoh:
Terima kasih kepada xnor karena telah menghemat 13 byte!
sumber
'=<>'[cmp(b,d)]
- bergabung dengan revolusi!b%i<1
untukb%i==0
. Sebab['not ',''][int(d==b)]
, Anda tidak perluint
, karena Python akan mengonversi secara otomatis. Apalagi, Anda bisa menggunakan string mulitplication"not "*(d!=b)
."=<>="[cmp(b,d)%3::3]
.Julia,
161157 byteTidak Disatukan:
sumber
CJam, 90 byte
Sebagai perbandingan, mencetak satu
=
dapat dicapai dalam 83 byte.Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
sumber
Perl, 148 Bytes
Dengan jeda baris:
sumber
'not '
dan'==','>','<'
pernyataan dan beralih dari.
ke,
(karena tidak ada yang ditambahkan saatprint
daftar). Juga memindahkan tugas Anda ke parens saat pertama kali digunakan menghemat pasangan, dan jika Anda mengubah sedikit logika menjadigrep$a%_<1,1..($a=<>)-1
dan$a!=($s=eval)&&'not '
Anda harus mencukur sedikit lagi! Semoga semua masuk akal!Lua,
244231 byteGolf:
Tidak Disatukan:
sumber
JavaScript (ES6), 146
Menggunakan string template, ini berfungsi di Firefox dan Chrome terbaru.
sumber
Ruby,
174160155136134128122 BytesDisimpan 6 Bytes lain :)
Terima kasih untuk Tips bermain golf di Ruby
sumber
C #, 252 byte
sumber
Hassium , 285 Bytes
Penafian: Bekerja dengan hanya versi terbaru dari Hassium karena masalah dengan args baris perintah.
Versi yang lebih mudah dibaca:
}
sumber
mono src/Hassium/bin/Debug/Hassium.exe t.hs 6
, katanyaSystem.ArgumentException: The file 6 does not exist.
. 2. Ini tidak berfungsi dengan versi ini , yang merupakan komit terbaru sebelum tantangan ini diposting. Harap tambahkan penafian atas jawaban Anda yang menyatakan bahwa kiriman Anda tidak bersaing.@Dennis
komentar Anda. Jika tidak, saya tidak mendapat pemberitahuan tentang balasan Anda.)MATLAB, 238
Tidak akan pernah menjadi yang terpendek dari semua bahasa, tapi inilah upaya saya dengan MATLAB:
Dan ini dalam bentuk yang sedikit lebih mudah dibaca:
Saya berhasil menyimpan 2 byte lebih banyak dengan tidak menggunakan fungsi. Alih-alih Anda menjalankan baris kode dan meminta nomor sebagai input. Setelah dijalankan akan menampilkan output di akhir.
sumber
Perl 6 , 138 byte
(Hitungan mengabaikan baris baru, dan indentasi, karena mereka tidak diperlukan)
@d
adalah array yang memegang pembagi.$s
memegang jumlah pembagi.$c
adalah nilai perbandingan antara input, dan jumlah pembagi.(Efektif
$c
adalah salah satu-1
,0
,1
, tapi benar-benar salah satuOrder::Less
,Order::Same
atauOrder::More
)Di
'not 'x?$c
,?$c
dalam hal ini secara efektif sama denganabs $c
, danx
merupakan operator pengulangan string.«> == <»
kependekan dari( '>', '==', '<' )
.Karena
$c
memiliki salah satunya-1,0,1
, kita harus mengubahnya satu per satu untuk dapat menggunakannya untuk mengindeks ke dalam daftar.Secara teknis ini akan bekerja untuk angka-angka di atas 2 but, tetapi membutuhkan waktu yang sangat banyak untuk angka-angka di atas 2¹⁶.
sumber
Pyth, 84 byte
Jawaban tidak valid, karena saya menolak untuk mengimplementasikan
=
dan==
dalam persamaan yang sama.sumber
Ruby, 164 Bytes
Uji
sumber
Emacs Lisp, 302 Bytes
Versi tidak disatukan:
sumber
Powershell, 164 byte
Beberapa trik PoSh umum dan tidak begitu umum;
sumber
awk, 150
Buang beberapa byte untuk membuat ini benar untuk input
1
. Saya tidak yakin apakah itu yang diharapkan.sumber
05AB1E , 58 byte
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Lihat ini ujung 05AB1E saya (bagian Cara menggunakan kamus? ) Untuk memahami mengapa
„I€Ü
adalah"I am"
,'€–
adalah"not"
, dan“€…íÀ‚³,ƒ«“
ini"a perfect number, because"
.sumber