- 21, Oct 2024
- #1
Я видел этот недавний загадочный вопрос:
Добавьте круглые скобки, чтобы это было правдой
И увидел это в одном ответе использовался скрипт Python, чтобы опробовать все возможности.
Ваша задача состоит в том, чтобы, учитывая выражение (в виде строки) и целое число, создать программу, которая может определить, можете ли вы добавить круглые скобки, чтобы выражение стало равным целому числу.
Например, если выражение
*
и целое число 2(5)
, чем вы можете добавить круглые скобки, например (10 + (9 - 8)) * 7 + (6 - 5) * 4 + 3 - 2 * 1
, which equals 9, so the output should be truthy. But if the expression is 1 + 2 - 3 * 4 / 9 and -1 -> truthy, ((1 + 2) - (3 * 4)) / 9
10 - 9 * 8 - 7 * 6 - 5 * 4 - 3 * 2 - 2 * 1 and 1, falsey, see linked question
10 + 9 - 8 * 7 + 6 - 5 * 4 + 3 - 2 * 1 and 82 -> truthy, (10 + (9 - 8)) * 7 + (6 - 5) * 4 + 3 - 2 * 1
34 + 3 and 15 -> falsey
1 + 2 + 5 + 7 and 36 -> falsey
1 / 10 * 3 + 3 / 10 * 10 and 6 -> truthy, (1/10*3+3/10)*10
and the integer is -
, you can't add any amount of parens to make that equal +
, поэтому вывод должен быть ложным.
Обратите внимание, что входное целое число может быть положительным или отрицательным, но выражение будет содержать только положительные целые числа. Фактически, выражение всегда будет соответствовать /
(regex). In other words, no parens, no exponents, just *
, /
, *
и -
. Standard operator order ( +
и (\d+ [+*/-] )+ \d
, then 9999999999999
и 9999999999999
).
Еще тест-кейсы:
1 + 2 - 3 * 4 / 5
Есть вопросы?
Вы можете вывести выражение в круглых скобках, если это возможно, например (1 + 2) * 3
for the last test case. I would prefer this over just a truthy value, but it is up to you. Using 9
для умножения не допускается, только 1 + 2 * 3
.
#код-гольф #математика #арифметика #задача принятия решения