Magic numbers: Difference between revisions

Content added Content deleted
(→‎Python: a first quick draft)
m (→‎Python: some code cleanup)
Line 473: Line 473:


def magic_numbers(base):
def magic_numbers(base):
all = []
hist = []
n = l = i = 0
n = l = i = 0
while True:
while True:
l += 1
l += 1
for digit in range(-n % l, base, l):
hist.extend((n + digit, l) for digit in range(-n % l, base, l))
all.append((n + digit, l))
i += 1
i += 1
if i == len(all):
if i == len(hist):
return all
return hist
n, l = all[i]
n, l = hist[i]
n *= base
n *= base


Line 488: Line 487:
print("found", len(mn), "magic numbers")
print("found", len(mn), "magic numbers")
print("the largest one is", mn[-1][0])
print("the largest one is", mn[-1][0])

print("count by digits:")
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(*(f"{l}:{sum(1 for _ in g)}" for l, g in groupby(l for _, l in mn)))


print(end="minimally pandigital in 1..9: ")
mn = tuple(str(m) for m, l in mn if 8 < l < 11)
print(*(m for m, l in mn if l == 9 == len(set(str(m)) - {"0"})))
print("minimally pandigital in 1..9:", 0)
print(end="minimally pandigital in 0..9: ")
print(*(m for m in mn if len(m) == 9 == len(set(m).difference("0"))))
print(*(m for m, l in mn if l == 10 == len(set(str(m)))))</syntaxhighlight>
print("minimally pandigital in 0..9:")
print(*(m for m in mn if len(m) == 10 == len(set(m))))</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>
found 20457 magic numbers
found 20457 magic numbers
the largest one is 3608528850368400786036725
the largest one is 3608528850368400786036725
count by digits:
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
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: 0
minimally pandigital in 1..9: 381654729
minimally pandigital in 0..9: 3816547290
381654729
minimally pandigital in 0..9:
3816547290
</pre>
</pre>