Ctrl K

Проверка контрольной по арифметике

Сложная
Учительница дала классу пример expression — строку из однозначных чисел, между которыми стоят знаки + и *, например 4+2*3. Считать его нужно по обычным правилам: сначала все умножения слева направо, потом все сложения слева направо. Ответы учеников собраны в массив answers в произвольном порядке. Каждый ответ оценивается так: - **5 баллов**, если он равен правильному значению выражения; - иначе **2 балла**, если такое число можно получить, выполняя действия в каком-то другом порядке, то есть расставив в выражении скобки как-нибудь по-своему, но не ошибаясь в арифметике; - иначе **0 баллов**. Верните сумму баллов всех учеников.
Пример 1
expression="4+2*3", answers=[10, 18, 10, 7, 0] → 12

Правильно: 4 + 2·3 = 10, два ученика получают по 5 баллов. Ответ 18 получится, если сначала сложить: (4 + 2)·3 — это 2 балла. 7 и 0 никакой расстановкой скобок не получить. Итого 5 + 2 + 5 = 12.

Пример 2
expression="2*3+1*4", answers=[10, 14, 32, 9] → 9

Правильный ответ 10. При другом порядке действий можно получить 14 = 2·(3 + 1·4), 28 = (2·3 + 1)·4 и 32 = 2·(3 + 1)·4, поэтому 14 и 32 приносят по 2 балла, а 9 — ничего. Итого 9.

Пример 3
expression="3+0*1", answers=[3, 3, 0] → 10

(3 + 0)·1 тоже равно 3, но ответ совпадает с правильным, так что это по-прежнему 5 баллов, а не 2. Ответ 0 получить нельзя. Итого 10.

Ограничения
  • 3 ≤ len(expression) ≤ 31
  • expression — корректное выражение: цифры от 0 до 9, чередующиеся со знаками + и *, в начале и в конце — цифра
  • Правильное значение выражения от 0 до 1000
  • 1 ≤ len(answers) ≤ 10⁴
  • 0 ≤ answers[i] ≤ 1000
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВсе способы расставить пробелы СложнаяРасчистить ряд шариков СложнаяЧисла с рабочих клавиш СложнаяДругие порядки для того же дерева поиска СложнаяМышь, кот и сыр Сложная
загружаем Python…
Вход
expression="4+2*3", answers=[10, 18, 10, 7, 0]
Ожидается
12

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 108 тестов на сервере, включая скрытые.