Twitter 経由で centerofmath.org からこのパズルを見つけました。
10 桁の数字があり、左端の数字が数字のゼロの数でもあり、左から 2 番目の数字が 1 の数字であり、最後の数字 (または右端の数字) がその数字の 9 の数字になるまで続きます。 . この番号は何ですか? また、一意ですか?
パズルを解くために Python でプログラムを書きました。
def yielder(exponent):
i = 10**exponent
while i < (10**(exponent+1))-1:
yield i
i += 1
def is_solution(num):
l = list(num)
#l.reverse()
is_sol = True
for i, e in enumerate(l):
if int(e) != l.count(str(i)):
is_sol = False
break
return is_sol
if __name__=="__main__":
import sys
ofile = open('solution.txt', 'w')
j = int(sys.argv[1])
print("checking between {0} and {1}".format(10**j, (10**(j+1))-1))
ofile.write("Solutions between {0} and {1}:\n".format(10**j, (10**(j+1))-1))
for x in yielder(j):
if is_solution(str(x)):
ofile.write('\t{0}\n'.format(x))
print("solution is {0}".format(x))
ofile.close()
そして、私が得た解決策は6210001000
しかし問題は、解決するのに数時間かかったということです。高速化するために使用できるテクニックがあるかどうか知りたい
ところで、これらは解決策である10 9,999,999,999の間の数字です
Solutions between 10 and 99:
Solutions between 100 and 999:
Solutions between 1000 and 9999:
1210
2020
Solutions between 10000 and 99999:
21200
Solutions between 100000 and 999999:
Solutions between 1000000 and 9999999:
3211000
Solutions between 10000000 and 99999999:
42101000
Solutions between 100000000 and 999999999:
521001000
Solutions between 1000000000 and 9999999999:
6210001000