Mari kita mendefinisikan urutan: Urutan penjumlahan n digit (n-DSS) adalah urutan yang dimulai dengan n . Jika angka terakhir adalah k , maka angka selanjutnya adalah k + digit-sum (k) . Berikut adalah beberapa n-DSS pertama:
1-DSS: 1, 2, 4, 8, 16, 23, 28, 38, 49, 62, 70...
2-DSS: 2, 4, 8, 16, 23, 28, 38, 49, 62, 70, 77...
3-DSS: 3, 6, 12, 15, 21, 24, 30, 33, 39, 51, 57...
4-DSS: 4, 8, 16, 23, 28, 38, 49, 62, 70, 77, 91...
5-DSS: 5, 10, 11, 13, 17, 25, 32, 37, 47, 58, 71...
6-DSS: 6, 12, 15, 21, 24, 30, 33, 39, 51, 57, 69...
7-DSS: 7, 14, 19, 29, 40, 44, 52, 59, 73, 83, 94...
8-DSS: 8, 16, 23, 28, 38, 49, 62, 70, 77, 91, 101...
9-DSS: 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99...
Untuk 1, ini adalah A004207 , meskipun beberapa digit pertama berbeda karena definisi yang sedikit berbeda. Untuk 3, ini A016052 ; untuk 9, A016096 .
Tantangan hari ini adalah menemukan urutan penjumlahan n digit terendah yang diberikan angka. Ini disebut "Fungsi Kolombia Terbalik", dan A036233 . Dua puluh istilah pertama, dimulai dengan 1 adalah:
1, 1, 3, 1, 5, 3, 7, 1, 9, 5, 5, 3, 5, 7, 3, 1, 5, 9, 7, 20
Beberapa test case bagus lainnya:
117: 9
1008: 918
Anda hanya perlu menangani bilangan bulat lebih besar dari 0, dan Anda dapat mengambil input dan output dalam format standar apa pun. Seperti biasa, ini adalah kode-golf , jadi jawaban tersingkat di setiap bahasa menang.
Jawaban:
Haskell ,
1046463 byte(-26 terima kasih kepada H.PWiz, tambahan -14 terima kasih kepada Sriotchilism O'Zaic, tambahan -1 berkat cole)
Ini sebuah fungsi.
Cobalah online!
Penjelasan:
Urutan fungsi gabungan yang mengembalikan y + jumlah digital y. Konversi menjadi string pertama, lalu lakukan beberapa senam monad untuk mendapatkan jumlah karakter dan nomor asli (terima kasih kepada Cole).
The
<*>
operator dalam konteks ini memiliki tipe dan definisijadi kita bisa menulis seperti di atas
Ini
read . pure
mengubah aChar
menjadi angka, jadi(+) . read . pure :: Char -> Int -> Int
menambahkan digit ke nilai akumulasi. Nilai ini diinisialisasi ke nomor yang diberikan dalam flip.until
berulang kali menerapkan fungsi ke hasilnya (dalam hal ini, y + jumlah digital y) hingga memenuhi persyaratan yang ditentukan oleh fungsi dalam argumen pertama. Ini memberikan elemen y-DSS terkecil yang lebih besar atau sama dengan x.Daftar malas y yang tak terbatas sehingga elemen y-DSS terkecil> = x sebenarnya x. Menggunakan notasi pemahaman daftar Haskell (yang juga telah saya lupakan, terima kasih).
Elemen pertama dari daftar itu, yang merupakan y terkecil yang memenuhi persyaratan tantangan.
sumber
fmap
di tempat pertama membingungkan saya sedikit.Python 2 ,
7371 byte-2 byte terima kasih kepada Erik .
Cobalah online!
sumber
l
untukk>n
.Perl 6 , 44 byte
Cobalah online!
Solusi naif yang memeriksa setiap urutan hingga menemukan yang berisi input
Penjelasan:
sumber
Ruby , 51 byte
Cobalah online!
sumber
Jelly , 11 byte
Cobalah online!
Program lengkap.
sumber
MATL , 18 byte
Cobalah online! Atau verifikasi 20 nilai pertama .
Penjelasan
Untuk input
i
, ini terus meningkatn
sampaii
syarat pertama darin
urutan ke-4 termasuki
. Cukup untuk mengujii
persyaratan untuk setiap urutan karena urutan meningkat.sumber
Keempat (gforth) , 106 byte
Cobalah online!
Penjelasan Kode
sumber
Pyth , 13 byte
Coba di sini atau lihat test suite .
Bagaimana itu bekerja
Dalam kebanyakan bahasa, akan lebih mudah untuk mengulang pada himpunan bilangan alami, menemukan istilah pertama dari -DSS (karena jumlah digit selalu setidaknya sehingga penambahan berulang dari jenis kuantitas ini tidak dapat menghasilkan nilai lebih kecil dari ) dan periksa apakah termasuk dalam pertama istilah -DSS. Dalam Pyth, bagaimanapun, struktur aliran kontrol yang tersedia sebenarnya membuatnya lebih mudah untuk menghasilkan istilah sampai kondisi tertentu terpenuhi, daripada jumlah istilah yang tetap.n k 1 n n n k
sumber
fqQ.W<HQ+sjZ10
untuk 14. Saya selalu lupa tentang `dan s sebagai cara untuk mendapatkan angka dari integer!Jelly , 9 byte
Tautan monadik yang menerima bilangan bulat positif
n
yang menghasilkan bilangan bulat positif,,a(n)
Kolombia Terbalik darin
.Cobalah online! Atau lihat test-suite .
Bagaimana
Secara efektif kami bekerja mundur, berulang kali mencari nilai yang kami tambahkan sampai kami tidak dapat menemukannya:
Menggunakan
13
sebagai contoh ...sumber
Python 2 , 85 byte
Cobalah online!
Ini tentu saja berfungsi untuk semua kasus uji, ditambah semua 1,88 entri yang diberikan di OEIS; tapi saya masih tidak yakin itu terbukti benar. (Ini adalah salah satu keluhan saya mengenai Church Of Unit Testing :)).
sumber
a.index(n)
Bahasa Wolfram (Mathematica) , 61 byte
Cobalah online!
sumber
MathGolf , 13 byte
Cobalah online!
Tantangan besar! Itu menyebabkan saya menemukan beberapa bug dalam perilaku pop implisit MathGolf, yang menambahkan 1-2 byte ke solusinya.
Untuk membuktikan bahwa ini akan selalu berhasil, mudah untuk melihatnya
n <= input
, karenainput
merupakan elemen pertama dariinput
urutan ke - th. Saya secara teknis tidak membuktikan bahwa solusi ini selalu valid, tetapi tidak lulus setiap test case yang saya uji.sumber
05AB1E , 13 byte
Cobalah online!
sumber
Bersih , 86 byte
Cobalah online!
Diperluas:
Itu menggangguku yang
digitToInt d
lebih lama daritoInt d-48
sumber
C (gcc) , 102 byte
Cobalah online!
sumber
JavaScript, 65 byte
Cobalah online!
Ini juga berfungsi sebagai C, tetapi biaya satu byte lagi
C (gcc) , 66 byte
Cobalah online!
sumber
C # (Visual C # Interactive Compiler) ,
83, 82 byteCobalah online!
sumber
Japt ,
1514 byteThe ternary untuk menangani kasus-kasus di mana
input=output
mengganggu saya!Cobalah
sumber
cQuents , 18 byte
Cobalah online!
Penjelasan
sumber
Keempat (gforth) , 99 byte
Cobalah online!
Sangat mirip dengan pengajuan reffu (106 byte) . Bagian golf adalah:
Bagaimana itu bekerja
sumber
Arang , 26 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Menggunakan algoritma @ ChasBrown. Jika ternyata tidak valid, maka untuk 29 byte:
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Bekerja dengan menghitung anggota pertama dari setiap urutan penjumlahan digit tidak kurang dari
n
. Penjelasan:Masukan
n
.Ulangi sampai kami menemukan urutan penjumlahan digit
n
.Urutan berikutnya dimulai dengan satu lebih dari jumlah urutan sejauh ini.
Ulangi sementara anggota urutan kurang dari
n
.Tambahkan jumlah digit untuk mendapatkan anggota urutan berikutnya.
Dorong anggota terakhir ke daftar.
Cetak jumlah daftar yang dihitung sampai kami menemukan satu yang berisi
n
.sumber
Merah , 103 byte
Cobalah online!
sumber
CJam , 25 byte
Cobalah online!
sumber
Gaia , 16 byte
Cobalah online!
Mengembalikan daftar yang berisi bilangan bulat terkecil.
Gaia , 16 byte
Cobalah online!
Menggunakan pengamatan yang dilakukan oleh Mr. Xcoder . Ini tidak lebih pendek dari yang lain, tetapi ini merupakan pendekatan yang menarik.
Gaia , 16 byte
Cobalah online!
Pendekatan ketiga tidak menggunakan
N-find
,,#
tetapi masih mengandalkan observasi yang sama dengan pendekatan menengah. Mengembalikan integer daripada daftar.sumber
Clojure , 106 byte
Cobalah online!
Ini adalah 99 byte tetapi menghasilkan Stack Overflow pada input yang lebih besar (mungkin mengutak-atik JVM akan membantu):
sumber
C # (Visual C # Interactive Compiler) , 75 byte
Cobalah online!
sumber
Sekam ,
1410 byte-4 terima kasih kepada @ H.PWiz
Cobalah online!
sumber
€mΩ≥¹SF+dN
(Saya masih merasa ada yang lebih pendek)V£⁰m¡SF+dN
tinta ,
130127 byteCobalah online!
-3 bytes
dengan mengkonversi ke program lengkap yang mengambil input unary.Ini terasa terlalu lama untuk tidak bisa golf.
Tidak disatukan
sumber
C (gcc) ,
807978 byteCobalah online!
-2 dari ceilingcat
sumber