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.Odpowiedzi:
Python 2,
138122 bajtówSzuka liczb świętych do 5 N dla wejściowego N , który jest absurdalnie wolny:
Tutaj limit wynosi 5 N 2 i faktycznie można uruchomić przypadki testowe, kosztem jednego bajtu:
Pierwszy fragment jest ważny, jak 5 N równe 5 N 2 dla dodatnich liczb całkowitych N .
źródło
Lua, 317 bajtów
Miałem pewne problemy z tym, niektóre rzeczy w Lua nie działają tak, jak mi się wydaje. Będę musiał spróbować z nimi zagrać, jeśli chcę zagrać w golfa. Możesz przetestować lua online , zastępując
arg[1]
je wybraną liczbą elementów :).Bez golfa i wyjaśnienia
Zagnieżdżone trójskładniki użyte dla nowej wartości
m
mogą być przetłumaczone na zagnieżdżone ifs jako:Chciałbym również zastąpić zagnieżdżenie
for
za pomocątable.sort
, ale z niewiadomego powodu poniższe polecenia nie działają, mimo że nie tworzy nieskończonej pętli ani nie psuje funkcji sortowania.źródło
JavaScript (ES6),
166165 bajtówEdycja: Zapisano 1 bajt, zwracając tablicę ciągów.
Nie golfowany:
źródło