Magic numbers: Difference between revisions
m
Move Python entry into correct alphabetical position
(Added Algol 68) |
Thundergnat (talk | contribs) m (Move Python entry into correct alphabetical position) |
||
Line 536:
The longest palindromic polydivisible number is:
30000600003
</pre>▼
=={{header|Python}}==▼
<syntaxhighlight lang="python">from itertools import groupby▼
def magic_numbers(base):▼
hist = []▼
n = l = i = 0▼
while True:▼
l += 1▼
hist.extend((n + digit, l) for digit in range(-n % l, base, l))▼
i += 1▼
if i == len(hist):▼
return hist▼
n, l = hist[i]▼
n *= base▼
mn = magic_numbers(10)▼
print("found", len(mn), "magic numbers")▼
print("the largest one is", mn[-1][0])▼
print("count by number of digits:")▼
print(*(f"{l}:{sum(1 for _ in g)}" for l, g in groupby(l for _, l in mn)))▼
print(end="minimally pandigital in 1..9: ")▼
print(*(m for m, l in mn if l == 9 == len(set(str(m)) - {"0"})))▼
print(end="minimally pandigital in 0..9: ")▼
print(*(m for m, l in mn if l == 10 == len(set(str(m)))))</syntaxhighlight>▼
{{out}}▼
<pre>▼
found 20457 magic numbers▼
the largest one is 3608528850368400786036725▼
count by number of digits:▼
1:10 2:45 3:150 4:375 5:750 6:1200 7:1713 8:2227 9:2492 10:2492 11:2225 12:2041 13:1575 14:1132 15:770 16:571 17:335 18:180 19:90 20:44 21:18 22:12 23:6 24:3 25:1▼
minimally pandigital in 1..9: 381654729▼
minimally pandigital in 0..9: 3816547290▼
</pre>
Line 588 ⟶ 624:
All magic numbers that are pan-digital in 0 through 9 with no repeats: 3816547290</pre>
▲=={{header|Python}}==
▲<syntaxhighlight lang="python">from itertools import groupby
▲def magic_numbers(base):
▲ hist = []
▲ n = l = i = 0
▲ while True:
▲ l += 1
▲ hist.extend((n + digit, l) for digit in range(-n % l, base, l))
▲ i += 1
▲ if i == len(hist):
▲ return hist
▲ n, l = hist[i]
▲ n *= base
▲mn = magic_numbers(10)
▲print("found", len(mn), "magic numbers")
▲print("the largest one is", mn[-1][0])
▲print("count by number of digits:")
▲print(*(f"{l}:{sum(1 for _ in g)}" for l, g in groupby(l for _, l in mn)))
▲print(end="minimally pandigital in 1..9: ")
▲print(*(m for m, l in mn if l == 9 == len(set(str(m)) - {"0"})))
▲print(end="minimally pandigital in 0..9: ")
▲print(*(m for m, l in mn if l == 10 == len(set(str(m)))))</syntaxhighlight>
▲{{out}}
▲<pre>
▲found 20457 magic numbers
▲the largest one is 3608528850368400786036725
▲count by number of digits:
▲1:10 2:45 3:150 4:375 5:750 6:1200 7:1713 8:2227 9:2492 10:2492 11:2225 12:2041 13:1575 14:1132 15:770 16:571 17:335 18:180 19:90 20:44 21:18 22:12 23:6 24:3 25:1
▲minimally pandigital in 1..9: 381654729
▲minimally pandigital in 0..9: 3816547290
▲</pre>
=={{header|Rust}}==
|