ЕГЭ по информатике 2022 — Задание 2 (Ай да Питон!)

Продолжаем наш видеокурс по подготовке к ЕГЭ по информатике 2022. Сегодня разоблачим второе задание!
Кто незнаком с основными логическими операциями, можете посмотреть прошлогоднюю статью по заданию 2 из ЕГЭ по информатике.
В этой статье будут раскрыты методики решения 2 задания через язык программирования Питон.
Будем перебирать для каждой логической переменной все возможные варианты в программе. А логическая переменная всего два значения может принимать: 1 или 0 (истину или ложь). Таким образом, если к примеру у нас 4 переменные, мы получим 2 4 =16 различных комбинаций.
Кто знаком с мощнейшим методом для 2 задания из ЕГЭ по информатике, о котором я рассказывал в прошлогодней статье, тот поймёт, что мы будем применять тот же самый мощнейший метод, но автоматизированный с помощью питона.
Нам нужно будет запрограммировать логическую функцию на языке Питон. Вот таблица, которая поможет это сделать.
| Логическая операция | Представление в Питоне |
| Отрицание ¬ | not() |
| Логическое умножение ∧ | and |
| Логическое сложение ∨ | or |
| Следование A ⟶ B | not(A) or B |
| Равносильность ≡ | == |
Перейдём к практике решения задач задания 2 с помощью языка программирования Python.
Миша заполнял таблицу истинности логической функции F
но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
Определите, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Функция F задана выражением ¬x \/ y, зависящим от двух переменных, а фрагмент таблицы имеет следующий вид.
В этом случае первому столбцу соответствует переменная y, а второму столбцу – переменная x. В ответе следует написать: yx.
Решать задачу будем с помощью шаблона на языке Python (Питон).
print('x y z w') for x in range(0, 2): for y in range(0, 2): for w in range(0, 2): for z in range(0, 2): if (not(w) or z) and ((not(y) or x) == (not(z) or y)): print(x, y, z, w)
В задаче у нас 4 переменные, значит, формируем 4 вложенных цикла. В каждом цикле перебираем все возможные значения для конкретной переменной. Мы перебираем значения 0 и 1.
Функция должна выдавать всегда 1 (единицу, истину). Внутри всех циклов прописываем условие, которое срабатывает как раз на истину. В этом условии прописываем нашу функцию. Если наша функция будет выдавать истину, то мы распечатаем значения переменных, при которых это произошло. Если функция будет выдавать ложь, значит, ничего распечатано не будет.
Четыре вложенных цикла проверяют все возможные варианты (2 4 = 16 вариантов), и мы получим таблицу истинности, почти такую же, как нам и дали в условии задачи.
Так же вверху печатаем названия переменных, чтобы знать, какие значения каким переменным принадлежат.
Запустим программу, и на экране распечатается табличка:
В получившийся табличке может быть больше строчек, чем в условии. Так же при поиске переменных нельзя опираться на порядок, в котором идут нули и единицы в нашей табличке. А можно опираться лишь на количество нулей и единиц в строчках или столбцах.
Можно вычеркнуть первую строчку и последнюю, потому что в таблице, которую дали в условии, в каждой строчке есть хотя бы один ноль и хотя бы одна единица.
Сразу видно, что первый столбец принадлежит переменной x, только там могут быть все единицы.
Второй столбец принадлежит переменной w, только там могут быть все нули.
У нас остались две пустые клеточки в самой таблице. Нам нужно где-то поставить единицу, а где-то ноль, потому что у нас остались столбцы с двумя единицами и одним нулём, а так же с двумя нулями и одной единицей. Если мы в третий столбец поставим единицу, а в четвёртый ноль, то первая строчка и вторая будут совпадать.
А в условии сказано, что строки не должны повторяться. Поэтому нужно ноль и единицу расставить наоборот.
Получается, что в третий столбец идёт z, а в четвёртый y
Ответ: xwzy
Посмотрим, как решать задачи второго задания из ЕГЭ по информатике, когда функция выдаёт нули в таблице истинности.
Задача (Классическая, закрепление)
Миша заполнял таблицу истинности функции (x ≡ ¬y) → ((x ∧ w) ≡ z), но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
Определите, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т.д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Функция F задана выражением ¬x \/ y, зависящим от двух переменных, а фрагмент таблицы имеет следующий вид.
В этом случае первому столбцу соответствует переменная y, а второму столбцу – переменная x. В ответе следует написать: yx.
Воспользуемся программой на языке Python.
print('x y z w') for x in range(0, 2): for y in range(0, 2): for w in range(0, 2): for z in range(0, 2): if not( not(( x == (not(y)) )) or ((x and w) == z) ): print(x, y, z, w)
От прошлой программы эта программа отличается только функцией!
В таблице видим, что функция должна выдавать ноль. Поэтому в условии мы функцию «оборачиваем» в not().
После == операцию not() мы заключили в скобки, чтобы не было синтаксической ошибки.
Получаем следующую таблицу истинности:
Разгадаем, где какая переменная находится.
Последнюю строку из нашей таблицы можно вычеркнуть, потому что, если мы вычеркнем другую строку, то не получится столбца, где все три единицы, а он должен быть.
Получается, что второй столбец достаётся переменной z.
В первом столбце должно быть две единицы. На эту роль подходит переменная y.
В нашей таблице нет строчки, где все единицы, значит, во второй строчке в пустом окошке выставляем ноль. И в этой строчке нулём обладает переменная x. Следовательно, в третьем столбце будет находится x.
А в последний столбец идёт переменная w по остаточному принципу.
Ответ: yzxw
А как Питон справится с более сложной функцией из примерного варианта ЕГЭ по информатике?
Задача (Сложная функция)
Логическая функция F задаётся выражением ((x → y ) ∧ (y → w)) ∨ (z ≡ ( x ∨ y)).
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F. Определите, какому столбцу таблицы истинности соответствует каждая из переменных x, y, z, w.

В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы (сначала — буква, соответствующая первому столбцу; затем — буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Функция F задана выражением ¬x \/ y, зависящим от двух переменных, а фрагмент таблицы имеет следующий вид.
В этом случае первому столбцу соответствует переменная y, а второму столбцу – переменная x. В ответе следует написать: yx.
Запрограммируем функцию на языке Python.
print('x y z w') for x in range(0, 2): for y in range(0, 2): for w in range(0, 2): for z in range(0, 2): if not( ((not(x) or y) and (not(y) or w)) or (z == (x or y)) ): print(x, y, z, w)
Запустим программу и расставим переменные по своим местам.
Переменная z может быть только в третьем столбце.
Во второй столбец идёт переменная w, только этот столбец может иметь одну единицу.
Посмотрим на строчку, где у w стоит единица. В этой же строчке и у x единица. Значит, x идёт в последний столбец, а y в первый столбец.
Ответ: ywzx
Тот же шаблон работает, когда у нас во втором задании три переменные.
Логическая функция F задаётся выражением (¬x ∧ z) ∨ (¬x ∧ ¬y ∧ ¬z)
На рисунке приведён фрагмент таблицы истинности функции F, содержащий все наборы аргументов, при которых функция F истинна. Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z.
Для трёх переменных шаблон на Питоне отлично работает.
print('x y z') for x in range(0, 2): for y in range(0, 2): for z in range(0, 2): if (not(x) and z) or (not(x) and not(y) and not(z)): print(x, y, z)
Здесь и так понятно, куда какая переменная идёт.

Ответ: yxz
Посмотрим, как решать задачи из второго задания ЕГЭ по информатике, когда в таблице истинности разные значения у функции F.
Задача (Разные значения функции)
Логическая функция F задаётся выражением (¬a ∨ b ∨ ¬c) ∧ (b ∨ ¬c). Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных a, b, c.
В ответе напишите буквы a, b, c в том порядке, в котором идут соответствующие им столбцы (без разделителей).
Когда такая ситуация, что функция имеет различные значения в таблице, мы можем проверить, какие значения переменных дают единицу у всей функции. А потом проверить, какие значения выдают ноль у всей функции, если это потребуется.
print('a b c') for a in range(0, 2): for b in range(0, 2): for c in range(0, 2): if (not(a) or b or not(c)) and (b or not(c)): print(a, b, c)
В таблице 6 строчек, в которых главная функция превращается в единицу. Далее эти строчки и будем рассматривать. У нас тоже получилось 6 строчек.
Переменная a имеет три единицы. Это второй столбец, потому что там три единицы.
Переменная b имеет четыре единицы, значит, она расположена в первом столбце.
Переменной c достаётся последний столбец.
Ещё одна интересная задача для подготовки к ЕГЭ по информатике 2022.
Логическая функция F задаётся выражением a ≡ b ∨ b → c.
На рисунке приведён частично заполненный фрагмент таблицы истинности функции F, содержащий неповторяющиеся строки. Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных a, b, c.
Подвох заключается в том, что если мы переведём бездумно функцию на язык Питон, то получится a==b or not (b) or c. Но у нас существуют приоритеты для логических операций, которые описаны в прошлогодней статье по подготовке к ЕГЭ по информатике.
В начале должно обрабатываться или, которое было изначально. Затем должно обработаться следование, а потом равносильность. А если мы переведём формулу бездумно, порядок будет не правильный.
Операцию b ∨ b можно представить, как просто b. Ведь, если b принимает значение 0, тогда будет 0 ∨ 0 = 0. Если значение будет 1, то 1 ∨ 1 = 1. Поэтому формулу можно переписать следующим образом:
a ≡ b → c
a == ( not (b) or c)
В предыдущих задачах нам не приходилось думать над приоритетами, потому что везде были расставлены скобки. И в основном они уже расставлены в задачах второго задания из ЕГЭ по информатике.
Дальше решаем как обычно.
print('a b c') for a in range(0, 2): for b in range(0, 2): for c in range(0, 2): if a == (not(b) or c): print(a, b, c)
Последнюю строчку можно вычеркнуть из нашей таблицы, т.к. у нас в каждой строчке есть хотя бы один ноль.

Последний столбец занимает переменная a, т.к. только в последний столбец может влезть две единицы.
В строчке, где у a ноль, так же ноль и у переменной c. Значит, во второй столбец идёт переменная c. Если мы ноль поставим в первой строчке в первом столбце, то получится первый столбец из всех нулей. А такого у нас в таблице истинности нет.
Тогда переменная b в первом столбце.
Всё, что нужно знать о ЕГЭ по информатике
Разные вузы требуют разные вступительные экзамены по IT-направлениям. Где-то нужно сдавать физику, где-то — информатику. К какому экзамену готовиться — решать вам, но стоит иметь в виду, что конкурс на специальности, где надо сдавать физику, обычно ниже, чем на специальности, где требуется ЕГЭ по информатике, т. е. вероятность поступить «через физику» больше.
Зачем тогда сдавать ЕГЭ по информатике?
- К нему быстрее и проще подготовиться, чем к физике.
- Вы сможете выбирать из большего количества специальностей.
- Вам будет легче учиться по выбранной специальности.
Что нужно знать о ЕГЭ по информатике
ЕГЭ по информатике, или, по-другому, КЕГЭ (компьютерный ЕГЭ), проходит только с использованием компьютера. Всего 27 заданий с одним кратким ответом. 11 заданий базового уровня сложности, 11 заданий повышенного уровня и 5 заданий высокого уровня сложности. Задания с 1-го по 25-е позволяют набрать по 1 первичному баллу. Задания 26, 27 позволяют набрать по 2 первичных балла каждый. Таким образом, максимум первичных баллов, которые можно получить за решение всех заданий, — 29.
Первичные баллы переводятся в тестовые, которые и являются результатом ЕГЭ. 29 первичных баллов равны 100 тестовым баллам за экзамен. Таблица перевода первичного балла в тестовый неравномерна. Чем больше ваш итоговый балл, тем меньше будет давать и первичный: например, 2 первичных балла соответствуют 14 тестовым, начиная с нуля, а 26–28 первичных дают в итоге 93–98 баллов соответственно.
Это значит, что при выполнении ЕГЭ по информатике необходимо сделать как можно больше заданий. Начинать с самых простых, так как по тестовому весу они не будут сильно уступать сложным заданиям. Иногда выгоднее решить две простые задачи, чем решать одну сложную. Главное, решить их правильно. Так как вы часто используете различное программное обеспечение, то и ответ является результатом работы программ. Необходимо постоянно проверять на промежуточных результатах правильность работы вашего алгоритма или другой программы. Цена ошибки во время выполнения тестовых заданий выше — потеря каждого первичного балла чревата тем, что вы не пройдёте по конкурсу, ведь 3–4 итоговых балла за ЕГЭ при высокой конкуренции на IT-специальности могут стать решающими. Компьютер доступен на протяжении всего экзамена, и одно и то же задание можно решить разными способами и сравнить полученные ответы.
Как готовиться к решению задач из первой части
- Уделите особое внимание задачам № 6, 8, 9, 17, 18, 23, 24, 25, 26, 27. Именно эти задачи, согласно анализу результатов прошлых лет, особенно сложны. Трудности с решением этих задач испытывают не только те, у кого общий балл за ЕГЭ по информатике получился низким, но и хорошисты и отличники.
- Выучите наизусть таблицу степеней числа 2.
- Запомните стандартные алгоритмы на языке программирования (проверка чисел на простоту, делимость, перебор потока чисел и поиск минимума, максимума, чтение из файла, работа со строками, взятие остатка).
- Тщательно изучите варианты ЕГЭ предыдущих лет. Экзамен по информатике — один из самых стабильных, это означает, что для подготовки можно смело использовать варианты ЕГЭ за последние 2–3 года. За два года поменялись только задачи 6, 13 и 22.
- Познакомьтесь с разными вариантами формулировки заданий. Помните о том, что незначительное изменение формулировки всегда приводит к ухудшению результатов экзамена.
- Внимательно читайте условие задачи. Большинство ошибок при выполнении заданий связано с неверным пониманием условия.
- Учитесь самостоятельно проверять выполненные задания и находить ошибки в ответах.
Что нужно знать о решении сложных задач
24-я задача — на работу с символами и строками.
25-я задача требует составления программы с использованием стандартных алгоритмов.
26-я задача — на работу с большим количеством чисел из файла.
27-я задача — необходимо написать сложную и эффективную по времени программу.
Основную трудность на экзамене представляет 27-я задача. Её решает только 7% сдающих— на 1 балл и 4% — на 2 балла. Её особенность в том, что к ней невозможно подготовиться заранее. Каждый год на экзамен выносится принципиально новая задача. В задаче есть 2 файла для тестирования вашей программы. При решении задачи № 27 нельзя допустить ни одной смысловой ошибки. Но можно написать неэффективную программу и получить один первичный балл, чем сразу пытаться написать алгоритм на два балла.
Как рассчитывать время на экзамене
Ориентируйтесь на данные, которые приведены в спецификации контрольных измерительных материалов для проведения ЕГЭ по информатике. В ней указано примерное время, отведённое на выполнение заданий.
Распределить время на решение заданий можно следующим образом:
• Базовый уровень: 43 минуты.
• Повышенный уровень: 68 минут.
• Высокий уровень: 124 минуты.
Из них 43 минуты отводится на решение задач 1–10 и 19 базового уровня. В среднем на каждую задачу из первой части уходит от 3 до 6 минут. Повышенный уровень требует от 3 до 14 минут на задачу.
Остаётся 124 минуты на решение заданий высокого уровня сложности, при этом для решения последней задачи № 27 понадобится не менее 40 минут, а для № 26 — 35 минут. Эти расчёты выполнены специалистами Федерального института педагогических измерений и основаны на результатах экзаменов прошлых лет, поэтому к ним следует отнестись серьёзно и использовать в качестве ориентира на экзамене.
Языки программирования — какой выбрать
- BASIC. Это устаревший язык, и не используется в школах, и на экзамене.
- Школьный алгоритмический язык программирования «Кумир». Он разработан специально для раннего обучения программированию, удобен для освоения начальных алгоритмов, но практически не содержит глубины, в нём некуда развиваться. Но им очень удобно решать задачу 6.
- Pascal. По-прежнему является одним из самых распространённых языков программирования для обучения в школах и вузах. Pascal вполне подходит в качестве языка написания КЕГЭ, но при выполнении сложных заданий на нём может потребоваться больше времени, если не знать последних фишек языка. Смотрите последние обновления языка PascalABC.Net — самые нужные конструкции, которые пригодятся на экзамене, уже есть.
- С++. Универсальный язык, один из самых быстрых языков программирования. Его сложно изучать, зато в практическом применении его возможности очень широки.
- Python. Его легко изучать на начальном уровне, единственное, что требуется, — знание английского языка. Вместе с тем при углублённом изучении Python предоставляет программисту не меньше возможностей, чем С++. Начав изучение Python ещё в школе, вы будете использовать его и в дальнейшем, вам не придётся переучиваться на другой язык, чтобы достичь новых горизонтов в программировании. Для сдачи ЕГЭ достаточно знать Python на базовом уровне. На экзамене даёт небольшое преимущество, так как формулировки заданий очень похожи на код программы Python.
В ЕГЭ 2024 года нет заданий с разными языками программирования, так что можно использовать любой язык программирования для решений. Всё равно вы будете вписывать получившийся ответ, а на каком языке он получен — дело удобства использования инструмента.
Полезно знать
- Работы по информатике не оцениваются экспертами, все задания проверяет компьютер.
- Лучше записывать ответы в специальный бланк-черновик: если станция выйдет из строя, то вам её заменят, но на другой станции ваши ответы не сохранятся, и их придётся вводить заново.
- Полезный сайт для подготовки к ЕГЭ по информатике — сайт Константина Юрьевича Полякова.
- На сайте ФИПИ выложены кодификатор элементов содержания и требования к уровню подготовки для проведения ЕГЭ по информатике, а также спецификация контрольных измерительных материалов для проведения ЕГЭ по информатике. В этих документах можно найти перечень разделов курса информатики, знание которых проверяется на ЕГЭ, а также список необходимых для сдачи экзамена знаний и умений.
- На этом же сайте можно найти методические рекомендации для учителей с анализом результатов ЕГЭ разных лет и обучающие материалы для экспертов ЕГЭ по информатике с критериями оценивания задач.
- Готовиться к ЕГЭ по информатике можно вместе с «Фоксфордом». Все курсы по информатике — на одной странице.
Python для ЕГЭ
В данном курсе рассмотрен язык Python, но только в рамках ЕГЭ по информатике. Если хотите изучить необходимый минимум для ЕГЭ, то добро пожаловать на курс!

8 773 учащихся
О курсе
В курсе рассмотрены темы необходимые для сдачи ЕГЭ по информатике. Курс подходит для начинающего уровня, если вы хотите изучить язык Python, то можете начать этот курс для базового ознакомления с языком.
ЗаPython’ил ЕГЭ на сотку или почему Python поможет на ЕГЭ
Доброго времени суток каждому жителю Хабрвилля! Давненько я не писал статей! Пора это исправить!
В сегодняшней статье поговорим о насущной для многих выпускников школ теме — ЕГЭ. Да-да-да! Я знаю, что Хабр — это сообщество разработчиков, а не начинающих айтишников, но сейчас ребятам как никогда нужна поддержка именно сообщества. Ребят опять посадили на дистант. Пока не ясно на какой период, но уже сейчас можно сказать, что ЕГЭ по информатике будет на компьютерах и его можно зарешать при помощи языка Python.
Вот я и подумал, чтобы не получилось как в песне, стоит этим заняться. Я расскажу про все задачи первой части и их решения на примере демо варианта ЕГЭ за октябрь.
Всех желающих — приглашаю ниже!
Быстрый перевод из системы в систему
В Python есть интересные функции bin() , oct() и hex() . Работают данные функции очень просто:
bin(156) #Выводит '0b10011100' oct(156) #Выводит '0o234' hex(156) #Выводит '0x9c'

Как вы видите, выводится строка, где 0b — означает, что число далее в двоичной системе счисления, 0o — в восьмеричной, а 0x — в шестнадцатеричной. Но это стандартные системы, а есть и необычные.
Давайте посмотрим и на них:
n = int(input()) #Вводим целое число b = '' #Формируем пустую строку while n > 0: #Пока число не ноль b = str(n % 2) + b #Остатот от деления нужной системы (в нашем сл записываем слева n = n // 2 #Целочисленное деление print(b) #Вывод
Данная программа будет работать при переводе из десятичной системы счисления в любую до 9, так как у нас нет букв. Давайте добавим буквы:
n = int(input()) #Вводим целое число b = '' #Формируем пустую строку while n > 0: #Пока число не ноль if (n % 21) > 9: #Если остаток от деления больше 9. if n % 21 == 10: #. и равен 10. b = 'A' + b #. запишем слева A elif n % 21 == 11:#. и равен 11. b = 'B' + b#. запишем слева B ''' И так далее, пока не дойдём до системы счисления -1 (я переводил в 21-ную систему и шёл до 20) ''' elif n % 21 == 11: b = 'B' + b elif n % 21 == 12: b = 'C' + b elif n % 21 == 13: b = 'D' + b elif n % 21 == 14: b = 'E' + b elif n % 21 == 15: b = 'F' + b elif n % 21 == 16: b = 'G' + b elif n % 21 == 17: b = 'H' + b elif n % 21 == 18: b = 'I' + b elif n % 21 == 19: b = 'J' + b elif n % 21 == 20: b = 'K' + b else: #Иначе (остаток меньше 10) b = str(n % 21) + b #Остатот от деления записываем слева n = n // 21 #Целочисленное деление print(b) #Вывод
Способ объёмен, но понятен. Теперь давайте используем тот же функцию перевода из любой системы счисления в любую:
def convert_base(num, to_base=10, from_base=10): # Перевод в десятичную систему if isinstance(num, str): # Если число - строка, то . n = int(num, from_base) # . переводим его в нужную систему счисления else: # Если же ввели число, то . n = int(num) # . просто воспринять его как число # Перевод десятичной в 'to_base' систему alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # Берём алфавит if n < to_base: # Если число меньше системы счисления в которую переводить. return alphabet[n] # . вернуть значения номера в алфавите (остаток от деления) else: # Иначе. return convert_base(n // to_base, to_base) + alphabet[n % to_base] # . рекурсивно обратиться к функии нахождения остатка
Вызвав функцию вывода print(convert_base(156, 16, 10)) мы переведём 156 из 10 в 16 систему счисления, а введя print(convert_base('23', 21, 4)) переведёт 23 из 4-ичной в 21-ичную систему (ответ: B).
Задача 2
Все задания беру из первого октябрьского варианта (он же вариант № 9325894) с сайта Решу.ЕГЭ.

Решение данной задачи совсем простое: банальный перебор.
print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1' for x in range(2): for z in range(2): for w in range(2): F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию print(x, y, z, F) #Выводим результат

Нам вывелась вся таблица истинности (1 = True, 0 = False). Но это не очень удобно. Обратите внимание, что в задании, функция равно 0, так и давайте подправим код:
print('y', 'x', 'z', 'F') #Напечатаем заголовки таблицы for y in range(2): #Берём все переменные и меняем их в циклах '0' и '1' for x in range(2): for z in range(2): for w in range(2): F = ((not x or y) == (not z or w)) or (x and w) #Записываем функцию if not F: print(x, y, z, F) #Выводим результат

Далее - простой анализ.
Задача 5

Данная задача легко решается простой последовательностью действий в интерпретационном режиме:

Задача 6

Перепечатали и получили ответ:
s = 0 k = 1 while s < 66: k += 3 s += k print(k)
Задача 12

В очередной раз, просто заменим слова на код:
a = '9' * 1000 while '999' in a or '888' in a: if '888' in a: a = a.replace('888', '9', 1) else: a = a.replace('999', '8', 1) print(a)
Задача 14

Компьютер железный, он всё посчитает:
a = 4 ** 2020 + 2 ** 2017 - 15 k = 0 while a > 0: if a % 2 == 1: k += 1 a = a // 2 print(k)
Задача 16

Опять же, просто дублируем программу в python:
def F(n): if n > 0: F(n // 4) print(n) F (n - 1) print(F(5))

Задача 17

Задача с файлом. Самое сложное - достать данные из файла. Но где наша не пропадала?!
with open("17.txt", "r") as f: #Открыли файл 17.txt для чтения text = f.read() #В переменную text запихнули строку целиком a = text.split("\n") #Разбили строку энтерами (\n - знак перехода на новую строку) k = 0 #Стандартно обнуляем количество m = -20001 #Так как у нас сумма 2-ух чисел и минимальное равно -10000, то минимум по условию равен -20000, поэтому. for i in range(len(a)): #Обходим все элементы массива if (int(a[i - 1]) % 3 == 0) or (int(a[i]) % 3 == 0): #Условное условие k += 1 #Счётчик if int(a[i - 1]) + int(a[i]) > m: #Нахождение минимума m = int(a[i - 1]) + int(a[i]) print(k, m) #Вывод
Немного пояснений. Функция with() открывает файл считывает данные при помощи функции read() и закрывает файл. В остальном - задача стандартна.
Задача 19, 20 и 21
Все три задачи - задачи на рекурсию. Задачи идентичны, а вопросы разные. Итак, первая задача:

Пишем рекурсивную функцию и цикл перебора S:
def f(x, y, p): #Рекурсивная функция if x + y >= 69 or p > 3: #Условия завершения игры return p == 3 return f(x + 1, y, p + 1) or f(x, y + 1, p + 1) or\ f(x * 2, y, p + 1) or f(x, y * 3, p + 1) #Варианты действий for s in range (1, 58 + 1): #Перебор S if f(10, s, 1): #Начали с 10 камней print(s) break
Немного пояснений. В рекурсивной функции существует 3 переменные x - число камней в первой куче, y - число камней во второй куче, p - позиция. Позиция рассчитывается по таблице: