Exam26


Project maintained by K3rnys Hosted on GitHub Pages — Theme by mattgraham

← Назад

8. Перебор слов и системы счисления

1 часть, 2 часть, 3 часть

Задание проверяет твоё понимание комбинаторики, как в ЕГЭ по математике, но по сути всё сводится к библиотеке itertools, а точнее даже к 3ем её функциям, которые избавят нас от необходимости считать руками:

Импортировать их можно так:

from itertools import product
from itertools import permutations
from itertools import combinations

Или просто from itertools import *, если хочется всё сразу..

Product

Обычно product используется в задачах чаще всего, можешь ориентироваться на подсказку условия “буквы могут повторяться

Например:

from itertools import product

for p in product('ABC', repeat=2):  
print(''.join(p))

Выдаст нам все сочетания двух букв из строки 'ABC':

AA  
AB  
AC  
BA  
BB  
BC  
CA  
CB  
CC

P.S product - это итератор, такие штуки порождают итерируемые объекты вроде range(a, b), но забивать этим голову не надо, о них мы узнаем лучше потом

Здесь p тоже является итерируемым объектом и выглядит как кортеж из символов ('A', 'A'), в следующем шаге ('A', 'B') и т.д., для чего мы используем строковый метод .join(), который к строке присоединяет всё из другой строки, или даже коллекции, которая состоит из строк (для словарей по умолчанию присоединяет ключи, но можно в цикле доставать и значения ''.join(str(v) for v in d.values()))

Permutations

Отличие от первого только в том, что буквы повторяться не будут:

from itertools import permutations

for p in permutations("ABC", 2):  
print(''.join(p))

AB  
AC  
BA  
BC  
CA  
CB

P.S кстати permutations и combinations - тоже итераторы)

Сombinations

Если до этого мы учитывали комбинации AB и BA за две, то здесь это будет считаться за одну, ведь порядок совсем не важен

from itertools import combinations  
  
print(list(combinations("ABC", 2)))

[('A', 'B'), ('A', 'C'), ('B', 'C')]

Подсчет количества разных последовательностей

Решу ЕГЭ, 25 шт.

Сразу хочу обратить внимание на подобные задания

Тип 8 № 58235

Первой моей мыслью было, что n-значные числа переводят из десятичной записи в другую, но это не так, в условии подразумевают, что это n-значное число в уже имеющейся системе счисления

Решение выглядит довольно просто

from itertools import product
alphabet = '0123'
count = 0
for i in product(alphabet, repeat=3):
 if (i[0] != '0') and (int(i[0]) + int(i[2]) > int(i[1])):
  count += 1
print(count)

Обязательно смотри, что ты не начинаешь с 0, и проводишь мат. операции с int, а не str, как я)

Вот, попробуй

Тип 8 № 58237

Ответ 40

Подсчет количества слов с ограничениями

Решу ЕГЭ, 46 шт.


Слова по порядку

Решу ЕГЭ, 58 шт.