Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 24, 2018 17:52:48

ArtemDav
Зарегистрирован: 2018-12-22
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка блокчейна

Блокчейн (blockchain) переводится как «цепочка блоков». Это способ хранения данных, защищённый от подделки, используемый, в частности, криптовалютой биткоин.

Блокчейн действительно представляет собой последовательность блоков. Каждый блок представляет собой некоторую полезную информацию (в частности, в случае биткоина это список транзакций за определённый период времени — кто кому когда сколько денег передал), снабжённую случайным числом и некоторыми служебными данными, в том числе хэшем — числом, которое по определённой формуле зависит от остальной части блока и хэша предыдущего блока.

Хэш должен быть меньше определённого числа. При этом формула, по которой вычисляется хэш, устроена так, что невозможно получить достаточно маленький хэш иначе, чем перебирая различные значения случайного числа. Поэтому если злоумышленник решит подделать блокчейн (и, допустим, вставить в его середину блок с записью о том, что все люди передают ему все свои деньги), то ему придётся подобрать новое случайное число в новое поддельном блоке и всех последующих (ведь хэш каждого следующего блока зависит от хэша предыдущего), что потребует невозможно больших вычислительных мощностей.

Поэтому блокчейн в целом защищён от подобных атак.

Напишите программу, которая проводит проверку правильности хэшей в модельном блокчейне с простой хэш-функцией.

Блок bn с номером n включает полезную информацию mn, представленную натуральным числом, rn — случайное число от 0 до 255 и hn — хеш (целое число от 0 до 255). У каждого блока хэш вычисляется по формуле hn = 37×(mn+rn+hn-1)%256, при вычислении хэша начального блока h0 вместо хэша предыдущего блока берётся ноль.

При этом каждый блок представлен одним числом bn = hn + rn×256 + mn×2562. При этом требуется, чтобы хэш hn был меньше 100.

Формат ввода
На первой строке вводится натуральное число N — количество блоков.
Далее следуют N чисел bn, каждое на отдельной строке.

Формат вывода
Следует вывести номер первого блока, у которого неправильный хэш (не меньше 100 или не совпадает с вычисленным по указанной в условии формуле), или -1, если все хэши в блокчейне правильные. Нумерация блоков идёт с нуля, т. е. они имеют номера от 0 до N-1.

Пример
Ввод Вывод
5
6122802
14406496
15230209
2541121
1758741
-1

Офлайн

#2 Янв. 4, 2019 12:03:54

darly
Зарегистрирован: 2019-01-04
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка блокчейна

ЯндексЛицей?)

Офлайн

#3 Янв. 4, 2019 13:56:48

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Проверка блокчейна

Если вы ждете готовый код - то наверное форум вас разочарует.
начинайте писать сами. Что не ясно - пишите сюда же подскажем.
Но делать вместо вас никто не станет.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#4 Янв. 4, 2019 23:06:11

ArtemDav
Зарегистрирован: 2018-12-22
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка блокчейна

darly
ЯндексЛицей?)
Дыа

Офлайн

#5 Янв. 5, 2019 14:59:00

ArtemDav
Зарегистрирован: 2018-12-22
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка блокчейна

ZerG
Если вы ждете готовый код - то наверное форум вас разочарует. начинайте писать сами. Что не ясно - пишите сюда же подскажем. Но делать вместо вас никто не станет.
Спасибо, я сделал

Офлайн

#6 Янв. 7, 2019 15:40:43

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Проверка блокчейна

Ну так прекрасно же.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version