Nomor kepercayaan
Membiarkan x
menjadi bilangan bulat dari basis sewenang-wenang, sedemikian rupa sehingga D
merupakan array dari digit-digitnya. x
adalah Nomor Percaya jika, untuk semua n
antara 1
dan panjang D
:
D[n+1] = D[n] + D[n-1] + ... + D[1] + n
Ambil, misalnya, nomor 349
dalam basis 10. Jika kita memberi label indeks untuk nomor ini, kita memiliki yang berikut ini.
Index Digit
----- -----
1 3
2 4
3 9
Mulai dari digit pertama, kita miliki 1 + 3 = 4
, yang menghasilkan digit berikutnya. Kemudian dengan digit kedua yang kita miliki 3 + 4 + 2 = 9
, yang, sekali lagi, menghasilkan digit berikutnya. Dengan demikian, nomor ini adalah Nomor Percaya.
Diberi bilangan bulat dengan basis antara 1 dan 62, hitung semua Nomor Percaya untuk basis itu, dan buat daftar, dipisahkan oleh baris baru. Anda dapat mengasumsikan bahwa ada jumlah terbatas dari Nomor Percaya untuk basis tertentu.
Untuk digit lebih besar dari 9, gunakan karakter alfa A-Z
, dan untuk digit lebih besar dari Z
gunakan karakter alfa a-z
. Anda tidak perlu khawatir tentang angka di luar z
.
Mereka tidak harus menjadi output dalam urutan tertentu.
Input sampel:
16
Output sampel:
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
12
23
34
45
56
67
78
89
9A
AB
BC
CD
DE
EF
125
237
349
45B
56D
67F
125B
237F
Ini kode golf, jadi kode terpendek menang. Semoga berhasil!
(Terima kasih kepada Zach karena telah membantu memformat dan menunjukkan beberapa masalah.)
CD
tidak ada dalam daftar? Karena semua kombinasi lain dengan digit kedua lebih dari digit pertama terdaftar, saya tidak mengerti mengapaCD
tidak memenuhi syarat.Jawaban:
Pyth, 38 byte
Cobalah online: Peragaan
Penjelasan:
sumber
Python 2, 104 byte
Ini menggunakan pengamatan berikut: dalam angka kepercayaan, digit
i
diikuti oleh2*i+1
, kecualii+1
untuk digit kedua. Dengan mencoba semua digit pertama yang mungkin dan menambahkan lebih banyak digit hingga terlalu besar, kita dapat menghasilkan semua angka kepercayaan.Kami menghitung karakter yang sesuai dengan angka
i
sebagaichr(48+i+(i>9)*7+i/36*6)
, yang menggesernya ke dalam angka, huruf besar, atau rentang huruf besar untuk interval0-9, 10-35, 36-61
.Kemudian, kami meningkat
i
melaluii+=i+1
dengan dua penyesuaian. Untuk membuatnyai+=1
setelah digit pertama, kami menambahkani
syarats
memiliki lebih dari1
karakter. Juga, kita perlu menghindari angka yang dimulai dengan 0 dari yang dicetak, sementara pada saat yang sama memungkinkan0
. Untuk melakukan ini, kami melakukan peretasan yang menyebabkani=0
kegagalan kondisii<n
pada loop berikutnya dengan menambahkannyan
. Hal ini dilakukan dengan mengganti1
dengann**0**i
, yang dikaitkan dengan hakn**(0**i)
, yang sama dengann**(i==0)
ataun if i==0 else 1
.sumber
Python 3,
201200 bytePenjelasan
Wawasan kunci di sini adalah bahwa dengan diberi urutan
x
(seperti, katakanlah[1,2,5]
), Anda bisa mendapatkan istilah berikutnya dalam urutan dengansum(x)+len(x)
, yang memberi11
dalam kasus ini (B
). Periksa untuk melihat apakah ini kurang darin
, dan jika ya, tambahkan urutan yang diperluas ke daftar semua urutan tersebut (diunggulkan oleh semua digit tunggal).Ini adalah bagaimana saya memetakan item urutan ke karakter. Ini
''.join
diedit bersama dan kemudian dicetak, dipisahkan oleh baris baru.sumber
print('\n'.join(''.join(map(lambda x:[str(x),chr(x+55),chr(x+61)][(x>9)+(x>35)],x))for x in X))
. Juga, saat ini 201 byte; bukan 200.GS2, 44 byte
Ini menghasilkan angka dalam urutan yang berbeda, tetapi deskripsi masalah tidak menentukan, jadi saya akan melakukannya! Inilah output untuk input 16.
Berikut ini adalah ekuivalen mnemonik untuk byte:
sumber
CJam,
464240 byteCobalah online di penerjemah CJam .
Bagaimana itu bekerja
Pada akhir 0 dan beberapa array kosong dibiarkan di tumpukan, sehingga juru cetak mencetak
0
.sumber
gawk, 111 byte
Untuk setiap digit mulai dari
1
untukbase-1
menghitung angka berikutnya, dan sementara ini lebih rendah dari dasar kita masih memiliki sejumlah kepercayaan. Menghitung digit berikutnya saat mencetak. Akhirnya dicetak0
.sumber