Jak dowiedzieliśmy się z The Holy Numbers , istnieje 5 świętych cyfr ( 0, 4, 6, 8, 9
), a dodatnie liczby całkowite składające się wyłącznie z tych cyfr są święte. Ponadto świętość liczby jest sumą dziur w liczbie ( +2
dla każdego 0
lub 8
, i +1
inaczej).
Teraz należy wziąć pod uwagę dodatkową właściwość, aby naprawdę i dokładnie przedstawiać świętość pewnej liczby. Widzisz, liczy się nie tylko liczba dziur w cyfrze, ale także to, gdzie w liczbie występuje.
Rozważ numer 88
. Według naszych starych zasad miałaby świętość 4
. Ale to niesprawiedliwe! 8
Po lewej robi więcej pracy niż inne 8
- 10 razy więcej pracy! Powinien zostać nagrodzony za swoją pracę. Nagrodzimy go dodatkowymi punktami świętości równymi całkowitej świętości wszystkich cyfr po prawej stronie (w tym dodatkowych punktów świętości przyznanych przez tę zasadę cyfrom po prawej), minus 1.
Oto więcej przykładów, które należy wziąć pod uwagę:
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
Wszystkie cyfry są odpowiednio nagradzane za swoją pracę z dodatkową świętością i wszystko jest w porządku. Będziemy nazywać tę właściwość „zwiększoną świętością”.
We wspaniałym języku Python algorytm obliczania zwiększonej holistyczności może wyglądać mniej więcej tak:
# 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)
Wyzwanie
Biorąc pod uwagę liczbę całkowitą n > 0
, n
wypisz pierwsze Święte Liczby, posortowane według rosnącej zwiększonej holarity, używając wartości liczbowej jako rozstrzygającego. Możesz założyć, że wejście i wyjście nie będzie większe niż maksymalna reprezentowalna liczba całkowita w twoim języku lub 2^64 - 1
, zależnie od tego, która wartość jest mniejsza.
Dla odniesienia, oto kilka przypadków testowych (dane wejściowe, a następnie dane wyjściowe):
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
? W takim przypadku prawdopodobnie warto dowiedzieć się, który sygnał wejściowy generuje takie liczby, aby ludzie mogli przetestować swoje odpowiedzi.