The Holy Numbersから学んだように、5つの神聖な数字(0, 4, 6, 8, 9
)があり、それらの数字だけで構成される正の整数は神聖です。さらに、数字の聖さは、数字の穴の合計です(+2
すべて0
または8
、+1
その他)。
現在、数値の神聖さを真に正確に表すために考慮すべき追加のプロパティがあります。数字の穴の数だけでなく、数字のどこで発生するかがわかります。
数を考慮してください88
。私たちの古いルールでは、それは聖性を持っているでしょう4
。しかし、それはほとんど公平ではありません!8
左側は、他よりも多くの仕事をしている8
- 10回仕事を!それはその仕事に対して報われるべきです。右側のすべての数字の総聖さ(このルールによって右側の数字に付与された追加の聖さポイントを含む)から1を引いたものに等しい追加の聖ポイントで報酬を与えます。
考慮すべきその他の例を次に示します。
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
すべての数字は、彼らの仕事に対して余分な神聖さで適切に報われ、すべてが順調です。このプロパティを「強化されたホラリティ」と呼びます。
すばらしい言語のPythonでは、強化されたホラリティを計算するアルゴリズムは次のようになります。
# 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)
チャレンジ
整数を指定するとn > 0
、n
数値をタイブレーカーとして使用して、昇順の拡張ホラリティでソートされた最初のホーリーナンバーを出力します。入力および出力は、言語で表現可能な最大の整数またはの2^64 - 1
いずれか小さい方より大きくないと仮定できます。
参考までに、いくつかのテストケースを以下に示します(入力、その後に出力)。
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
か?その場合は、おそらくどの入力が最初にそのような数値を生成するかを把握する価値があるので、人々は答えをテストできます。