Magic numbers: Difference between revisions

m
Move Python entry into correct alphabetical position
(Added Algol 68)
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}}==
10,333

edits