Райтап на задачу «Тяжелый сценарий»

dikiyponos

Автор:

dikiyponos

5 ноября 2026

9

05.11.2026
Тяжелый сценарий
Категория:

Misc

Задача «Тяжелый сценарий»

Автор:

YWxleGFuZGVy

Первая кровь:
feadal
Сложность:
medium
Дата публикации:
03.10.2026
Решений:
12
Рейтинг:
4.6/5
Ссылка:
Решать

Скачаем архив и посмотрим что внутри. Мы сразу видим кучу непонятных файлов, будто текстур. Попробуем найти, что это за формат.

Решение задачи «Тяжелый сценарий»: иллюстрация 1

Находим файл chart.bme.

Решение задачи «Тяжелый сценарий»: иллюстрация 2

Видимо, этот файл и объединяет в себе все те сотни файлов. Загуглим, что это.

Решение задачи «Тяжелый сценарий»: иллюстрация 3
Решение задачи «Тяжелый сценарий»: иллюстрация 4

Оказывается, что у этого формата есть даже статья на Википедии. Это формат нотных чартов для ритм-игр семейства Beatmania IIDX. Занимательно.

Можно долго крутить стегу в картинках и мучить aperisolve, можно долго искать всякое в спектрограмме WAV-файлов, но, к сожалению, это не приведёт ни к чему. Может, попробуем сыграть? Для этого подойдёт любой сайт, например bemuse.ninja, который умеет читать этот формат.

Решение задачи «Тяжелый сценарий»: иллюстрация 5
Решение задачи «Тяжелый сценарий»: иллюстрация 6

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

Прокрутим список #WAV в самый конец. Там будут достаточно подозрительные строки:

Решение задачи «Тяжелый сценарий»: иллюстрация 7

Попробуем найти оригинальные файлы этого Ascension to Heaven от автора xi. Скачиваем с archive.org — и действительно, там нет никаких ZV-сигналов. Копаем дальше.

Решение задачи «Тяжелый сценарий»: иллюстрация 8

Эти ноты образуют какие-то фигуры, что если в них закодированы буквы? Например, если они что-то отображают?

Вспомним, что представляет из себя сама игра — двумерную плоскость, где 5 столбцов по горизонтали (дорожки клавиш) и строки по вертикали. Строка ZVZVZVZVZVZVZV00 состоит из 16 символов, то есть 8 «шагов».

Возьмём как t — номер шага. t = 0 — берём первые пары из каждой строки (каналы 12-18). t = 1 — берём вторые и т. д. Составим таблицу.

Таблица каналов и сигналов BMS-чарта

А теперь давайте закрасим ненулевые значения чёрным цветом, чтобы выделялось.

Таблица нот с выделенными ненулевыми значениями: буква B

Ничего не напоминает? Это ведь буква B. Первая буква флага. Вот так каждый такт превращается в букву.

Теперь остаётся дело за малым — написать Python-скрипт для парсинга этого файла и вывода букв.

CHANNELS = ["12", "13", "14", "15", "18"]
SIGNALS = {"ZV", "ZW", "ZX", "ZY", "ZZ"}

measures = {}

with open("chart.bme.txt", "r", encoding="utf-8", errors="ignore") as f:
    for line in f:
        if line.startswith("#") and ":" in line:
            tag, data = line.strip().split(":", 1)
            meas = tag[1:4]
            chan = tag[4:6]

            if chan in CHANNELS and any(s in data for s in SIGNALS):
                if meas not in measures:
                    measures[meas] = {}
                # Режем hex строку на пары по 2 символа
                measures[meas][chan] = [data[i:i+2] for i in range(0, len(data), 2)]

for meas in sorted(measures):
    grid = []
    for t in range(7, -1, -1):
        row = ""
        for ch in CHANNELS:
            tokens = measures[meas].get(ch, [])
            note = tokens[t] if t < len(tokens) else "00"
            row += "#" if note in SIGNALS else "."
        grid.append(row)

    # Убираем пустые строки сверху и снизу
    while grid and grid[0] == ".....":
        grid.pop(0)
    while grid and grid[-1] == ".....":
        grid.pop()

    print(f"[{meas}]")
    for row in grid:
        print(row)
    print()
Решение задачи «Тяжелый сценарий»: иллюстрация 9

Запускаем скрипт — и остаётся только прочитать флаг:

Решение задачи «Тяжелый сценарий»: иллюстрация 10
Если вы нашли опечатку или ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter

Также по теме:

Райтап на задачу «Огрызок»

/Разборы задач

Райтап на задачу «Огрызок»

Определяем компактный формат Micro QR и считываем флаг с обрывка листа.
Прочитать

3

Райтап на задачу «Счет на минуты»

/Разборы задач

Райтап на задачу «Счет на минуты»

Разбираем хронологию из отчёта, восстанавливаем коды символов и получаем флаг.
Прочитать

3