Какой более эффективный метод вычисления первого появления строки чисел в константе Чамперноуна? Например: строка «12» впервые появляется под номером 1 и индексом 1 (десятичная точка не индексируется), а не как тривиальный ответ под номером 12 и индексом 14. Хотя она тоже там присутствует, это не первое ее появление в константа Чамперноуна.
Ниже приведен скрипт Python, который решает вышеуказанную проблему. Проще говоря, вы можете объединить переменную цикла и выполнить поиск по индексу результирующей строки. Но это практично только для чисел ниже 10^7. Примеры этого метода поиска приведены на Codegolf, но ни один из этих сценариев не может обрабатывать большие числа. Приведенный ниже скрипт может обрабатывать числа около 10^1000.
Для пояснения: «x» — это вмененное число, «n» — любое число, присоединенное к концу константы Champernowne, а « «p» — это точная десятичная позиция первого появления «x».
Мотивация: это интересная задача, применимая к сжатию данных. Кроме того, я слышал, что людям нравится искать первые появления своих любимых чисел в числе Пи, например. Но в случае с pi необходим грубый поиск, как и в случае с веб-страницей поиска pi. Здесь это не так.
Код: Выделить всё
import random
for f in range(1):
ax=x=random.randint(0,10**1000)
minguess=x+1
print('x',x,'\n')
d=0
while int(str(ax)[d])==9:
ax=int(str(ax)+'0')
d=d+1
wx=int(str(ax)+str(ax))
parsed=[]
for g in range(len(str(ax)),0,-1):
print('check length',g)
checklist=[]
for h in range(len(str(ax))):
wxtwo=int(str(wx)[h:h+g])
parsed.append(wxtwo)
for i in range(len(parsed)):
wparsed=parsed[i]
guess=wparsed-1
wparsed=int(str(guess)+str(wparsed))
j=1
while len(str(wparsed))0:
if str(wparsed).index(str(x))0:
checklist.append(guess)
wparsed=parsed[i]
guess=wparsed-0
wparsed=int(str(wparsed))
j=1
while len(str(wparsed))0:
if str(wparsed).index(str(x))0:
guess=min(checklist)
dguess=str(guess)+str(guess)
for k in range(len(str(guess))):
wguess=dguess[k:k+len(str(guess))]
wdguess=wguess+str(int(wguess)+1)+str(int(wguess)+2)
if wdguess.count(str(x))==1:
checklist.append(int(wguess))
if guess0:
d=10**(len(str(n))-1)-1
m=n
n=n-d
p=p+n*len(str(m))
n=d
p=1+p-len(str(q))
l=1
guesstwo=guess
while len(str(guesstwo))
Подробнее здесь: [url]https://stackoverflow.com/questions/78355703/finding-the-digit-position-of-the-first-occurance-of-a-string-of-numbers-in-the[/url]