top of page

Level 3

В центральном компьютерном 
зале

"Wintermute"

Друзья проникли в центральный компьютерный зал Wintermute!
Главный сервер корпорации выглядит так, как и положено компьютеру, принадлежащему Evil Corporation - со множеством подозрительно мигающих лампочек и огромных бобин с магнитной лентой.

 

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

Поведение лампочек подчинено строгим законам: будет ли данная лампочка гореть в следующий момент времени зависит только от того, горят ли в этот момент она сама и два её соседа.

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

Приведём пример.

Клеточными автоматами - особенно одномерными - очень серьёзно занимается учёный, изобретатель и бизнесмен Стивен Вольфрам. На их основе он практически создал целую науку и даже написал толстенную книгу:

Её страницы наполнены изображениями работающих клеточных автоматов.
Например, вот так:

Как решить задачу ?

Каждому поколению (состоянию) автомата нужно присвоить порядковый номер. Так, первое поколение, которое вы получите в качестве задания, будет называться поколение номер 1.
Номер каждого следующего поколения будет увеличиваться на единицу.
Поколение автомата будет представлено в виде строки, состоящей из нулей и единиц

Далее вам нужно будет каким-то образом представить правила автомата (эти правила в виде таблицы вы тоже получите в задании). Подумайте над удобным представлением, которое позволит вам быстро находить состояние клетки в следующем поколении при текущем состоянии этой клетки и двух её соседних (здесь подойдёт струкрута данных, называемая "словарём" (dictionary).

Теперь нужно "просканировать" всё текущее поколение автомата, рассматривая каждый раз по три соседние клетки и определяя (в соответствии с правилами) состояние центральной клетки этой тройки в следующем поколении. Вот так:

 

Обратите внимание, что мы не можем определить состояние крайней левой и крайней правой клетки, так как у них нет достаточно соседей. Поэтому в следующем поколении эти клетки мы будет просто заменять нулями.

Что вам может понадобиться для решения ?

Для решения этой задачи вам может понадобиться словарь (dict). В нём удобно хранить правила автомата. Задайте соответствие между тремя соседями и следующим состоянием клетки, например, так:

rule = {"110" : "0", "111" : "1", ... }

Чтобы извлечь состояние клетки в следующем поколении, достаточно обратиться к словарю:

next = rule["110"]

 

Словарь - крайне важная структура данных Пайтона (и вообще). Познакомьтесь с ним хорошо!

Как раскрыть пароль ?

Каждый хакер в своём почтовом ящике получит сообщение, в котором будет дана начальная конфигурация (1-е поколение) и правила автомата.
После запуска автомата, вам нужно будет посмотреть на 30-е поколение.
Суммируйте все единицы в 30-м поколении: полученное число и будет вашей частью пароля!

Подсказка. Чтобы легко суммировать единицы в строкe (string), соcтоящей из нулей и единиц, воспользуйтесь следующей коммандой:

result = sum(map(int, list(generation))))

где generation - это строка, представляющая поколение. В качестве домашнего задания попробуйте разобраться, что здесь происходит - это на самом деле будет крайне полезно!


Пароль будет состоять из частей, раскрытых каждым из хакеров в следующем порядке:

Линус + Сатоши Накамото + Тринити + J.F.Sebastian + Дораемон

 

до конца уровня

Теперь, когда вы знаете пароль, можете переходить на

bottom of page