В ходе анализа содержимого персонального компьютера была обнаружена таблица символов (таблица 1) и скриншот формулы (рисунок 1).
Экспертами установлено, что в таблице символов скрыт пароль от рабочего стола компьютера, каждая буква которого находится на определенной позиции, вычисляемой с помощью указанной формулы.
Значение параметров a и b меньше 16.
Для решения необходимо подобрать такие a и b, для которых будет вычислен осмысленный пароль. Вручную это делать очень долго. Для этого можем написать программу, которая рассчитает слова длинной 13 символов для всех a и b по формулам вычисления координат.
def solve_password_with_table(x0, y0, letter_table, target_length=13):
for a in range(16):
for b in range(16):
password = ""
x, y = x0, y0
coords = [] # Список для хранения координат для каждого символа
# Выводим первую координату (x0, y0)
try:
char = letter_table[y][x]
password += char
coords.append((x, y)) # Добавляем первую координату
except IndexError:
password = ""
coords = []
print(f"a={a} b={b}, Пароль: Ошибка: выход за границы таблицы для начальной координаты")
print("-" * 20)
continue # Переходим к следующей комбинации a и b
# Рассчитываем остальные координаты
for _ in range(target_length - 1): # На один символ меньше, так как первый уже учтен
x = (x + a) % 16
y = (y + b) % 16
try:
char = letter_table[y][x]
password += char
coords.append((x, y)) # Добавляем координаты
except IndexError:
password = ""
coords = []
break
print(f"a={a} b={b}, Пароль: {password}")
# Таблица
letter_table = [
['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О'],
['П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'О', 'Ю'],
['Я', 'А', 'Б', 'В', 'Г', 'Н', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н'],
['О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Ч', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э'],
['Ю', 'Я', 'А', 'Я', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М'],
['Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ц', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь'],
['Э', 'Ю', 'Я', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л'],
['М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Н', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы'],
['Ь', 'Э', 'Ю', 'Я', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'Е'],
['Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ'],
['Ы', 'Ь', 'Э', 'Ю', 'Я', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'И', 'И', 'Й'],
['К', 'Л', 'М', 'Н', 'С', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ'],
['Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'А', 'Б', 'В', 'Г', 'Д', 'О', 'Ё', 'Ж', 'З', 'И'],
['Й', 'К', 'Е', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш'],
['Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'А', 'Б', 'Т', 'Т', 'Д', 'Е', 'Ё', 'Ж', 'З'],
['Л', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч']
]
# Запускаем решение с заданными параметрами и таблицей
solve_password_with_table(6, 9, letter_table)
Вывод программы будет:
…
a=5 b=3, Пароль: СОЛНЦЕСТОЯНИЕ
…
Видим, что нам подходят а = 5 и b = 3, так как это единственная строчка с осмысленным текстом: «СОЛНЦЕСТОЯНИЕ».