Dengan bilangan bulat n , dekomposisikan menjadi jumlah bilangan segitiga maksimal (di mana T m mewakili bilangan segitiga ke- m , atau jumlah bilangan bulat dari 1 ke m ) sebagai berikut:
sementara n> 0 ,
menemukan kemungkinan terbesar nomor segitiga T m sehingga T m ≤ n .
tambahkan m pada representasi dekomposisi-segitiga dari n .
kurangi T m dari n .
Misalnya, input 44 akan menghasilkan output 8311 , karena:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36 <44, tetapi 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45> 44.
- digit pertama adalah 8 ; kurangi 36 dari 44 untuk mendapatkan 8 sisa.
1 + 2 + 3 = 6 <8, tetapi 1 + 2 + 3 + 4 = 10> 8.
- digit kedua adalah 3 ; kurangi 6 dari 8 untuk mendapatkan 2 sisa.
1 <2, tetapi 1 + 2 = 3> 2.
- digit ketiga dan keempat harus 1 dan 1 .
Gunakan angka 1 hingga 9 untuk mewakili 9 angka segitiga pertama, kemudian gunakan huruf a sampai z (dapat dikapitalisasi atau huruf kecil) untuk mewakili angka segitiga ke-10 hingga ke-35. Anda tidak akan pernah diberi input yang mengharuskan penggunaan "digit" yang lebih besar.
Batas pada input adalah 1 ≤ n <666 , dan itu akan selalu menjadi bilangan bulat.
Semua input dan output yang mungkin , dan beberapa kasus uji yang dipilih (terdaftar sebagai input, lalu output):
1 1
2 11
3 2
4 21
5 211
6 3
100 d32
230 k5211
435 t
665 z731
Output ∞ untuk input -1/12 tidak diperlukan. :)
Jawaban:
JavaScript (ES6), 52 byte
Bagaimana?
Daripada secara eksplisit menghitung T i = 1 + 2 + 3 + ... + i , kita mulai dengan t = 0 dan secara iteratif mengurangi t + 1 dari n sementara t <n , menambah t pada setiap iterasi. Ketika kondisi ini tidak terpenuhi lagi, total T t telah dikurangi dari n dan output diperbarui sesuai. Kami ulangi prosesnya sampai n = 0 .
Di bawah ini adalah ringkasan dari semua operasi untuk n = 100 .
Uji kasus
Tampilkan cuplikan kode
sumber
Jelly ,
1817 byteIni adalah tautan monadik yang mencetak ke STDOUT. Nilai pengembaliannya adalah 0 dan harus diabaikan.
Cobalah online!
sumber
dc, 74 byte
Ini mengerikan.
sumber
JavaScript (ES6),
6157 byteDisimpan 4 byte berkat @Arnauld
sumber
f=(n,t=0)=>n?t+1>n?t.toString(36)+f(n):f(n-++t,t):1
f=(n,p=q=0)
danf(n,++q+p)
?Java 7, 81 byte
Port dari jawaban JavaScript menakjubkan (ES6) @Arnauld .
Pendekatan saya sendiri hampir 2x lebih panjang ..
Coba di sini.
Penjelasan:
sumber
Retina ,
1151083834 byte[Cobalah online!] (Termasuk test suite) Menggunakan huruf besar. Sunting: Disimpan
7074 byte dengan tanpa malu-malu mengadaptasi jawaban @ MartinEnder untuk Apakah angka ini berbentuk segitiga? Penjelasan: Jumlahnya diubah menjadi unary, maka nomor segitiga yang paling mungkin dicocokkan berulang kali hingga jumlahnya habis. Setiap pertandingan kemudian dikonversi menjadi base 36.sumber
PHP, 74 Bytes
Versi Online
sumber
R, 87 byte
Awalnya, saya mencoba mengatur angka Triangular yang mungkin. Ini menyebabkan kode ini dengan 105 byte:
Ini membutuhkan lebih banyak pengindeksan jadi saya mencoba metodologi dari @Arnauld untuk mengurangi byte ke 87.
Kedua kode memanfaatkan huruf yang telah ditetapkan, karena mereka saya tidak dapat menemukan cara singkat untuk mengkonversi ke basis 36.
sumber