Отборочные задания по IT направлениям состоят из трех блоков.
1 БЛОК - ТЕОРИЯ. Теоретический блок, общий для всех конкурсантов, вне зависимости от выбранного IT направления.
1.1. Решить в целых числах уравнение 1998х - 2002y = 2xy.
Найти все корни и доказать, что других нет. Можно найти математическое решение.
Если Вы для решения применяли Excel, то надо описать алгоритм решения и доказать, что других корней нет. Если Вы применяли среду программирования, то приведите код и опишите алгоритм решения. Однако, доказать, что Вы нашли все корни необходимо. Если Вы нашли какие-то корни, но не можете доказать, что других нет, все равно присылайте свое решение. Мы его проверим.
1.2. В прямоугольной трапеции ABCD с прямыми углами C и D провели биссектрисы углов A и B, которые пересекли сторону CD в различных точках E и F соответственно. Могло ли оказаться, что CE=FD?
1.3. Шестьдесят пять юных программистов приняли участие в смене "Золотого сечения". Им так понравилась смена, что после её окончания они решили обменяться SMS-сообщениями. Причем, каждый отправил одно сообщение четырем или шести другим участникам. Может ли так получиться, что каждый участник получил ровно пять таких сообщений?
1.4. Раньше у кондуктора были катушки с билетами, и счастливым называли билет, у которого сумма первых трех цифр равнялась сумме последних трех. Всего использовали шестизначные номера. Вы оказались в автобусе, где в катушке напечатаны билеты, состоящие только из нулей и единичек, причем в номере ровно десять цифр.
А) Найдите общее количество счастливых билетов, если у счастливого билета сумма первых пяти цифр равна сумме последних пяти.
В) Найдите общее количество счастливых билетов в катушке кондуктора, если у счастливого билета сумма первых пяти цифр равна сумме последних пяти, а в катушке 256 билетов, то есть у всех билетов в катушке первые цифры одинаковые. Определите, сколько этих одинаковых цифр и решите задачу для всех возможных комбинаций.
2 БЛОК - ПРАКТИКА. Практические задания по выбору одного направления из трех: «Большие данные», «Блокчейн», «Мультимедиа технологии». Задания подготовлены специально для образовательной смены Фонда поддержки талантливых детей и молодежи "Уральский образовательный центр "Золотое сечение" при участии специалистов ведущих уральских IT-компаний - НАУМЕН, НПО САПФИР, ИРИДИУМ, МУЛЬТИМЕДИА ВИДЕОСИСИЕМЫ. Попытки решения задач из данного блока будут рассматриваться экспертами как существенные преимущества при отборе на образовательную смену.
2.1. Задание по направлению «Большие данные и облачные технологии» по ссылке (см. ПРИЛОЖЕНИЕ 1. Задание Большие данные и облачные технологии).
2.2. Задание по направлению «Большие данные» (см. ПРИЛОЖЕНИЕ 2. Задание Большие данные и файл 2. Данные к заданию Большие данные movies по ссылке: https://vk.com/docs-151233763
2.3. Задание по направлению «Мультимедиа технологии» https://docs.google.com/document/d/1yPYzl9wT9yuuN-Hvta6ECeFgARJHTNpVUp-JL8ONjGg/edit
2.4. Задание по направлению «Блокчейн» (ПРИЛОЖЕНИЕ 3. Блокчейн)
3 БЛОК - ТВОРЧЕСТВО. Написать эссе на тему «Идеи практического применения данной технологии» (на выбор - «Большие данные», «Блокчейн», «Мультимедиа технологии»). Требование к оформлению эссе – от 10 строк до одного листа формата А4 шрифт Times New Roman, 14 пункт.
ПРИЛОЖЕНИЕ 1
Задание по направлению
«Большие данные и облачные технологии»
Теория
Мы будем говорить о Машинном обучении. В нем выделяют два способа обучения:
С учителем – это когда у нас есть данные с правильными ответами, т.е. выходной сигнал (метка) уже известна. Тогда алгоритм можно обучить на этом наборе данных, и далее применять его для классификации и предсказания. К таким алгоритмам относится классификация и регрессия. Классификация — это отнесение объектов к определенному классу по набору признаков. Следующий ниже рисунок иллюстрирует принцип работы задачи бинарной классификации при наличии 30 тренировочных образцов: 15 образцов маркированы как отрицательный класс (круги) и другие 15 - как положительный класс (знаки +). В этом сценарии наш набор данных является двумерным, то есть каждый образец имеет два связанных с ним значения: х1 и х2. Теперь мы можем применить алгоритм машинного обучения с учителем для извлечения правила - граница решения представлена черной пунктирной линией, - которое может выделить эти два класса и затем распределить новые данные в каждую из этих двух категорий при наличии значений х1 и х2:
Регрессия – это предсказание вещественной переменной. Например, предположим, что нас интересует предсказание оценок студентов за тест по математике. Если между затраченным на подготовку к тесту временем и итоговыми оценками существует связь, то мы могли бы воспользоваться ею в качестве тренировочных данных для извлечения модели, в которой время учебы используется для предсказания экзаменационных отметок будущих студентов, планирующих пройти этот тест. Следующий ниже рисунок иллюстрирует основную идею линейной регрессии. Мы находим прямую расстояние до которой от точек будет минимальной. Далее мы можем воспользоваться полученным уравнением прямой для прогнозирования.
Без учителя (самообучение) – это поиск скрытых закономерностей в данных. К таким алгоритмам относится кластеризация.
В данном задании нас интересует только алгоритмы обучения с учителем, давайте их и рассматривать.
Термины и системные обозначения
Обсудив две обширные категории машинного обучения - с учителем, без учителя, теперь обратимся к базовой терминологии, которую мы будем использовать. Следующая ниже таблица изображает выдержку из набора данных Ирисы Фишера, который представляет собой классический пример из области машинного обучения. Этот набор данных содержит данные измерений 150 цветков ириса трех видов: ирис щетинистый (lris setosa), ирис виргинский (Iris viгginica) и ирис разноцветный (Iris veгsicoloг) по четырем характеристикам, или признакам. Здесь каждый образец цветков представляет в нашем наборе данных одну строку, а результаты измерений чашелистиков и лепестков цветка в сантиметрах хранятся в столбцах, называемых также признаками набора данных:
Чтобы система обозначений и реализация оставались простыми и одновременно эффективными, мы привлечем несколько базовых элементов линейной алгебры. Для обозначения наших данных мы воспользуемся матричной и векторной системами обозначений. Мы будем следовать общепринятому соглашению представлять каждый образец как отдельную строку в матрице признаков Х, где каждый признак хранится как отдельный столбец. Тогда набор данных цветков ириса, состоящий из 150 образцов и 4 признаков, можно записать как матрицу размера 150х4.
Например, обозначает первое измерение 150-го образца цветков, длину чашелистика. Таким образом, каждая строка в этой матрице признаков представляет один экземпляр цветка и может быть записана как четырехмерный вектор-строка:
Каждое измерение в признаках - это вектор-столбец из 150 элементов.
Целевые переменные в данном случае метки классов (Вергинский, Разноцветный, Щетинистый) мы храним аналогичным образом, как вектор-столбец:
Использование Python для машинного обучения
Python - один из самых популярных языков программирования для науки о данных и потому обладает огромным количеством полезных дополнительных библиотек, разработанных его колоссальным сообществом программистов. Учитывая, что производительность таких интерпретируемых языков, как Python, для вычислительно-емких задач хуже, чем у языков программирования более низкого уровня, были разработаны дополнительные библиотеки, такие как NитРу и SciPy, которые опираются на низкоуровневые реализации на Foгtran и С для быстродействующих и векторизованных операций на многомерных массивах.
Установка библиотек Python
Python доступен для всех трех главных операционных систем - Windows, Маc OS Х и Linux, - и его установщик и документацию можно скачать с официального веб-сайта Python: https://www.python.org. Рекомендуем использовать самую последнюю версию Python 3. Дополнительные библиотеки, которые необходимо использовать, можно установить при помощи менеджера пакетов pip, который входит в состав стандартной библиотеки Python начиная с версии 3.3. Дополнительную информацию о менеджере пакетов pip можно найти на веб-странице https://docs.python.org/З/installing/index.html. После успешной инсталляции среды Python мы можем запускать менеджер пакетов pip из командной строки в окне терминала для установки дополнительных библиотекPython:
pip install НекаяБиблиотека
Уже установленные библиотеки можно обновить при помощи опции --upgrade:
pip install НекаяБиблиотека --upgrade
Настоятельно рекомендуем к использованию альтернативный дистрибутив Python для научных вычислений Anaconda. Это бесплатный, включая коммерческое использование, и готовый к использованию в среде предприятия дистрибутив Python, который объединяет все ключевые библиотеки Python, необходимые для работы в области науки о данных, математики и разработки, в одном удобном для пользователя кроссплатформенном дистрибутиве. Установщик Anaconda можно скачать с http://continuum.io/downloads, а краткое вводное руководство Anaconda доступно по прямой ссылке https://store.continuum. io/static/img/Anaconda-Quickstart.PDF.
Для хранения и управления данными мы будем в основном использовать многомерные массивы NumPy. От случая к случаю мы будем пользоваться надстройкой над библиотекой NumPy - библиотекой pandas, которая предлагает дополнительные высокоуровневые инструменты управления данными, делая работу с табличными данными еще более удобной. В помощь нашей познавательной деятельности, а также в целях визуализации количественных данных, что порой бывает чрезвычайно полезно делать для интуитивного понимания материала, мы будем пользоваться полностью настраиваемой библиотекой matplotlib. Блокнот Jupyter можно установить, как обычно, при помощи pip.
pip install jupyter notebook
Практическое задание.
Даны тестовые данные IRIS (https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data). В качестве набора данных для обучения возьмите первые 100 образцов. А за тестовый набор, возьмите оставшиеся 50 образцов. При помощи языка программирования Python создайте персептрон, который обучится на тестовом наборе данных и с точностью 100% сможет определить метки двух классов образцов из тестового набора (щетинистый и разноцветный).
Подсказка:
Алгоритм работы.
Необходимо установить Python 3.3. Подробная информация о том, как это сделать, можно посмотреть по следующей ссылки https://python-scripts.com/install-python-windows.
Необходимо установить библиотеки для python. Библиотеки можно установить при помощи специального менеджера пакетов PIP. Как это сделать можно посомтреть по следующей ссылки https://python-scripts.com/how-to-install-modules-python [пункт установка из источника].
Далее необходимо установить следующие библиотеки, введя команды в командной строке cmd: pip install numpy, pip install pandas, pip install matplotlib.
Выполняя шаги 1-3 возможно вы столкнётесь с некоторыми трудностями. Для их устранения необходимо почитать доп. литературу для работы с python.
Далее необходимо создать файл с расширением название файла.py и открыть данный файл в Python IDE правой кнопкой мыши, щёлкнув по нему.
Структура кода будет состоять из трёх основных частей. Первая часть – это подключение трёх установленных библиотек следующим образом: import numpy as np, команда as используется для того чтобы было удобно вызывать данную библиотеку и сократить её наименование, точно также можно поступить со следующей библиотекой import pandas as pd. Библиотека numpy вам понадобится для работы с матрицей (набором данных). Под набором данных понимается 100 образцов, где каждый образец будет состоять из n числа признаков, таким образом получится матрица. Про понятие матрицы можно почитать на сайте http://mathprofi.ru/deistviya_s_matricami.html.
Для решения задачи необходимо создать три функции на языке Python. Функцию можно объявить следующим образом def название функции(параметры). Про функции можно почитать на следующем ресурсе: https://pythonworld.ru/tipy-dannyx-v-python/vse-o-funkciyax-i-ix-argumentax.html.
Что же за функции необходимо определить? Для этого надо рассмотреть основы работы персептрона. По нему можно очень много найти информации как в книгах, так и в сети Интернет. Несмотря на это продемонстрируем то как он устроен. Возьмём самый простой пример. Пусть нам дано что наш компьютер должен уметь преобразовывать километры в мили.
Предположим, что формула, преобразующая километры в мили, нам неизвестна. Все, что мы знаем, — это то, что данные единицы измерения связаны между собой линейной зависимостью. Это означает, что если мы удвоим количество миль, то количество километров, соответствующее данному расстоянию, также удвоится. Такая зависимость воспринимается нами интуитивно. Существование линейного соотношения между километрами и милями дает нам ключ к разгадке формулы для вычислений. Она должна иметь следующий вид: мили = километры х с, где с — константа, величину которой мы пока что не знаем. Единственными дополнительными подсказками нам могут служить отдельные примеры правильного выражения расстояний в километрах и милях. Эти примеры будут выступать как бы в роли экспериментальных данных, отражающих истинное положение вещей, которые мы используем для проверки своей научной теории.
Пример
|
КМ
|
МИЛИ
|
1
|
0
|
0
|
2
|
100
|
62.37
|
Что нам нужно сделать для того, чтобы определить недостающую величину константы? Давайте просто подставим в формулу какое- либо случайное значение! Например, предположим, что с=0,5, и посмотрим, что при этом произойдет.
100 КМ = 50 МИЛЬ
Ну хорошо. Это вовсе неплохо, если учесть, что значение с=0,5 было выбрано случайным образом! Но мы знаем, что оно не совсем точное, поскольку пример 2 истинного соотношения говорит нам о том, что правильный ответ — 62,137. Мы ошиблись на 12,137. Это число представляет величину ошибки, т.е. разность между истинным значением из нашего списка примеров и расчетным значением.
Что дальше? Мы знаем, что ошиблись, и нам известна величина ошибки. Вместо того чтобы видеть в этой ошибке повод для отчаяния, мы используем эту информацию для того, чтобы предложить более удачное пробное значение константы с, чем первое.
Таким образом мы находим некое значение которые позволяет нам выдать приблизительно правильный ответ. Такое значение называется вес. Теперь можно перейти к такому понятию как чистый выход. Чистый выход – это сумма произведений значения признака объекта на его вес. Вернёмся к нашей поставленной задаче. Пусть мы выделили из всех признаков в наборе наших данных только два признака (длина чашелистика и длина лепестка), данные признаки выделены не случайно, именно они дают более точную оценку о том, к какому типу относится тот или иной цветок ириса. Это небольшая подсказка для решения поставленной задачи. Почему это именно так, вы должны выяснить сами.
Рассмотрим пример. Ирис №1 обладает следующими признаками, длина чашелистика 4.5 см и длина лепестка 1.5 см, а ирис №2 обладает 6 см и 4 см соответственно. Мы помним для того чтобы решить данную задачу необходимо найти значение весов, таких значений у нас будет два, т.к. кол-во весов = кол-ву выделенных признаков объекта. В примере выше мы брали веса случайными значениями, здесь мы можем поступить также, или задав весам 0 значение. Давайте подсчитаем чистый выход для образца ирис №1: 4.5х0+1.5х0 = 0, и для образца ирис №2: 6*0+4*0 = 0. Данные значения равны т.к. мы указали веса равные 0, так мы рассчитали чистый выход. Теперь стоит вопрос что делать с этим значением равным 0. Так как нам необходимо определить принадлежность цветков ириса к определенному классу учитывая их признаки – это размеры чашелистика, а таких классов в данной задаче мы выделяем два (ирис щетинистый и ирис разноцветный), давайте превратим название классов в числовое значение. Пусть будет ирис щетинистый числом -1, а ирис разноцветный числом 1, тогда можно применить некое условие, если чистый выход для каждого образца ириса больше или равен 0, то это ирис разноцветный (1), а если чистый выход меньше 0, то это ирис щетинистый (-1). В нашем примере мы получаем что чистый выход равен 0, значит наша функция определила, что это ирис №1 и ирис №2 – разноцветные. Но как в примере ранее мы не сможем правильно определить веса, на которые мы будем умножать, если мы не будем учиться на ошибках и не будем тренировать нашу систему. Потому есть тренировочный набор данных, который позволяет вычислить «хорошее» значение весов для правильной классификации цветков ириса.
Давайте рассмотрим листинг, который позволяет загрузить набор данных ирисов из Интернета, сделать данный набор тренировочным и выделить два ключевых признака для каждого образца цветков ириса, и превратить названия классов в число 1 или -1.
Листинг 1.
//Загружает набор данных из Интернета
url = https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data
//Преобразует данные в виде таблицы, вывести на экран данную таблицу можно командой df.tail() после команды pd.read()
df = pd.read_csv(url, header=None)
//Выведя на экран пример таблицы, можно увидеть, что -1 столбец хранит порядковый номер образца, 0 столбец длина чашелистика, 2 столбец длина лепестка, 4 столбец название класса цветка ириса. Данная команда выделяет первые 100 образцов цветка ириса путём среза от 0 до 100, 100 не включается в вывод. Таким образом в переменной y будет храниться 100 записей о том к какому классу принадлежит каждый образец цветка ириса
y = df.iloc[0:100, 4].values
//Данная команда выделяет также первые 100 образцов, но здесь мы берём не 4 столбец, а 0 и 2, это говорит о том, что в переменной X будет храниться 100 образцов цветков ириса с двумя признаками. Например, цветок 1: 1,2 далее цветок 2: 3,4 и так 100 цветков по две записи о признаке.
X = df.iloc[0:100, [0,2]].values
//Данная команда позволяет преобразовать класс, который в данных написан на английском, ирис щетинистый в число -1, а другой класс ирис разноцветный 1.
y = np.where(y == 'Iris-setosa', -1, 1)
Данный код создал две переменные. X – 100 образцов с записями о двух признаков для каждого и y – 100-образцов с записями о классе в виде числа. Образец 1 из переменной X это тот же самый образец что и образец 1 из переменной y. Всё это набор данных для обучения, оставшиеся 50 образцов мы в дальнейшем будем использовать для проверки результатов нашей системы, это тестовый набор данных.
И так у нас есть переменная X с признаками 100 образцов и переменная y с классами в числовой форме для тех же 100 образцов. После того как мы определили веса и вычислили чистый выход, давайте посмотрим, что с этим делать. А нужно следующее, сравнить результат, который выдала наша система с результатом, который является истинным и хранится в переменной y. Мы можем убедиться, что наша система не верно определила для образца №2 класс, т.к. он должен быть равен -1. На данном примере наша система ошиблась, значит мы подобрали не верные значения весов, и их нужно исправить. Данные значения подходят для образца №1, но не для образца №2. А наша задача найти такие веса, чтобы они подходили для всех 100 образцов. Для того чтобы исправить веса необходимо воспользоваться формулой. Нужно к текущему значениям весов прибавить коэффициент корректировки, помноженный на значение признака этого образца. Коэффициент корректировки вычисляется по формуле следующим образом:
0.01*(истинное значение принадлежности к классу – выход чистой функции нашей системы)
Рассмотрим, например, в чём привлекательность данной формулы. Если класс определен верно, как в примере с образцом №1, мы имеем коэффициент корректировки = 0.01*(1-1) = 0, следовательно, вес для данного образца менять не нужно, и он останется таким же значением равным 0. Но для образца №2 имеем коэффициент корректировки = 0.01*(-1-1) = -2*0.01 = -0.02, так мы уводим значение веса для данного образца в отрицательную сторону, что соответствует его истинному значению. В итоге получаем для образца №1: вес №1 = вес №1 + 0*признак №1 = 0, вес №2 = вес №2 + 0*признак №2 = 0.
Эти же веса обновляем для образца №2: вес №1 = вес №1 + -0.02*признак №1, вес №2 = вес №2 + 0.02* признак №2.
Мы получаем баланс, сильно не меняем значение для первого образца, но стремимся в отрицательную сторону для второго образца.
Стоит отметить что за один проход(итерацию) сделать мы этого не сможем. Обычно таких проходов(итераций) нужно сделать от 10 до 100 раз. Ниже приведен кусок кода, как можно реализовать такой подход. Здесь используется объекто ориентированный подход.
Листинг 2.
class Perceptron:
def __init__(self, eta=0.01, n_iter=10):
self.eta = eta
self.n_iter = n_iter
def fit(self, X, y):
self.w_ = np.zeros(1+X.shape[1])
self.errors_ = []
for i in range(self.n_iter):
errors = 0
for xi, target in zip(X,y):
update = self.eta*(target-self.predict(xi))
self.w_[1:] = self.w_[1:] + update * xi
self.w_[0] = self.w_[0] + update
if update!=0.0:
errors += 1
self.errors_.append(errors)
return self
Функции predict в данном листинге не указана.
Данной теории достаточно для того чтобы создать свой собственный персептрон на языке программирования Python.
ПРИЛОЖЕНИЕ 2
ЗАДАНИЕ ПО НАПРАВЛЕНИЮ
«Большие данные»
Дано:
Набор текстовых файлов, содержащих краткое описание фильмов на английском языке(в приложении к задаче).
Необходимо выполнить обработку содержания этих файлов.
Задание выполняется на языке программирования Python, версия 2.7.
Словом считается непрерывная последовательность из букв и цифр,
примеры слов: "apartment", "2019", the", "a", "1e", а это не слова: "don't", "J.F."
примеры неслов: "don't"(это два слова: don и t), "J.F." (это два слова: j и f)
пример преобразования строки в слова: "Chance is a middle-aged man who lives in the townhouse of an old, wealthy man in Washington D.C. President, whom he introduces to "Chauncey"." -> "chance is a middle aged man who lives in the townhouse of an old wealthy man in washington d c president whom he introduces to chauncey"
Все слова считаются регистронезависимо, рекомендуется сразу при чтении файла всё его содержание преобразовать в нижний регистр
Задание 1.
Нужно посчитать количество уникальных слов в каждом файле.
Ответ записать в файл out1.txt, строка в файле выглядит как "Имя_файла количество_уникальных_слов", каждый файл на новой строке.
Пример ответа:
2_Fast_2_Furious.txt 52
8.txt 129
9_to_5.txt 157
и так далее
Задание 2.
Нужно среди всех файлов вывести 20 самых часто употребительных слов, отсортированных в порядке убывания.
Ответ записать в файл out2.txt, каждое слово на новой строке.
Пример ответа:
the
a
he
she
on
and
и так далее
Задание 3(*).
Нужно для каждого файла вывести его ключевые слова.
Вводные данные:
1. IDF(Inversed Document Frequency) - относительная частота слова для данного набора документов, считается как (количество_документов)/(в_скольки_документах_встретилось_слово), например, если слово встретилось в 50 документах, а всего документов 2000, то, тогда IDF данного слова = 2000/50 = 40.
2. TF(Term Frequency) - сколько раз встретилось слово в данном документе.
3. TF-IDF (Term Frequency - Document Frequency) - метрика важности слова для данного документа, равна TF*IDF.
Тогда ключевыми словами данного документа будут являться слова, имеющие наибольшую TF-IDF.
В итоге требуется для каждого файла вывести 5 самых важных для него слов по TF-IDF в порядке убывания.
Ответ записать в файл out2.txt, строка в файле выглядит как "Имя_файла слово1 слово2 слово3 слово4 слово5", каждый файл на новой строке.
Пример ответа:
2_Fast_2_Furious.txt warehouse complex undercover fuentes esd
8.txt guido italian flashbacks memories veiled
9_to_5.txt hart gun doralee violet shock
и так далее
ПРИЛОЖЕНИЕ 3
Задание по направлению «Блокчейн
1 уровень
Разработчик Иванов решил создать собственную криптовалюту в январе невисокосного года на протоколе Proof-of-Work с временем формирования блока 30 мин и вознаграждением за него 50IvanCoin. Иванов первое время сам выступал в роли майнера. В апреле Иванов нанял еще двух разработчиков Петрова и Сидорова для развития и поддержки IvanCoin. Те тоже стали выступать в роли майнеров, но вычислительных мощностей у каждого было в 2 раза меньше чем у Ivanova. С июля было решено перевести IvanCoin на Proof-of-Stake. В августе токен появился на бирже с начальной стоимостью $5 и рос каждый месяц на 10%. Сколько токенов было у каждого разработчика к началу следующего года в долларовом эквиваленте? Для простоты вычислений считать, что расчет долей в протоколе Proof-of-Stake происходит только в начале месяца.
Считать, что при Proof-of-Work вероятность получить вознаграждение за блок равна отношению мощностей майнера к суммарным мощностям всех майнеров. При Proof-of-Stake вероятность получить вознаграждение за блок равна отношению количества токенов у майнера к сумме токенов всех майнеров.
2 уровень
Разработчик Иванов решил создать собственную криптовалюту в январе невисокосного года на протоколе Proof-of-Work с временем формирования блока 30 мин и вознаграждением за него 50IvanCoin. Иванов первое время сам выступал в роли майнера. В конце каждого месяца он проигрывал 30% своих токенов в online-казино. В апреле Иванов нанял еще двух разработчиков Петрова и Сидорова для развития и поддержки IvanCoin. Те тоже стали выступать в роли майнеров, но вычислительных мощностей у каждого было в 2 раза меньше чем у Ivanova. С июля было решено перевести IvanCoin на Proof-of-Stake. В августе токен появился на бирже с начальной стоимостью $5 и рос каждый месяц на 10%. Сколько токенов было у каждого разработчика к началу следующего года в долларовом эквиваленте? Для простоты вычислений считать, что расчет долей в протоколе Proof-of-Stake происходит только в начале месяца.
Считать, что при Proof-of-Work вероятность получить вознаграждение за блок равна отношению мощностей майнера к суммарным мощностям всех майнеров. При Proof-of-Stake вероятность получить вознаграждение за блок равна отношению количества токенов у майнера к сумме токенов всех майнеров.
3 уровень
Разработчик Иванов решил создать собственную криптовалюту в январе невисокосного года на протоколе Proof-of-Work с временем формирования блока 30 мин и вознаграждением за него 50IvanCoin. Иванов первое время сам выступал в роли майнера. В конце каждого месяца он проигрывал 30% своих токенов в online-казино. В апреле Иванов нанял еще двух разработчиков Петрова и Сидорова для развития и поддержки IvanCoin. Те тоже стали выступать в роли майнеров, но вычислительных мощностей у каждого было в 2 раза меньше чем у Ivanova. С июля было решено перевести IvanCoin на Proof-of-Stake. В августе токен появился на бирже с начальной стоимостью $5 и рос каждый месяц на 10%. Сидоров в конце каждого месяца переводил 80%, заработанных за последний месяц, токенов в доллары с комиссией 100 IvanCoin. Сколько токенов было у каждого разработчика к началу следующего года в долларовом эквиваленте? Для простоты вычислений считать, что расчет долей в протоколе Proof-of-Stake происходит только в начале месяца.
Считать, что при Proof-of-Work вероятность получить вознаграждение за блок равна отношению мощностей майнера к суммарным мощностям всех майнеров. При Proof-of-Stake вероятность получить вознаграждение за блок равна отношению количества токенов у майнера к сумме токенов всех майнеров.
|