Найти - Пользователи
Полная версия: Ранжированный ряд от 1 до 10^18. <<for i in range(1, 999999999999999999): print(i);>>
Начало » Python для новичков » Ранжированный ряд от 1 до 10^18. <<for i in range(1, 999999999999999999): print(i);>>
1
Andry_ii
Спецы, приветсвую! Голову сломал уже с этими гугл советами…
Помогите с задачей, начну по порядку:
Есть код в виде “питонского батника” (расширение.py)
<<for i in range(1, 999999999999999999): print(i); print (“–), (++”);>>
Нужно заставить сохранить результат этого “батника” в простой .txt документ. Явно должно быть просто, но у меня ну никак не получилось(((
!Но это только часть задачи, на которой застрял. Понятно дело, что я могу запустить код в окне питона (не в фоновом режиме), и сохранить выведенный результат в .txt мануально своими ручками. Но это КВИНТИЛЛИОН СТРОК… В фоновом режиме в раза 2 быстрее пишет числа в заданном интервале.

Сама задача куда больше:
Пишу базу данных в MyPhpAdmin. Для более простого понимания пока представим, что в БД будет только 1 столбик:
“Stolbec”
000000000000000001
000000000000000002
000000000000000003
000000000000000004
000000000000000005
000000000000000006
000000000000000007
000000000000000008
000000000000000009
000000000000000010
000000000000000011
…и так далее… до ->
999999999999999997
999999999999999998
999999999999999999
Собственно данный код <<for i in range(1, 999999999999999999): print(i); print (“–), (++”);>> лишь для внесение данных в этот столбик.
дополнение в виде <<print (“–), (++”);>> лишь для удаления автоматически добавляющихся пробелов в результат, путём автозамены знаков “–” и “++” на пустоту (в .txt блокноте).

Согласен, что не самое изящное решение… Буду крайне признателен, если найдётся способ проще и эффективнее по временным затратам.
В окне питона запускал код и за сутки он мне наклепал лишь около 200 000 000 строк. А это несколько тысяч лет беспрерывного коддинга между прочим, если поделить квинтиллион на двести млн. 999999999999999999/200000000000

Резюмируя:
На данный момент мне нужно как-то создать 1ый столбец и заполнить его вышеуказанными данными. Идея была в следующем: Разбить вышеуказанный код на несколько равных отрезков, с сохранением каждого интервала чисел в отдельный текстовый файл, и одновременно запустить на нескольких машинах, дабы сэкономить время. В итоге должно получиться много файлов, которые планировал поочерёдно заливать в MyPHPAdmin импортом. Заливать в БД через окошко SQL не вариант - далеко не всё влезает и откровенно плохо справляется с такими объёмами. Честно, даже так мне всё это видится слишком долгим.

Может есть какой-то способ сделать это красиво? Быть может можно заставить Python самому создать БД в таким объёмом данных? И хорошо бы, если это будет быстрее моей идеи..

Надеюсь я доступно передал суть. Открыт к уточняющим вопросам и свежим идеям по теме.
doza_and
Andry_ii
Понятно дело, что я могу запустить код в окне питона (не в фоновом режиме), и сохранить
выведенный результат в .txt
Не можете. Получится файл размером в 10000 петабайт. Это превышает возможности вашего винчестера. Большинство ОС не могут создать файл такого размера. В postgress размер таблицы ограничен примерно миллиардом страниц. В остальных СУБД ограничения еще жестче. Те вы просто не можете создать такую таблицу даже близко. Оцените, возможно не хватит и всей суммарной емкости всех жестких дисков на планете земля.

Andry_ii
Честно, даже так мне всё это видится слишком долгим.
А мне это видится не долгим, а просто невозможным.
Andry_ii
doza_and, да уж… Твой ответ сильно приземлил.

Окей, зайду с другой стороны – опишу суть всей задачи. Хоть я уже сильно сомневаюсь в успешности идеи…

Пример:
Для этой строки: 674695456.74.25368941107495987
Хеш MD5: 934c55e98002c858977ebf5cb182b9e4
(без соли)
Загаданное число 74.
!Нужно её определить.
Предполагал, что могу достичь результата путём хеширования всех вариаций строк в БД и последующим сравнением соответствующего хеша.
Изи решение, но как уже было сказано выше – увы…

Может приложение запилить можно? (Хоть у меня, в виду недостаточности знаний и опыта, нет представления, как такое возможно без БД…)
Т.е.
Если:
674695456=a
74=b
25368941107495987=c
Нужно определить b, исходя из “a” (оно дано, и каждый раз разное число) и исходя из “хеша md5” (Оно дано)
Про “b” и “c” мы знаем лишь то, что они в известном диапазоне:
Вариации b= от 1 до 100
Вариации с= от 000000000000000001 до 999999999999999999

p.s. в строке (674695456.74.25368941107495987) символ в виде точки “.” тоже участвует в хешировании конечно же. (возможно это лишнее уточнение, но пусть будет)

Решение: Создать базу данных со всеми вариациями (это 100*10^18 = сто квинтиллионов строк всего), получить сумму Hash MD5 по каждой строке, и найти соответствие хеша из созданной Базы Данных с имеющимся хешем.
Ответ: Строка с соответсвующим хешем = загаданная строка
**Данное решение забраковано в виду отсутствия таких вычислительных мощностей и объёмов памяти.**

Как мы знаем, у хеширования нет обратного хода…
Радужные таблицы – как вариант решения, но слишком долго.

Может есть варик написать приложение по данной ТЗ?
Если да, через что можно достичь результата? Какой коддинг мне стоит изучить?

Andry_ii
*Доп. мысль на счёт “онлайн декодеров хешей”: Они расшифровывают хеш только в случае, если в их БД уже есть “слив данных” с представляемым хешем. Т.е. они как-то хранят огромные ошмётки беспорядочных данных и выдают результат при запросе, только если их БД уже знает результат.
По идее моё ТЗ идентичное, за исключением лишь, что у меня была бы другая БД (если б это было возможно уместить), и что моя БД была бы в известных диапазонах. Следовательно вывод напрашивается сам – туда слито во много раз меньше данных, чем, как предполагалось, нужно написать мне…
Andry_ii
Сложился вывод, что без космических мощностей решение невозможно…
Более того, когда технических мощностей станет хватать – алгоритм будет доработан до ещё больших значений только лишь прибавлением ещё пары тройки знаков после запятой.

Данный топик изжил себя, всем спасибо!
doza_and
Andry_ii
Хеш MD5: 934c55e98002c858977ebf5cb182b9e4
(без соли)
Загаданное число 74.
!Нужно её определить.
Решение исходно невозможно. Хеширование это не однозначное отображение как при шифровании. У вас множество строк будет иметь заданный хеш(и каждую из них будет сложно найти). Вы не сможете решить какая вам нужна.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB