Seperti yang kita pelajari dari The Holy Numbers , ada 5 digit suci ( 0, 4, 6, 8, 9
), dan bilangan bulat positif yang hanya terdiri dari digit itu adalah suci. Selain itu, kekudusan nomor adalah jumlah lubang di nomor ( +2
untuk setiap 0
atau 8
, dan +1
sebaliknya).
Sekarang, ada properti tambahan untuk dipertimbangkan, untuk benar-benar dan akurat mewakili kekudusan nomor. Anda lihat, bukan hanya jumlah lubang di digit yang penting, tetapi juga di mana jumlah itu terjadi.
Pertimbangkan angkanya 88
. Dengan aturan lama kita, itu akan memiliki kekudusan 4
. Tapi itu tidak adil! Yang 8
di sebelah kiri melakukan lebih banyak pekerjaan daripada yang lain 8
- 10 kali lipat! Itu harus dihargai untuk pekerjaannya. Kami akan menghadiahkannya dengan poin kekudusan ekstra sama dengan total kekudusan dari semua digit di sebelah kanannya (termasuk poin kekudusan ekstra yang diberikan oleh aturan ini ke digit di sebelah kanannya), minus 1.
Berikut adalah lebih banyak contoh untuk dipertimbangkan:
Number: 8080
Digital holiness: (2 + 7 - 1) + (2 + 3 - 1) + (2 + 1 - 1) + (2 + 0 - 1)
Total holiness: 15
Number: 68904
Digital holiness: (1 + 5 - 1) + (2 + 2 - 1) + (1 + 1 - 1) + (2 + 0 - 1) + (1 + 0 - 1)
Total holiness: 10
Semua digit dihargai dengan tepat untuk pekerjaan mereka dengan kesucian ekstra, dan semuanya baik-baik saja. Kami akan menyebut properti ini "holaritas yang disempurnakan".
Dalam bahasa Python yang hebat, algoritme untuk menghitung peningkatan holaritas mungkin terlihat seperti ini:
# assumes n is a holy number
def enhanced_holarity(n):
if n < 10:
return 1 if n in [0, 8] else 0
else:
digits = list(map(int,str(n)[::-1]))
res = []
for i,x in enumerate(digits):
res.append(enhanced_holarity(x))
if i > 0:
res[i] += sum(res[:i])
return sum(res)
Tantangan
Diberikan bilangan bulat n > 0
, output n
Bilangan Suci pertama , diurutkan dengan naik holaritas meningkat, menggunakan nilai numerik sebagai tiebreak. Anda dapat mengasumsikan bahwa input dan output tidak akan lebih besar dari integer maksimum yang dapat diwakili dalam bahasa Anda atau 2^64 - 1
, mana yang kurang.
Untuk referensi, berikut adalah beberapa kasus uji (input, diikuti oleh output):
25
4, 6, 9, 44, 46, 49, 64, 66, 69, 94, 96, 99, 0, 8, 84, 86, 89, 40, 48, 60, 68, 90, 98, 80, 88
100
4, 6, 9, 44, 46, 49, 64, 66, 69, 94, 96, 99, 444, 446, 449, 464, 466, 469, 494, 496, 499, 644, 646, 649, 664, 666, 669, 694, 696, 699, 0, 8, 84, 86, 89, 844, 846, 849, 864, 866, 869, 894, 896, 899, 40, 48, 60, 68, 90, 98, 404, 406, 409, 484, 486, 489, 604, 606, 609, 684, 686, 689, 80, 88, 804, 806, 809, 884, 886, 889, 440, 448, 460, 468, 490, 498, 640, 648, 660, 668, 690, 698, 840, 848, 860, 868, 890, 898, 400, 408, 480, 488, 600, 608, 680, 688, 800, 808, 880, 888
200
4, 6, 9, 44, 46, 49, 64, 66, 69, 94, 96, 99, 444, 446, 449, 464, 466, 469, 494, 496, 499, 644, 646, 649, 664, 666, 669, 694, 696, 699, 944, 946, 949, 964, 966, 969, 994, 996, 999, 4444, 4446, 4449, 4464, 4466, 4469, 4494, 4496, 4499, 4644, 4646, 4649, 4664, 4666, 4669, 4694, 4696, 4699, 0, 8, 84, 86, 89, 844, 846, 849, 864, 866, 869, 894, 896, 899, 40, 48, 60, 68, 90, 98, 404, 406, 409, 484, 486, 489, 604, 606, 609, 684, 686, 689, 904, 906, 909, 984, 986, 989, 4044, 4046, 4049, 4064, 4066, 4069, 4094, 4096, 4099, 80, 88, 804, 806, 809, 884, 886, 889, 440, 448, 460, 468, 490, 498, 640, 648, 660, 668, 690, 698, 940, 948, 960, 968, 990, 998, 4404, 4406, 4409, 4484, 4486, 4489, 4604, 4606, 4609, 4684, 4686, 4689, 840, 848, 860, 868, 890, 898, 400, 408, 480, 488, 600, 608, 680, 688, 900, 908, 980, 988, 4004, 4006, 4009, 4084, 4086, 4089, 800, 808, 880, 888, 4440, 4448, 4460, 4468, 4490, 4498, 4640, 4648, 4660, 4668, 4690, 4698, 4040, 4048, 4060, 4068, 4090, 4098, 4400, 4408, 4480, 4488, 4600, 4608, 4680, 4688, 4000, 4008, 4080, 4088
2^64 - 1
? Jika itu masalahnya, mungkin perlu mencari tahu input mana yang pertama kali menghasilkan angka seperti itu, sehingga orang dapat menguji jawaban mereka.