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