Sebuah nomor diri (juga disebut sejumlah Kolombia atau Devlali) adalah nomor alam, x
dimana persamaan n + <digit sum of n> = x
tidak memiliki solusi untuk setiap nomor alam n
. Misalnya, 21 bukan angka mandiri, karena n = 15
menghasilkan 15 + 1 + 5 = 21
. Di sisi lain, 20 adalah angka mandiri, karena tidak n
dapat ditemukan yang memenuhi kesetaraan tersebut.
Karena definisi ini mereferensikan jumlah digit, itu tergantung pada basis. Untuk keperluan tantangan ini, kami hanya akan mempertimbangkan nomor mandiri basis 10, yang merupakan urutan A003052 di OEIS. Bilangan self Biner ( A010061 ) dan basis 100 ( A283002 ) juga telah dikalibrasi.
Tantangan
Diberikan bilangan bulat positif x
sebagai input, menghasilkan nilai kebenaran jika x
bilangan mandiri di basis 10, dan nilai falsey sebaliknya. Untuk klarifikasi nilai-nilai kebenaran dan falsey, lihat meta postingan ini pada subjek .
Anda dapat menulis program atau fungsi lengkap, dan input dan output dapat disediakan di salah satu saluran yang biasa. Celah standar tentu saja dilarang.
Ini adalah kode-golf , jadi semakin pendek jawaban Anda (dalam byte) semakin baik!
Uji kasus
Benar:
1
3
5
7
9
20
31
86
154
525
Falsey:
2
4
6
8
10
15
21
50
100
500
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard biasa dan gambaran umum pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
# Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
Jawaban:
Oktaf , 37 byte
Port jawaban MATL saya.
Cobalah online!
sumber
Java (JDK 10) , 84 byte
Cobalah online!
Penjelasan
Kredit
sumber
n->{int i=n,r=0;for(;i-->0;)r=(""+i).chars().map(x->x-48).sum()+i==n?1:r;return r<1;}
i->{for(int n=i;i-->1;)i|=((""+i).chars().map(x->x-48).sum()+i^n)-1>>-1;return~i<0;}
05AB1E , 8 byte
Cobalah online! atau sebagai Test suite
Penjelasan
sumber
Brachylog , 12 byte
Cobalah online!
Penjelasan
sumber
false.
nilai kebenaran dengan metode objektif apa puntrue.
tidak? Saya pikir tidak, dan sepertinya itu akan didukung oleh konsensus metaC (gcc) ,
706765 byteCobalah online!
Untuk mengurangi 2 byte lainnya, nilai kebenaran yang dikembalikan tidak lagi 1, tetapi jumlahnya sendiri.
sumber
Oktaf ,
494744 byteCobalah online!
Penjelasan:
Mencoba melakukan operasi pada suatu rentang adalah rumit dan panjang, karena
num2str
mengembalikan sebuah string dengan spasi sebagai pemisah jika ada lebih dari jumlah input. Mengurangi 48 akan memberikan sesuatu seperti:1 -16 -16 2 -16 -16 3 -16 -16 4
untuk rentang input 1 ... 4 . Menyingkirkan semua-16
membutuhkan banyak byte.Oleh karena itu, kami akan melakukan ini dengan menggunakan loop
arrayfun
. Untuk setiap angka k = 1 .. x , di mana x adalah input, kita tambahkank
dan jumlah digitnya, dan kurangix
. Ini akan mengembalikan array dengan hasil operasi itu untuk masing-masing angka dalam k . Jika salah satu angka dalam array adalah nol, angka tersebut bukan angka mandiri.Untuk input
20
dan21
, outputnya adalah:Hanya ada elemen non-nol untuk input
20
, dan setidaknya satu elemen non-nol untuk input21
. Itu berarti itu20
nomor mandiri, dan21
bukan.Oktaf memperlakukan array dengan setidaknya satu nol sebagai false, seperti dapat dilihat di TIO-link.
sumber
MATL , 11 byte
Outputnya adalah array yang tidak kosong, yang benar jika semua entri tidak nol, dan palsu jika mengandung satu atau lebih nol.
Cobalah online! Atau verifikasi semua kasus uji , termasuk uji kebenaran / kesalahan.
Penjelasan
Pertimbangkan input
n = 10
sebagai contoh.sumber
APL (Dyalog) , 14 byte
Cobalah online!
Bagaimana?
sumber
+/⍎¨∘⍕
->#+.⍎⍕
Jelly , 6 byte
Untuk input n , ini mengembalikan [n] jika n adalah angka mandiri, [] jika tidak.
Cobalah online!
Bagaimana itu bekerja
sumber
Pari / GP , 32 byte
Cobalah online!
sumber
Haskell , 46 byte
Cobalah online!
sumber
J ,
28, 24, 2221 byte-1 byte terima kasih kepada Conor O'Brien
-2 byts terima kasih kepada ngn
Cobalah online!
Penjelasan:
i.
daftar 0 .. n-1( )"+
untuk setiap item dalam daftar.,.&.":
mengonversinya menjadi daftar angka,1#
temukan jumlah mereka+
dan tambahkan ke item$@-.
kecualikan daftar dari argumen dan temukan bentuksumber
"0 i.
bisa"+i.
(-1 byte).-.@e.
->$@-.
[:(
)"+i.
->(
)"+@i.
Python 2,
7066 BytesEDIT: -4 terima kasih kepada @ user56656
sumber
`i`
bukannyastr(i)
menyimpan 4 byte.[
]
sum
lambda x:[i for i in range(x)if i+sum(map(int,`i`))==x]==[]
lambda x:all(i+sum(map(int,`i`))-x for i in range(x))
Pyth , 8 byte
Suite uji.
Jika menukar nilai true / falsy diperbolehkan, maka kita bisa menjatuhkan
!
dan mendapatkan 7 byte sebagai gantinya. Salah satu saran Sok membantu saya bermain golf 2 byte.Penjelasan
sumber
.AmnQ+dsjdT
, saya tidak tahu/
. Saya sudah lama tidak menggunakan Pyth dengan benar! +1/
pada dasarnya menghitung kemunculan elemen dalam daftar. Saya juga dapat menggunakan}
, yang menguji apakah suatu objek muncul dalam daftar, tetapi saya pikir itu adalah jumlah byte yang sama.S
tidak diperlukan - input akan menjadi bilangan bulat positif, sehingga memiliki0
dalam daftar pemetaan tidak akan menjadi masalah? Paling tidak, tampaknya berfungsi untuk kasus uji yang diberikan.+sjdT
menambahkansjdT
ked
? Saya belum pernah melihat yang seperti ituPerl 6 ,
3933 byteCobalah!
Blok kosong dengan parameter tunggal implisit, yang disebut sebagai:
Karena
n + digits(n) >= n
, kami hanya dapat menghitung angka Kolombia untuk semua angka hingga nilai kueri kami dan melihat apakah ada yang cocok. Jadi ini menghitung angka Kolombia untuk input yang diberikan:Yang kami terapkan untuk semua nilai hingga target kami:
Tetapi kami hanya peduli apakah salah satu dari mereka cocok, bukan apa nilai-nilai itu, jadi seperti yang ditunjukkan oleh @nwellenhof, kita dapat grep:
Sisanya hanya paksaan untuk bool dan membungkus sebuah blok.
39 byte
TIO test link disediakan oleh @Emigna
@nwellenhof menunjukkan bahwa menggunakan grep akan menghemat 6 byte!
sumber
{!grep $_,map {$_+[+] .comb},^$_}
selama 33 byte.Python 3 ,
60,56,55, 54 byteCobalah online!
-4 menggunakan semua invers daripada
-1 dengan mengubah! =
Ke ^ oleh @ jonathan-allan -1 dengan menggunakan set oleh @ovs
sumber
Japt
-d!
, 6 byteCobalah
Asli, 8 byte
Mengembalikan nomor input untuk truey atau
0
for falsey. Jika hanya array kosong yang salah dalam JavaScript, ini bisa 7 byte.Cobalah
Penjelasan
Alternatif
Cobalah
sumber
Retina , 55 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Konversikan input
x
ke unary.Buat rentang dari
x
bawah hingga1
.Sufiks nilai desimal masing-masing
n
ke nilai unarynya.Buat salinan
x
.Konversi setiap angka desimal
n
menjadi unary, sehingga menambahkan digit ke salinann
.Periksa apakah
x
muncul di salah satu hasil.Balikkan hasilnya.
sumber
JavaScript (ES6),
5251 byteDisimpan 1 byte berkat @ l4m2
Mengembalikan 0 atau 1 .
Cobalah online!
sumber
n=>(g=k=>k?n-eval([...k+'k'].join`+`)&&g(k-1):1)(n)
Haskell ,
6358 byteCobalah online!
sumber
Perl 5
-a
, 34 byteCobalah online!
sumber
Ruby , 38 byte
Cobalah online!
sumber
Retina , 24 byte
Cobalah online!
Bisa jadi 18 byte dengan input yang diberikan dalam unary, tetapi jawaban Retina lainnya menggunakan desimal juga, jadi saya pikir menggunakan desimal akan membuat perbandingan yang lebih adil.
Penjelasan
Ubah input menjadi unary, gunakan
_
sebagai digit unary.Di setiap posisi dalam string (yaitu awal, akhir, dan di antara setiap pasangan karakter), masukkan:,
$.`
panjang awalan (atau posisi nol-diindekskan dari pertandingan),,¶
umpan baris,,$`
awalan itu sendiri (yaitu representasi unary dari posisi diindeks nol). Misalnya jika inputnya adalah3
dan kita akan memiliki perwakilan unary___
, maka ini akan menghasilkan:Dengan kata lain, kita mendapatkan satu baris untuk setiap angka dari 0 hingga input (inklusif), yang memiliki representasi unary dan desimal dari angka tersebut.
Kami mengonversi setiap digit menjadi unary, yang secara efektif menghitung jumlah digit pada setiap baris dan menambahkannya ke nomor itu sendiri (semuanya dalam unary).
Garis terputus-putus. Ini sebenarnya tidak menghapus duplikat baris tetapi hanya membersihkannya ke baris kosong. Jadi, jika angka dari 0 hingga input ditambah jumlah digitnya sama dengan input, baris terakhir akan dihapus. Kalau tidak, baris terakhir tetap di tempatnya.
Periksa apakah masih ada karakter di baris terakhir. Kami tidak dapat menggunakan
$
, karena itu juga cocok di depan linefeed Trailing (yang persis di mana kami tidak ingin melihat).sumber
Bash + GNU Coreutils, 91 Bytes
Mengembalikan kebenaran atau kepalsuan.
sumber
Kotlin , 48 byte
Cobalah online!
Penjelasan:
sumber
Tambahkan ++ , 27 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Elixir ,
6665 byteCobalah online!
sumber
Stax , 8 byte
Jalankan dan debug itu
Penjelasan
Setara ASCII:
fcE+|+x=
adalah program Stax yang menampilkan semua angka yang jumlah digitnya ditambahkan sama dengan input. Misalnya untuk101
output akan91
dan100
, masing-masing pada jalur yang terpisah.Jalankan dan debug itu
sumber
Pyt , 7 byte
Cobalah online!
Jika menukar nilai true / falsy diperbolehkan, maka
¬
pada akhirnya dapat dijatuhkan selama 6 byte.Penjelasan:
sumber
J , 20 byte
Cobalah online!
sumber