( Terkait )
Diberikan bilangan bulat n > 1
,
1) Bangun kisaran angka n, n-1, n-2, ... 3, 2, 1
dan hitung jumlah
2) Ambil angka individu dari angka itu dan hitung produk
3) Ambil angka individual angka itu dan hitung jumlahnya
4) Ulangi langkah 2 dan 3 hingga Anda mencapai satu digit. Angka itu adalah hasilnya.
Dua puluh istilah pertama dari urutan di bawah ini:
3, 6, 0, 5, 2, 7, 9, 2, 7, 9, 1, 9, 0, 0, 9, 6, 7, 0, 0, 6
Catatan: Urutan ini BUKAN di OEIS.
I / O dan Aturan
- Angka akan menjadi sangat besar dengan cepat, sehingga solusinya harus dapat menangani angka input hingga 100.000 tanpa kegagalan (tidak masalah jika kode Anda dapat mengatasi itu).
- Input dan output dapat diberikan dengan metode apa pun yang mudah .
- Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
Contohnya
n output
1234 9
3005 3
5007 5
9854 8
75849 8
100000 0
code-golf
sequence
number-theory
AdmBorkBork
sumber
sumber
n
. Solusi yang diposting hanya perlu bekerja hinggan = 100000
.Numbers will get very large quickly
tidak ituJawaban:
Python 2 ,
7772716260 byteTerima kasih kepada @xnor karena bermain golf 2 byte!
Cobalah online!
sumber
repeat until you reach a single digit
?236172
; dan itu satu-satunya di bawah 1 juta.05AB1E , 7 byte
Cobalah online!
Penjelajahan
sumber
Jelly , 8 byte
Cobalah online!
Program lengkap (ini mengembalikan array tunggal yang berisi hasilnya, tetapi tanda kurung tidak terlihat di STDOUT).
sumber
MATL ,
1513 byteSebagai penghormatan untuk Bahasa bulan ini :
Cobalah online!
Saya tidak berpikir ada cara yang lebih sederhana untuk mendapatkan digit angka daripada mengubah angka menjadi string
V
, lalu mentransposasinya!
, dan mengubah vektor vertikal ini kembali ke angkaU
.Disimpan 2 byte berkat Pencipta 1 sendiri! Saya lupa ujung yang tersirat, artinya saya bisa menghapus
]
, dan alih-alih membandingkan jumlah elemen dengan1
, saya hanya bisa mengurangi nilai itu dan menggunakannya sebagai boolean secara langsung.Jadi, penjelasannya seperti ini:
1 ... dari MATL, Luis Mendo.
sumber
JavaScript (ES6), 60 byte
Cobalah online!
Berkomentar
Versi alternatif, 59 byte (tidak bersaing)
Versi non-rekursif yang hanya berfungsi untuk n <236172 . (Ini mencakup rentang yang diminta tetapi tidak memenuhi syarat sebagai algoritma generik yang valid.)
Cobalah online!
sumber
Number.MAX_SAFE_INTEGER ** 0.5 ~= 94906265
.Haskell ,
7271 63 byteTerima kasih kepada @BMO untuk byte dan @nimi selama 8 byte!
Cobalah online!
sumber
Stax ,
141310 byteJalankan dan debug itu
Cukup menyenangkan untuk dibuat. Saya ingin tahu apakah ada cara yang lebih ringkas untuk melakukan perbandingan di bagian akhir.
Penjelasan
-1 byte berkat ovs
-3 byte terima kasih kepada Scrooble
sumber
R ,
152 130109 byteCobalah online!
@Giuseppe ditemukan
2142 byte dengan berbagai hal R yang saya belum terbiasa, bersama dengan cara untuk mendapatkan digit angka tanpa paksaan untuk string dan kembali, dan dengan lebih sedikit byte!options(scipen=9)
aku sdiperlukan untuk kasus 9854 untuk fungsi tua, karena tahap produk pertama berakhir sebagai 80000, yang R cetak sebagai 8e + 05.sumber
scipen
: Cobalah secara online ! perhatikanmax(0,log10(x))
ini karena jikax=0
, makalog10(0)=-Inf
yang menyebabkan kesalahan.Pyth , 11 byte
Coba di sini!
sumber
Arang , 18 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Jumlah bilangan bulat hingga input.
Sementara hasilnya lebih besar dari 9, ambil jumlah digit dari produk digit.
Keluarkan hasilnya ke string dan cetak secara implisit.
sumber
Gaia , 8 byte
Cobalah online!
Penjelasan lama (sebelum memperbaiki bug yang merupakan kesalahan Gaia IMO: P):
Disimpan 1 byte berkat Dennis .
sumber
┅⟨ΣΠ⟩°
menghemat satu byte.4
0
hasil[]
untuk beberapa alasan :(F #, 175 byte
Cobalah online!
Satu-satunya peringatan untuk fungsi adalah bahwa nilai input harus bertipe
uint64
.Tidak digabungkan sedikit seperti ini:
Fungsi
d n
mengubah angkan
menjadi digit komponennya. Pertama-tama mengkonversi ke string, kemudian mendapatkan setiap karakter di string. Setiap karakter kemudian harus dikonversi kembali menjadi string, jika tidak karakter akan dikonversi ke nilai ASCII mereka alih-alih nilai "nyata" mereka.The
c n
fungsi fungsi utama, dengann
sebagai nilai awal. Dalam fungsi inir
adalah nilai berjalan kami. Thewhile
loop tidak berikut:r
ke dalam digit komponennya (d r
).Seq.reduce
yang mengambil fungsi dengan nilai akumulasi (a
) dan nilai berikutnya dalam urutan (x
) dan dalam hal ini mengembalikan produk. Nilai awal adalah elemen pertama dalam urutan.d
).r
.sumber
Befunge, 136 byte
Anda bisa mencobanya di sini .
Meskipun tidak semua penerjemah memiliki ukuran sel yang cukup besar, ia bekerja dengan jumlah kecil untuk hampir semua orang di luar sana. Untuk jumlah yang lebih besar,
n
Anda mungkin membutuhkan juru bahasa seperti BefunExec .sumber
Gol> <> ,
3533 byteCobalah online!
-2 byte oleh Jo King.
Penggunaan fungsi yang luas dan loop tak terbatas implisit.
Contoh program lengkap & Cara kerjanya
sumber
Japt,
161413 byteCobalah
Penjelasan
sumber
Sekam , 7 byte
Cobalah online!
sumber
PHP 7, 89 byte
Jalankan sebagai pipa dengan
-r
atau coba online .+
cast ke int untuk~
bekerja sesuai yang diinginkan.for()
sebagai gantinyado ... while()
.PHP yang lebih lama membutuhkan satu byte lagi:
for($s=str_split,$a=...;$a>9;)$a=array_sum($s(...));
(Tidak menetapkan
str_split
ke variabel sama sekali akan membuang byte lain.)sumber
Perl 6 , 49 byte
Cobalah online!
sumber
[*](.comb).comb
sebagai gantinya([*] .comb).comb
Tcl , 118 byte
Cobalah online!
sumber
PowerShell Core ,
91 10193 byteCobalah online!
Tidak dikumpulkan sedikit ...
Langkah pertama adalah untuk membagi integer menjadi digit - lakukan ini dengan memisahkan integer menjadi array
stringkarakter . Setelah itu, masukkan operan, lalu evaluasi string sebagai perintah. Kemudian, ini soal melakukan siklus multi-tambah hingga inputnya satu digit.iex
adalah alias untukInvoke-Command
yang mengevaluasi string yang dilewatkan ke posisi param pertama.Sunting: Seperti yang diminta oleh @AdmBorkBork , saya telah menambahkan header fungsi ke jumlah byte. Juga, saya melakukan sedikit matematika dan menyadari bahwa batas atas pada jumlah iterasi adalah
< log log 10^6 < log 6 < 2
, sehingga menghemat enam byte lagi.Sunting x2: @AdmBorkBork menemukan cara yang lebih singkat untuk mengubah bilangan bulat menjadi ekspresi matematika, dan kemudian menyarankan untuk memasukkannya ke dalam
iex
. Ini menyimpan 8 byte. Terima kasih!sumber
Function F($a){ }
dalam jumlah byte Anda. Namun, Anda harus dapat menghemat menggunakan[char[]]
bukan-split''-ne''
, saya pikir.[char[]]1234=Ӓ
, yang tidak valid; Saya mungkin bisa membuatnya bekerja, tetapi mungkin tidak jelas sekarang. Terima kasih untuk sarannya![char[]]"$o"
dan|iex
bukaniex( )
.Perl 5
-p
, 61 byteCobalah online!
sumber
Ruby , 57 byte
Cobalah online!
sumber
Java 8, 129 byte
Cobalah online.
Penjelasan:
sumber
Julia 0,6 , 56 byte
Cobalah online!
Cukup mudah: hitung
(n+1)n÷2
untuk jumlah dari 1..n, periksa apakah itu nomor digit tunggal (>9
), jika tidak, coba lagi dengan k atur ke jumlah digit produk dari digit k, selain k k.sumber