Задачи 709-710. Булева алгебра

На сайте acmp.ru добавились 300 новых задач, и сейчас самое время их решить.

Две задачи с одним условием, будем решать их одновременно. На самом деле даже не понятно, как надо писать, чтобы первая задача была легче второй.

Задачи на разбор выражений, все они решаются практически одним кодом, но в этом случае можно воспользоваться инструментами языка Python. А именно функциями exec и eval, которые интерпретируют переданную им строку как обычный код.

Чтобы строка из входного файла была корректным кодом на Python, создадим три логические функции.

А дальше будем считывать присваивания переменных и пропускать их через exec, а в конце каждого блока вызывать eval, которая посчитает результат нашего выражения с новыми значениями переменных.

Для решения второй задачи надо лишь переписать функции AND и OR так, чтобы они принимали произвольное число параметров. Для Python это довольно стандартный случай, поэтому реализация совсем простая.

Получается очень простое и элегантное решение сложной задачи. А всё благодаря возможностям, которые даёт язык. Обычно на соревнованиях стараются не давать задач, для решения которых один язык имеет преимущество над другими, но иногда такое просачивается. Эта задача, к слову, была в то время, когда язык Python ещё не поддерживался.

Предыдущий выпуск: Задача 708. Хомяки и кролики (жадность и динамика)

Автор: Михаил Кормышов

Я очень хочу, чтобы мои советы были полезны вам, а для того, чтобы быстрее всех получать новые статьи можно подписаться на мой канал.