Angka segitiga adalah angka yang dapat dinyatakan sebagai jumlah dari bilangan bulat positif berurutan, mulai dari 1. Mereka juga dapat dinyatakan dengan rumus n(n + 1) / 2
, di mana n
ada bilangan bulat positif.
Pasangan digit angka dihitung dengan cara berikut:
- Membagi angka menjadi array dari digit misalnya
613 => [6 1 3]
- Untuk setiap angka dalam array, hitung angka
n
segitiga th;[6 1 3] => [21 1 6]
- Jumlah array yang dihasilkan;
[21 1 6] => 28
Tugas Anda adalah, diberi bilangan bulat n
, berulang kali menghitung n
mitra digitangular, hingga hasilnya sama dengan 1, lalu menampilkan semua nilai yang dihitung. Anda dapat menampilkan nilai dalam urutan apa pun, dan dengan penyertaan opsional dari nomor asli pada awal array. Ini adalah kode-golf sehingga kode terpendek menang.
Uji kasus
23 => 9 45 25 18 37 34 16 22 6 21 4 10 1
72 => 31 7 28 39 51 16 22 6 21 4 10 1
55 => 30 6 21 4 10 1
78 => 64 31 7 28 39 51 16 22 6 21 4 10 1
613 => 28 39 51 16 22 6 21 4 10 1
8392 => 90 45 25 18 37 34 16 22 6 21 4 10 1
11111 => 5 15 16 22 6 21 4 10 1
8592025 => 117 30 6 21 4 10 1
999999999 => 405 25 18 37 34 16 22 6 21 4 10 1
141
dan memilikin
angka. Nilai maksimum yang dapat dimiliki oleh mitra digitangular-nya adalah45n
, jadidigi-△(x) ≤ 45n < 45(1+log_10(x))
, dan untukx > 141
, kita miliki45(1+log_10(x)) < x
, makadigi-△(x) ≤ x-1
untukx > 141
, dan begitu kita melewati141
batas, yah, kita membuktikan secara brutal melalui program.Jawaban:
Sekam , 6 byte
Cobalah online!
Penjelasan
sumber
05AB1E ,
65 byteCobalah online! Sunting: Disimpan 1 byte berkat @Emigna. Penjelasan:
sumber
€
denganS
, Anda dapat melewati satuO
.L
berperilaku seperti itu?J,
2019 byteCobalah online!
Keluaran nomor aslinya juga.
Penjelasan
sumber
[:+/
->1#.
meow!APL (Dyalog) ,
232017 byte3 byte disimpan berkat @ngn
Cobalah online!
Bagaimana?
⍵∪⍨
- letakkan dulu array saat ini ke+/
- jumlah dari∊
- diratakan⍳¨
- rentang masing-masing⍎¨⍕
- digit dari⊃⍵
- nilai sebelumnya⍣≡
sampai konvergensi. Penggunaan∪
(gabungan) memastikan setelah 1 yang pertama bergabung, yang berikutnya akan dikecualikan karena mengatur keunikan, dan array akan konvergen.sumber
1↓
(drop dulu){+/∊⍳¨⍎¨⍕⎕←⍵}⍣≡
tanpa mencetak 1 yang terakhir?Haskell,
514746 byteCobalah online!
Sunting: @ H.PWiz menyimpan satu byte. Terima kasih!
sumber
Python 2 , 62 byte
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) ,
4341 byteCobalah online!
Bagaimana itu bekerja
Ekspresi
#.(#+1)/2&@IntegerDigits@#
memberikan padanan digitangular dari#
. KamiEcho
input, gunakan evaluasi hubung singkat dengan&&
untuk berhenti jika kami telah mencapai1
, dan jika tidak berulang pada mitra digitangular.-2 byte terima kasih kepada Martin Ender untuk
.
triknya: kita tidak perlu menggunakanTr
jumlah penjumlahan jika kita mengganti perkalian#(#+1)/2
dengan produk titik#.(#+1)/2
.sumber
Tr
:Echo@#>1&�[#.(#+1)/2&@IntegerDigits@#]&
FixedPointList
kecuali untuk bagaimana mencetak titik tetap dua kali). Sepertinya itu seharusnya muncul sebelumnya.Bahasa Wolfram (Mathematica) ,
494239 byteTerima kasih kepada Misha Lavrov karena telah menghemat 3 byte.
Cobalah online! (TIO membutuhkan tanda kurung di sekitar
++y
untuk beberapa alasan. Dalam instalasi Mathematica lokal saya berfungsi tanpa mereka, sebagaimana mestinya.)Mencetak setiap nilai pada barisnya sendiri, didahului oleh
>>
, dan termasuk angka awal.sumber
#//.x_:>(y=IntegerDigits@Echo@x).++y/2&
. (... mungkin. Untuk beberapa alasan, TIO tidak suka ini, tetapi Mathematica baik-baik saja dengan itu?)#//.x_:>(y=IntegerDigits@Echo@x).(++y)/2&
41 byte dan bekerja di TIO. Tetapi salinan Mathematica saya tidak menganggap tanda kurung itu perlu.Ohm v2 ,
97 byteCobalah online!
Penjelasan
sumber
u
perlu?}
tidak tidak akan membagi angkaRetina , 21 byte
Cobalah online! (Output dari masing-masing case tidak dipisahkan dengan baik, tetapi setiap output berakhir dengan a
1
.)Mencetak setiap nomor pada barisnya sendiri, secara berurutan, termasuk nomor awal.
Penjelasan
Ini hanya beberapa konfigurasi program.
{
membuat loop program sampai gagal mengubah hasil (yang terjadi setelah kita sampai1
),:
mencetak nomor sebelum setiap iterasi, dan;
mencegah hasil akhir dari dicetak dua kali pada akhir program. ItuG
hanya cara biasa saya untuk membuat tahap no-op.Ubah setiap digit menjadi unary dan letakkan di barisnya sendiri.
Hitung angka segitiga pada setiap baris, dengan mengganti masing
1
- masing dengan awalannya. Kita juga bisa menggunakan diM!&`1+
sini, yang memberi kita semua sufiks dari setiap baris.Hitung semua
1
s, yang merangkum semua angka segitiga dan mengubah hasilnya kembali menjadi desimal.sumber
Ruby,
60 4742 byte-13 byte oleh @JustinMariner
-5 byte oleh @GB
Cobalah online!
sumber
[*...]
) dan mengubah(k+1)
ke-~k
untuk menyimpan total 5 byte: Coba online! Selain itu, Anda dapat menyimpan 8 lebih banyak dengan beralih ke fungsi lambda anonim: Cobalah online!.map
tidak bisa mengambil array.Befunge-93 , 51 byte
Cobalah online!
James Holderness dengan cerdik membentuk kembali progarm saya menjadi bentuk 51-byte. Terima kasih!
sumber
Pushy ,
24222117 byteCobalah online!
Penjelasan
sumber
Japt ,
1917 byteMengambil input sebagai array elemen tunggal.
Cobalah
sumber
R , 70 byte
Cobalah online!
Mengembalikan nilai asli juga.
R , 80 byte
Cobalah online!
Tidak mengembalikan nilai asli.
sumber
Lua , 91 byte
Cobalah online!
sumber
05AB1E ,
2012 byteDisimpan 2 byte berkat caird coinheringaahing
Cobalah online!
Penjelasan
(versi lama)
sumber
JavaScript,
6157 byteCobalah online!
sumber
Python 2 , 69 byte
Cobalah online!
sumber
Arang , 18 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
dc , 62 byte
Cobalah online!
sumber
k , 19 byte
Tidak mengherankan bekerja sama dengan solusi APL dan J yang sudah diposting
sumber
Jelly , 7 byte
Cobalah online!
DRFSµÐĿ
: Tautan program / monadik lengkap.ÐĿ
: Loop sampai hasilnya tidak lagi unik (jika sesuatu selain 1 akan muncul dua kali, maka input yang diberikan tidak memiliki hasil yang pasti, karena tidak akan pernah mencapai 1).D
: Konversi dari integer ke desimal.R
: Range (1-diindeks). Vectorizes.F
: Ratakan danS
: Sum (µ
hanya menciptakan rantai monadik baru)sumber
dc, 31 byte
Fungsinya
m
menghitung digitangular dari inputnya;f
ulangi ini sampai hasilnya mencapai 1.Perhatikan bahwa kami menggunakan input radix untuk mengekstrak digit - ini berarti ia akan bekerja di sistem basis apa pun, tidak hanya desimal.
Demo
sumber
Python 2 , 76 byte
Cobalah online!
sumber
Neim , 8 byte
Penjelasan:
Cobalah online!
Output terformat
sumber
D , 140 byte
Cobalah online!
sumber
PHP, 71 +1 byte
Jalankan sebagai pipa dengan
-nR
atau coba online . (membutuhkan PHP 5.3 atau yang lebih baru untuk operator Elvis)sumber
A?:B
: jika A benar maka A yang lain BTambahkan ++ , 32 byte
Cobalah online!
Tidak menampilkan nilai pertama
Bagaimana itu bekerja
sumber
Perl 6 , 36 byte
Cobalah online!
Termasuk nomor input dalam daftar output.
sumber