Diberikan adalah bilangan bulat x> 0 dan basis apa saja y> 3.
- Jumlahkan semua digit x (jika ditulis dalam basis yang ditetapkan).
- Lipat gandakan ini dengan digit setinggi mungkin (selalu
base -1
). - Ulangi sampai nilai ini
(y - 1) ^ 2
Yang dicari adalah hitungan iterasi dan langkah-langkahnya.
Contoh 1:
x= 739
y= 7
searched: (7 - 1) ^ 2 = 36
based: (b7)2104
sum: (dec)7
mul: (dec)42
based: (b7)60
sum: (dec)6
mul: (dec)36
2 steps needed -> answer is [2, 739, 42, 36] or [739, 42, 36, 2]
Contoh 2:
x = 1712
y = 19
s: 324
step1: 1712 -> 360
step2: 360 -> 648
step3: 648 -> 324
3 steps needed -> answer is [3, 1712, 360, 648, 324] or [1712, 360, 648, 324, 3]
Khusus:
Dalam beberapa kasus (beberapa kombinasi dengan basis 3) Anda tidak akan bisa (y - 1) ^ 2
menyukai untuk x = 53
dan y = 3
. Untuk alasan ini y
harus lebih besar dari 3 dan Anda dapat mengabaikannya.
Hitungan iterasi harus menjadi nilai pertama atau terakhir
Ini adalah kode-golf kemenangan byte-count terendah.
code-golf
combinatorics
base-conversion
Dirk Reichel
sumber
sumber
Jawaban:
Jelly ,
1413 byte-1 byte dengan mencetak saat loop (
Ṅ
menggantikan pemisahan rantai,µ
dan penggabungan;
)TryItOnline!
Bagaimana?
Byter 13 alternatif mencetak setiap input ke loop plus feed baris (
Ṅ
), dan akhirnya secara implisit mencetak jumlah yang dikurangi dari hasil yang dikumpulkan, menghilangkan kebutuhan untuk pemisahan rantai monadik (µ
) dan concatenation (;
).sumber
Perl 6 , 60 byte
Diperluas:
Pemakaian:
sumber
C,
116113 byte-3 byte untuk menghitung ulang kuadrat setiap kali
Tidak digabungkan dan digunakan:
sumber
JavaScript (ES6),
97918482 byteUji kasus
Tampilkan cuplikan kode
sumber
Jelly , 16 byte
Saya kira saya tetap akan memposting ini, meskipun sudah dikalahkan saat saya menulisnya, karena ini adalah algoritma yang sangat berbeda dan menarik untuk ditulis. (Saya tidak tahu bagaimana
ÐĿ
parsing dari dokumen dan harus menyerah, meskipun tahu itu mungkin akan mengarah ke solusi yang lebih pendek daripada yang ini.)Cobalah online!
Penjelasan:
Penggunaan
<’¥
pada dasarnya adalah cara singkat untuk menulis angka dua (tautan dengan dua argumen) yang selalu mengembalikan -1 (karena kita tahu jawabannya tidak akan pernah lebih kecil dari basis). Memilih antara menjalankan itu secara rekursif, dan seluruh program secara rekursif, memungkinkan kami menentukan kapan harus berhenti mengulang. Kemudian ketika tumpukan dibuka di akhir rekursi, kami terus menambah -1 untuk menentukan berapa banyak langkah yang ada.sumber
MATL,
2521 byte4 byte disimpan berkat @Luis
Cobalah secara Online!
Penjelasan
sumber
Mathematica, 80 byte
adalah karakter penggunaan pribadi yangU+F4A1
digunakan untuk mewakili\[Function]
. Jika jumlah langkah tidak diperlukan dalam jawaban, ini bisa dilakukan dalam 60 byte:sumber