🔹 Шаг 1. Перевод чисел с неизвестной цифрой x
Идея:
все операнды записаны в 32-ричной системе
x — одна неизвестная цифра (0…31)
для x ≥ 10 в запись подставляется буква A, B, … (как в Python int(..., 32))
DIGITS = "0123456789ABCDEFGHIJKLMNOPQRSTUV"[:32]
def to_num(s, x):
return int(s.replace('x', DIGITS[x]), 32)
📌 Результат: функция to_num переводит запись вида 54x45<sub>32</sub> + 96x<sub>32</sub> · 12x1<sub>32</sub> в десятичное число.
🔹 Шаг 2. Наибольшее x, при котором выражение кратно 8
DIGITS = "0123456789ABCDEFGHIJKLMNOPQRSTUV"[:32]
def to_num(s, x):
return int(s.replace('x', DIGITS[x]), 32)
for x in range(31, -1, -1):
val = to_num('54x45', x) + to_num('96x', x) * to_num('12x1', x)
if val % 8 == 0:
print(x, val)
break
📌 Результат: перебираем x от 31 к 0; находим наибольшее x, при котором значение кратно 8.
🔹 Шаг 3. Подсчёт единиц в двоичной записи
DIGITS = "0123456789ABCDEFGHIJKLMNOPQRSTUV"
def to_num(s, x):
return int(s.replace('x', DIGITS[x]), 32)
for x in range(31, -1, -1):
val = to_num('54x45', x) + to_num('96x', x) * to_num('12x1', x)
if val % 8 == 0:
print(bin(val).count('1'))
break
📌 Результат: для найденного x считаем, сколько единиц в двоичной записи значения выражения; ответ: 10.