Нахождение позиции цифры первого вхождения строки чисел в константе ЧамперноунаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Нахождение позиции цифры первого вхождения строки чисел в константе Чамперноуна

Сообщение Anonymous »

Константа Чамперноуна равна 0,123456789101112131415...
Какой более эффективный метод вычисления первого появления строки чисел в константе Чамперноуна? Например: строка «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]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»