Добавить в корзинуПозвонить
Найти в Дзене

"Ненавижу вспоминать латинский алфавит

!" Коллеги, хочу поделиться любимым лайфхаком моих учеников для 14 задания. Конкретно, для типа с неизвестной цифрой X. Условие: Операнды арифметического выражения записаны в системе счисления с основанием 30: 7xA9F_30 + 1B3x_30. В записи чисел переменной x обозначена неизвестная цифра из алфавита 30−⁠ричной системы счисления. Определите наименьшее значение x, при котором значение данного арифметического выражения кратно 29. Для найденного значения x вычислите частное от деления значения арифметического выражения на 29 и укажите его в ответе в десятичной системе счисления. Основание системы счисления в ответе указывать не нужно. Обычное решение: 1️⃣ Перебираем x среди цифр 30-ричной системы 2️⃣ Переписываем выражение, переводим каждое число в 10-ую систему 3️⃣ Проверяем, что выражение делится на 29 4️⃣ Выводим результат деления на 29 Код: for x in '0123456789abcdefghijklmnopqrst': a = int(f'7{x}A9F', 30) + int(f'1B3{x}', 30) if a % 29 == 0: print(a // 29) Ответ: 198044 Главная пр

"Ненавижу вспоминать латинский алфавит!"

Коллеги, хочу поделиться любимым лайфхаком моих учеников для 14 задания. Конкретно, для типа с неизвестной цифрой X.

Условие:

Операнды арифметического выражения записаны в системе счисления с основанием 30:

7xA9F_30 + 1B3x_30.

В записи чисел переменной x обозначена неизвестная цифра из алфавита 30−⁠ричной системы счисления. Определите наименьшее значение x, при котором значение данного арифметического выражения кратно 29. Для найденного значения x вычислите частное от деления значения арифметического выражения на 29 и укажите его в ответе в десятичной системе счисления. Основание системы счисления в ответе указывать не нужно.

Обычное решение:

1️⃣ Перебираем x среди цифр 30-ричной системы

2️⃣ Переписываем выражение, переводим каждое число в 10-ую систему

3️⃣ Проверяем, что выражение делится на 29

4️⃣ Выводим результат деления на 29

Код:

for x in '0123456789abcdefghijklmnopqrst':

a = int(f'7{x}A9F', 30) + int(f'1B3{x}', 30)

if a % 29 == 0:

print(a // 29)

Ответ: 198044

Главная проблема возникает именно с первой строкой. Это ж надо для 30-ричной системы вспомнить первые 20 букв латинского алфавита!

Кто-то сидит и списывает из Excel/LibreOffice - вариант, ничего против не имею, но есть решение быстрее.

В библиотеке string есть строка printable следующего вида:

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~........

И эта строка прям идеально для нас начинается с цифр, за которыми идут по порядку буквы латинского алфавита. Соответственно, из нее можно просто срезом брать все цифры любой системы счисления до 36.

Например: цифры 20-ричной - printable[:20] - 0123456789abcdefghij

То есть, вместо переписывания алфавита достаточно одной строки:

printable[:основание]

А решение той задачи превратится в:

from string import printable

for x in printable[:30]:

a = int(f'7{x}A9F', 30) + int(f'1B3{x}', 30)

if a % 29 == 0:

print(a // 29)

Отдельно, кстати, ученикам обычно делаю ремарочку, что при использовании функции int без разницы будут буквы большими или маленькими, сработает как ожидаем в любом случае.

Ставьте 🔥, кому зашло! Сейчас активно работаем над 26 задачами, скоро будет кое-что новое на bank-kege.ru)

#информатика