Matematikawan yang gila memiliki banyak koleksi angka, dan karena itu ruang yang dia tinggalkan sangat terbatas. Untuk menghemat, ia harus melipat bilangan bulatnya, tetapi sayangnya ia benar-benar malas. Tugas Anda, jika Anda ingin membantunya, adalah membuat fungsi / program yang melipat bilangan bulat positif yang diberikan untuk maniak nomor kami.
Bagaimana cara melipat bilangan bulat?
Jika habis dibagi dengan jumlah digitnya, bagilah dengan jumlah digitnya. Jika tidak memenuhi persyaratan itu, ambil sisanya ketika dibagi dengan jumlah digitnya. Ulangi proses ini hingga hasilnya tercapai 1
. Bilangan bulat terlipat adalah jumlah operasi yang harus Anda lakukan. Mari kita ambil contoh (katakanlah 1782
):
Mendapatkan jumlah dari digit:
1 + 7 + 8 + 2 = 18
.1782
dibagi secara merata oleh18
, jadi nomor selanjutnya adalah1782 / 18 = 99
.99
tidak dibagi secara merata9 + 9 = 18
, maka kita mengambil sisanya:99 % 18 = 9
.9
jelas dibagi oleh9
, jadi kami membaginya dan mendapatkan1
.
Hasilnya adalah 3
, karena 3 operasi diperlukan untuk mencapai 1
.
Aturan dan Spesifikasi
Beberapa bilangan bulat mungkin memiliki jumlah digit yang sama dengan
1
, seperti10
atau100
. Program Anda tidak perlu menangani kasus seperti itu. Itu berarti, Anda akan dijamin bahwa bilangan bulat yang diberikan sebagai input tidak memiliki jumlah digit sama dengan1
, dan tidak ada operasi dengan bilangan bulat yang diberikan akan menghasilkan angka yang jumlah digitnya1
(kecuali untuk1
dirinya sendiri, yaitu " target"). Misalnya, Anda tidak akan pernah menerima10
atau20
sebagai masukan.Input akan bilangan bulat positif lebih tinggi dari
1
.Berlaku celah default .
Anda dapat mengambil input dan memberikan output dengan cara standar apa pun .
Uji Kasus
Input -> Output 2 -> 1 5 -> 1 9 -> 1 18 -> 2 72 -> 2 152790 -> 2 152 -> 3 666 -> 3 777 -> 3 2010 -> 3 898786854 -> 4
Berikut adalah program yang memungkinkan Anda memvisualisasikan proses dan mencoba lebih banyak kasus uji.
Ini adalah kode-golf , jadi kode terpendek di setiap bahasa (dicetak dalam byte) menang!
8987868546
input yang valid, itu akan merusak alat tes Anda, dan juga banyak (jika tidak semua) dari jawabannya ...898786854
, bukan8987868546
(Anda telah menambahkan6
di akhir)8987868546
bukan 1 ( Aturan 1 bertemu ) dan8987868546
bilangan bulat positif lebih tinggi dari 1 ( Aturan 2 bertemu ).Jawaban:
05AB1E ,
1312 byteCobalah online!
Penjelasan
sumber
Python 2 ,
6357 byte-1 terima kasih untuk benar-benar manusia
-1 terima kasih untuk Tuan Xcoder
-4 terima kasih kepada reffu
Cobalah online!
sumber
Haskell,
8578 byteDisimpan 7 byte berkat Bruce Forte.
Cobalah online.
sumber
divMod
dan menjatuhkanwhere
: Coba online!where
. Saya akan menggunakan ini di masa depan. :)sum[read[d]|d<-show n]
menghemat satu byteJavaScript (ES6),
66585149 byteMengambil input sebagai integer. Pengembalian
false
untuk0
atau1
dan melempar kesalahan meluap ketika bertemu sejumlah yang digit menambahkan hingga1
.Menguji
sumber
eval(array.join`+`)
?Sekam , 12 byte
Cobalah online!
Penjelasan
sumber
C # (.NET Core) , 87 byte
Cobalah online!
Fungsi Lambda yang mengambil dan mengembalikan integer.
sumber
Japt ,
221917 byte-3 byte terima kasih kepada @Shaggy.
-2 byte terima kasih kepada @ETHproductions
Cobalah online!
sumber
s_¬
untukì
menyimpan dua byte lagi :-)Retina , 100 byte
Cobalah online! Tautan hanya mencakup test case yang lebih kecil karena yang lebih besar terlalu lama.
sumber
Mathematica, 73 byte
sumber
==0
diganti<1
?PHP, 68 +1 byte
keluaran unary:
output desimal, 73 +1 byte:
Jalankan sebagai pipa dengan
-nR
atau coba online .Operator Elvis membutuhkan PHP 5.3 atau yang lebih baru. Untuk PHP yang lebih lama, ganti
?:
dengan?$n%$s:
(+5 byte).sumber
Ruby, 46 byte
sumber
Haskell ,
94938988 byteIni terasa sangat panjang ..
Cobalah online!
Terima kasih @Laikoni & @nimi untuk bermain golf masing-masing 1 byte!
sumber
C (gcc) ,
83817673 byteCobalah online!
sumber
Jelly , 12 byte
Cobalah online!
sumber
Pyth,
2014 byteCoba di sini.
sumber
Perl,
71byte,64byte, 63 byteCobalah online
EDIT: disimpan 7 byte, berkat komentar Xcali
EDIT: sejak 5.14 substitusi non destruktif s /// r
sumber
-pl
di atas seharusnya merupakan bendera baris perintah?-pl
bendera menurut pos ini .$c
tidak perlu diinisialisasi. Ini akan mulai dariundef
yang 0. Titik koma setelah penutupan sementara bisa pergi. Anda juga tidak perlu-l
. Tidak perlu mengambil banyak input dalam satu kali proses.Dyalog APL, 36 byte
Cobalah online!
Bagaimana?
sumber
Gaia , 13 byte
Cobalah online!
Penjelasan
sumber
Matlab, 150 byte
Input harus diberikan ke fungsi sebagai string, seperti X ('152').
Fungsi ini bekerja dengan sambil mengulang dan menambah d. Itu
x=y;
garis itu diperlukan untuk menghindari kesalahan dari Matlab mencoba membaca dan menimpa nilai variabel pada saat yang sama, rupanya, yang adalah satu baru pada saya.Tidak Terkumpul:
sumber
Haskell , 68 byte
Cobalah online! Berdasarkan jawaban w0lf .
sumber
R , 85 byte
Fungsi anonim yang mengembalikan output yang diperlukan.
Verifikasi semua kasus uji!
sumber