Deskripsi tantangan
Angka Smith adalah angka gabungan yang jumlah digitnya sama dengan jumlah jumlah digit faktor prima. Diberi bilangan bulat N
, tentukan apakah itu nomor Smith atau bukan.
Beberapa nomor Smith pertama adalah 4
, 22
, 27
, 58
, 85
, 94
, 121
, 166
, 202
, 265
, 274
, 319
, 346
, 355
, 378
, 382
, 391
, 438
(urut A006753 di Oei).
Contoh input / output
18: False (sum of digits: 1 + 8 = 9; factors: 2, 3, 3; sum of digits of factors: 2 + 3 + 3 = 8)
22: True
13: False (meets the digit requirement, but is prime)
666: True (sum of digits: 6 + 6 + 6 = 18; factors: 2, 3, 3, 37; sum of digits of factors: 2 + 3 + 3 + 3 + 7 = 18)
-265: False (negative numbers can't be composite)
0: False (not composite)
1: False (not composite)
4937775: True
Catatan
- Kode Anda dapat berupa fungsi (metode) atau program kerja penuh,
- Alih-alih kata-kata seperti
True
danFalse
, Anda dapat menggunakan nilai-nilai yang benar dan salah, asalkan jelas apa itu, - Ini adalah tantangan kode-golf , jadi buat kode Anda sesingkat mungkin!
code-golf
math
number-theory
decision-problem
shooqie
sumber
sumber
Jawaban:
Jelly ,
1211 byteMengembalikan 1 untuk angka Smith dan 0 sebaliknya. Cobalah online! atau verifikasi semua kasus uji .
Latar Belakang
Æf
(faktorisasi utama) danD
(integer-ke-desimal) diimplementasikan sehinggaP
(produk) danḌ
(desimal-ke-integer) membentuk invers kiri.Untuk bilangan bulat -4 hingga 4 ,
Æf
kembalikan yang berikut ini.Untuk angka -10, -1, -0.5, 0, 0.5, 1, 10 ,
D
mengembalikan yang berikut.Bagaimana itu bekerja
sumber
Python 2,
122115110106 byteDisimpan 4 byte berkat Dennis
Cobalah di ideone.com
Penjelasan
Membaca angka pada stdin dan menghasilkan
True
jika angka tersebut adalah angka Smith atauFalse
jika bukan.sumber
print n<m>s==sum(map(int,`m`))
.Brachylog , 19 byte
Cobalah online!
Penjelasan
sumber
_
(disebut minus rendah )05AB1E ,
1117 bytePenjelasan
Cobalah online!
sumber
PowerShell v3 +, 183 byte
Tidak ada pemeriksaan prima bawaan. Tidak ada anjak bawaan. Tidak ada jumlah digit bawaan. Tangan semuanya dibuat. : D
Mengambil input
$n
sebagai integer, set$b
sama dengan array kosong. Sini,$b
adalah kumpulan faktor-faktor utama kami.Berikutnya adalah
for
loop. Kami pertama-tama menyetel$a
sama dengan nomor input kami, dan kondisinya adalah sampai$a
kurang dari atau sama dengan 1. Loop ini akan menemukan faktor utama kami.Kami
2
beralih dari hingga$a
, menggunakanWhere-Object
(|?{...}
) untuk mengeluarkan bilangan prima yang juga merupakan faktor!($a%$_)
. Mereka dimasukkan ke dalam loop-dalam|%{...}
yang menempatkan faktor ke dalam$b
dan membelah$a
(dengan demikian kita akhirnya akan sampai1
).Jadi, sekarang kita memiliki semua faktor utama kita
$b
. Saatnya merumuskan output Boolean kami. Kita perlu untuk memverifikasi bahwa$n
ini-notin
$b
, karena jika itu adalah bahwa cara yang$n
prima, dan bukan nomor Smith. Selain itu, (-and
) kita perlu memastikan bahwa dua set jumlah digit kita adalah-eq
ual. Boolean yang dihasilkan ditinggalkan di jalur pipa dan outputnya implisit.NB - Membutuhkan v3 atau yang lebih baru untuk
-notin
operator.Saya masih menjalankan input untukSetelah 3+ jam, saya mendapat kesalahan stackoverflow. Jadi, ada beberapa batas atas di suatu tempat. Baiklah.4937775
(ini lambat untuk menghitung), jadi saya akan memperbarui ini ketika selesai.Ini akan bekerja untuk input negatif, nol, atau satu, karena tangan kanan
-and
akan menghilangkan kesalahan saat mencoba menghitung jumlah digit (ditunjukkan di bawah), yang akan menyebabkan setengahnya pergi$false
ketika dievaluasi. Karena STDERR diabaikan secara default , dan output yang benar masih ditampilkan, ini baik-baik saja.Uji kasus
sumber
MATL, 17 byte
Keluaran array truey atau falsey di mana output yang sebenarnya mensyaratkan bahwa semua elemen tidak nol.
Cobalah online
sumber
Jelly ,
27 2523 byte(Golf lebih lanjut
mungkinpasti mungkin)Pengembalian
0
untuk False atau1
untuk TrueSemua test case di TryItOnline
Bagaimana?
sumber
Sebenarnya, 18 byte
Sayangnya, Actually tidak memiliki faktorisasi bawaan yang memberikan faktor prima pada multiplisitas, jadi saya harus meretasnya bersama. Saran bermain golf diterima. Cobalah online!
Tidak melakukanolf
sumber
Haskell,
120105 bytesumber
Oktaf,
8078 bytePenjelasan:
Cobalah online .
sumber
any(t<0)
untuk non-primality sangat pintarPyth, 21 byte
Suatu program yang mengambil input bilangan bulat dan mencetak
True
atauFalse
sebagai yang relevan.Cobalah online
Bagaimana itu bekerja
sumber
Perl 6 ,
928887 byteFungsi anonim yang mengembalikan Bool.
( coba online )
EDIT: -1 byte berkat b2gills
sumber
2..i-1
lebih baik dieja sebagai2..^i
.Java 7,
509506435426419230 byteSaya seharusnya mendengarkan komentar @BasicallyAlanTuring ..
Ah well .. Beberapa bahasa pemrograman menggunakan byte tunggal untuk faktor-prima atau pemeriksaan-prima, tetapi Java jelas bukan salah satu dari mereka.
EDIT: Mengurangi separuh jumlah byte sekarang karena saya punya waktu untuk memikirkannya.
Tidak disatukan (sort-off ..) & uji kasus:
Coba di sini.
Keluaran:
sumber
Brachylog (lebih baru) , 11 byte
Cobalah online!
Predikat berhasil jika inputnya adalah nomor Smith dan gagal jika bukan.
sumber
Japt ,
1411 byte-3 byte terima kasih kepada @Shaggy
Cobalah online!
sumber
JavaScript (ES6),
87 8684 byteCobalah online!
sumber
Pyke, 16 byte
Coba di sini!
sumber
2
Perl 6 , 80 byte
Cobalah online!
Blok kode anonim yang mengambil bilangan bulat dan mengembalikan boolean.
sumber
APL (Dyalog Extended) ,
3629 byte SBCSJawaban ini berutang golfnya ke
⍭
monad Extended untuk mengembalikan faktor-faktor utama nomor, dan itu⊤
lebih baik di konversi basis daripada di Dyalog Unicode.Sunting: -7 bytes berkat dzaima.
Cobalah online!
Penjelasan
sumber
{2>⍵:0⋄(⊃=+/-⊃×2<≢)+⌿10⊤⍵,⍭⍵}
J ,
3130 byteCobalah online!
sumber
C (gcc) ,
139136 byteCobalah online!
-3 bytes berkat ceilingcat
Penjelasan:
sumber
t-h&&i==_
alih-aliht-h?i==_:0
Racket 176 byte
Mengembalikan 1 jika benar dan 0 jika salah:
Versi detail:
sumber
Karat - 143 byte
meminjam solusi python oleh @levitatinglion ... setidaknya ini lebih pendek dari Java ...
degolfed di play.rust-lang.org
sumber
APL (NARS), 33 char, 66 byte
"π⍵" daftar faktor pengembalian ⍵, anggap inputnya adalah satu bilangan bulat positif> = 1; uji:
sumber
C (gcc), 177 Bytes
Menentukan fungsi
Q
yang mengembalikan 0 untuk angka smith dan bukan nol untuk angka non-smithCobalah online!
Penjelasan:
sumber
C # (Visual C # Interactive Compiler) , 122 byte
Cobalah online!
sumber