Работа мечты в один клик 💼

💭Мечтаешь работать в Сбере, но не хочешь проходить десять кругов HR-собеседований? Теперь это проще, чем когда-либо!
💡AI-интервью за 15 минут – и ты уже на шаг ближе к своей новой работе.
Как получить оффер? 📌 Зарегистрируйся 📌 Пройди AI-интервью 📌 Получи обратную связь сразу же!
HR больше не тянут время – рекрутеры свяжутся с тобой в течение двух дней! 🚀
Реклама. ПАО СБЕРБАНК, ИНН 7707083893. Erid 2VtzquscAwp
Эта задача является вторым эпизодом нашего сериала головоломок. После описания задачи представлен ответ на вчерашнюю задачу о двойных фамилиях.
Задача о спрятанном решении
Школьник перемножил два числа в столбик, а потом закрасил звездочками все цифры кроме одной девятки. Получилось как на картинке выше. Какие цифры стояли на месте звёздочек?
Ответ и решение – в следующей задаче.
А сейчас? Пока что нужно попытаться самим. Идеи и решения можно обсудить в комментариях.
Решение задачи о двойных фамилиях
Математическое решение. Обозначим буквами: A, B, C, D
«простые» фамилии внутри составных. Эти фамилии уже могут являться их общей фамилией.
Остальные фамилии – размещения из четырех по двум. Число размещений равно
4! / (4−2)! = 4! / 2! = 4 ⋅ 3 = 12
.
Действительно, эти 12 вариантов можно и перебрать:
AB AC AD
BA BC BD
CA CB CD
DA DB DC
Таким образом, суммарное число фамилий равно шестнадцати.
Ответ: 16.
Программное решение 🌟🐍. Решим ещё и программно – на Python. Мы как раз недавно рассматривали применение библиотеки itertools. Попрактикуемся в применении:
from itertools import chain, permutations
def find_all_surnames(surnames):
# разбиваем составные фамилии по дефису
surnames = [surname.split('-') for surname in surnames]
# преобразуем в плоский список, получаем список "обычных" фамилий
surnames = list(chain.from_iterable(surnames))
# остальные варианты соответствуют перестановкам обычных фамилий
perm_surnames = list(permutations(surnames, 2))
# объединяем составные фамилии через дефис
perm_surnames = ['{}-{}'.format(i, j) for (i, j) in perm_surnames]
# соединяем два списка
surnames.extend(perm_surnames)
return surnames
# проверим работу функции на практике
surnames = find_all_surnames(['Склодовская-Кюри', 'Миклухо-Маклай'])
print('Общее число фамилий равно {}. Вот их список без учёта пола:'.format(len(surnames)))
for surname in surnames:
print('- '+surname)
Код выше выведет следующее:
Общее число фамилий равно 16. Вот их список без учёта пола:
- Склодовская
- Кюри
- Миклухо
- Маклай
- Склодовская-Кюри
- Склодовская-Миклухо
- Склодовская-Маклай
- Кюри-Склодовская
- Кюри-Миклухо
- Кюри-Маклай
- Миклухо-Склодовская
- Миклухо-Кюри
- Миклухо-Маклай
- Маклай-Склодовская
- Маклай-Кюри
- Маклай-Миклухо
Если вам понравилось решать задачу. Это решение использует две эффективные функции встроенной библиотеки itertools
. Чтобы попрактиковаться в алгоритмах, решите ту же задачу, не задействовав библиотек. Сравните время выполнения кода.
Комментарии