우리가 성수 에서 배웠 듯이 , 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
모든 자릿수는 여분의 성결로 그들의 일에 대해 적절하게 보상되며, 모든 것이 좋습니다. 우리는이 속성을 "향상된 선명도"라고 부릅니다.
위대한 언어 파이썬에서 향상된 명료도를 계산하는 알고리즘은 다음과 같습니다.
# 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)
도전
integer가 주어지면 숫자 값을 타이 브레이커로 사용하여 강화 된 명료도를 오름차순으로 정렬 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? 보다 큰 숫자는 없습니다 . 이 경우 어떤 입력이 먼저 이러한 숫자를 생성하는지 알아 내면 사람들이 답을 테스트 할 수 있습니다.