Dengan bilangan bulat n> 2 , cetak atau kembalikan bilangan bulat non-negatif terkecil k sehingga a (n, k) = 9 , di mana a (n, k) ditentukan oleh:
- a (n, 0) = n
- a (n, k + 1) =
- a (n, k) / 2 + 1 jika a (n, k) genap
- jumlah digit a (n, k) ² (dalam basis 10) jika a (n, k) ganjil
Contohnya
Untuk n = 5 , output yang diharapkan adalah k = 4 :
a(5, 0) = 5
a(5, 1) = 7 (5² = 25 and 2 + 5 = 7)
a(5, 2) = 13 (7² = 49 and 4 + 9 = 13)
a(5, 3) = 16 (13² = 169 and 1 + 6 + 9 = 16)
a(5, 4) = 9 (16 / 2 + 1)
Untuk n = 40 , output yang diharapkan adalah k = 2 :
a(40, 0) = 40
a(40, 1) = 21 (40 / 2 + 1)
a(40, 2) = 9 (21² = 441 and 4 + 4 + 1 = 9)
Klarifikasi dan aturan
- Input dijamin lebih besar dari 2.
- Program Anda secara teoritis harus bekerja untuk nilai n . (Dalam praktiknya, ini mungkin dibatasi oleh ukuran bilangan bulat maksimum yang didukung oleh bahasa Anda.)
- k dapat berupa 0-diindeks atau 1-diindeks. Silakan sebutkan dalam jawaban Anda.
- Ini kode-golf , jadi jawaban tersingkat dalam byte menang!
Nilai pertama
Di bawah ini adalah nilai pertama dari n = 3 hingga n = 422 , dengan k 0 diindeks. (Untuk pengindeksan 1, tambahkan saja 1
nilai-nilai ini.)
1 2 4 3 3 5 0 4 3 4 2 6 1 1 6 5 5 4 1 5 2 3 3 7 6 2 3 2 2 7
6 6 5 6 6 5 1 2 2 6 6 3 1 4 3 4 4 8 1 7 6 3 5 4 6 3 2 3 3 8
7 7 3 7 4 6 6 7 5 7 6 6 6 2 4 3 3 3 6 7 3 7 2 4 7 2 6 5 6 4
7 5 2 5 6 9 6 2 3 8 2 7 1 4 6 6 6 5 1 7 4 4 3 3 7 4 3 4 2 9
6 8 6 8 6 4 6 8 2 5 3 7 6 7 3 8 2 6 7 8 6 7 5 7 6 7 4 3 3 5
6 4 3 4 4 4 6 7 6 8 3 4 6 8 7 3 6 5 6 8 3 3 2 7 6 6 5 7 6 5
7 8 2 6 3 3 6 6 6 7 4 10 6 7 3 3 6 4 1 9 2 3 3 8 7 2 6 5 2 7
7 7 6 7 3 6 7 2 4 8 3 5 6 5 6 4 2 4 6 8 3 5 6 4 7 5 2 3 6 10
7 7 3 9 2 7 1 9 5 7 6 5 6 7 4 9 6 3 6 6 3 4 2 8 7 7 6 8 6 4
7 9 4 3 3 7 7 8 3 9 4 7 6 8 3 6 6 8 7 7 7 8 6 5 7 4 6 4 2 6
7 7 6 5 3 4 7 5 4 5 3 5 7 7 6 8 2 7 1 9 6 4 6 5 7 7 2 9 6 8
7 4 3 7 4 6 6 7 6 9 3 4 6 4 2 3 3 8 1 7 6 7 2 6 7 8 3 7 5 6
7 8 2 9 3 3 6 7 6 4 4 4 6 7 6 7 6 7 6 8 7 5 6 11 7 7 3 8 4 4
7 4 6 7 3 5 6 2 2 10 6 3 6 4 3 4 4 9 7 8 3 3 6 7 7 6 4 3 6 8
9! ≠ 9
an opinion or conclusion formed on the basis of incomplete information.
Jawaban:
Sekam , 13 byte
Ini 1-diindeks. Cobalah online!
Penjelasan
Tidak ada yang terlalu mewah di sini.
sumber
Lω
menyelesaikan ini.Perl 6 , 41 byte (40 karakter)
Cobalah online!
Ini menggunakan 1-indexing dari k, sehingga memberikan 1 jawaban yang lebih tinggi daripada contoh di OP. Jika ini bukan arti dari pengindeksan 1, saya harus menambahkan 1 byte lagi.
Penjelasan : Ini adalah fungsi anonim. Kami hanya menggunakan fasilitas Perl 6 untuk membuat daftar menggunakan rekursi :—). Ini terlihat seperti ini:
(first element),(block that takes the previous element and gives the next)...(end condition)
. Dalam hal ini, elemen pertama adalah$_
(argumen fungsi utama) dan kondisi akhirnya adalah9
(dipenuhi ketika kita menghasilkan 9). Di blok tengah, kita gunakan$_
untuk merujuk argumennya (= elemen sebelumnya dari urutan). Ini?? !!
adalah operator ternary lama (lebih dikenal sebagai? :
). Akhirnya, kami mengambil panjang daftar ini dengan memaksa konteks numerik oleh+(...)
.Hal aneh terakhir di sini adalah jumlah digit. Angka adalah
Cool
(berperilaku seperti string dan angka), jadi kami menggunakan metode string.comb
aktif$_²
(berikan daftar karakter = digit), lalu tambahkan karakter ke atas (yang mengubahnya kembali menjadi angka).sumber
Jelly , 17 byte
Cobalah online!
Pendekatan lurus ke depan. Menggunakan pengindeksan berbasis 0.
Penjelasan
sumber
do-while n != 9
bukannyawhile n!= 9
Python 2 ,
129126766867645453 byte-3 byte terima kasih kepada Jonathan Frech. -8 byte terima kasih kepada Maltysen. -7 byte terima kasih kepada Jonathan Allan. -1 byte terima kasih kepada Tn. Xcoder.
Cobalah online!
Dari seseorang yang mungkin tidak cukup tahu matematika, ini tampaknya sepenuhnya sewenang-wenang. : P
sumber
)%2and sum
dengan)%2*sum
, menghemat tiga byte.k
seluruhnya dan menyimpan tujuh byte lagiMathematica, 58 byte
1-diindeks
Cobalah online! (untuk mengerjakan Matematika,
Tr
digantikan denganTotal
) disini adalah versi -1 byte oleh @JungHwanMin (tetapi tidak bekerja pada matematika jadi saya tetap menggunakan keduanya)
Mathematica, 57 byte
sumber
2∣#
alih-alihOddQ@#
dan tukarkan dua ekspresi dariIf
.JavaScript (ES6),
5950 byteDiindeks 0.
Cobalah
Penjelasan
Hal pertama yang kita lakukan adalah menghitung
n-9
. Jikan==9
demikian, tentu saja, memberi0
dan berhenti di situ. Jikan!=9
kemudiann-9
akan memberikan nilai non-nol yang, karena jujur, berarti kita dapat melanjutkan melalui logika AND. Kami memanggil fungsi lagi, meneruskan yang barun
ke sana, dihitung sebagai berikut:Jika
n
modulo2
benar - yaitu,n
aneh.Lipat gandakan
n
dengan sendirinya, ubah menjadi string dan hancurkan string itu menjadi array karakter individu (digit).Bergabung kembali dengan karakter menggunakan string
+
, memberikan kita ekspresi matematika.Evaluasi ungkapan itu, beri kami jumlah digit
n*n
.Jika
n%2
adalah falsey (yaitu,n
bahkan) maka kita hanya membagin
oleh2
dan menambahkan1
.Untuk hasil memanggil fungsi lagi, kami kemudian menambahkan
1
. Jadi, menggunakan input awal5
, prosesnya sebagai berikut:sumber
Jelly ,
1615 byte-1 byte berkat mil (penggunaan terner jika)
Tautan monadik yang mengambil dan mengembalikan nomor.
1-diindeks
Cobalah online! atau lihat test-suite (memaksa hasil untuk diindeks 0 dan format seperti blok kode OP)
Bagaimana?
sumber
²DSµH‘$Ḃ?n9$пL
Haskell,
6259 byteCobalah online!
Sunting: -3 byte terima kasih kepada @ Ørjan Johansen.
sumber
last$x:[y|odd a]
dapat disingkat menjadicycle[x,y]!!a
.Perl 5 , 56 + 1 (-n) = 57 byte
Cobalah online!
sumber
9
.05AB1E , 16 byte
Cobalah online!
Penjelasan
sumber
VB.NET (.NET 4.5.2), 107 + 20 (impor) = 117 byte
Membutuhkan
Imports System.Linq
Fungsi yang dibutuhkan
n
input integer dan mengembalikan berbasis 0k
.Tidak Disatukan:
sumber
Golfscript, 34 byte
Cobalah online!
Saya benar-benar membutuhkan cara yang lebih baik daripada saya harus menjumlahkan angka angka.
sumber
Pyth ,
2322 byteUntuk saat ini, ini adalah fungsi rekursif
tetapi saya akan mencoba untuk beralih ke..W
(sementara fungsional) untuk menyimpan byte sebagai gantinyaCoba di sini! (dengan kode tambahan untuk memanggil fungsi - gunakan- tanpa spasi)
y
<your_number>
sumber
Java 8,
11098 byteDiindeks 0
Penjelasan:
Coba di sini.
sumber
Clojure v1.8,
124113112 byteDiindeks 0
Cobalah online!
Penjelasan
sumber
Pyth, 18 byte
Cobalah online: Demonstrasi
Penjelasan:
sumber
Japt,
2221 byteDiindeks 0.
Cobalah
Penjelasan
Input bilangan bulat implisit
U
.Buat array bilangan bulat dari
0
keU-1
dan melewati masing-masing melalui fungsi.Tetapkan nilai
U
.Jika
U
habis dibagi 2.U
dibagi 2, ditambah 1 (Ä
).Lain:
U
dengan kekuatan 2 (²
), pisahkan menjadi array angka (ì
) dan dikurangi dengan penjumlahan (x
).Tambahkan array yang dihasilkan ke array input.
Temukan indeks kemunculan pertama
9
dalam array. Secara implisit mengeluarkan hasilnya.sumber
@¥9}a@=u ?U²ìx :U/2Ä;°T
Jika saja ada metode yang mengembalikan jumlah iterasi sampai nilai berhenti berubah ...