Вдохновленный этим ответом (выделение мое):
Мы будем играть в игру. Предположим, у вас есть номер x . Вы начинаете с x, а затем можете добавлять, вычитать, умножать или делить на любое целое число, кроме нуля. Вы также можете умножить на х . Вы можете делать эти вещи столько раз, сколько захотите. Если сумма станет нулевой, вы выиграете.
Например, предположим, что х равен 2/3. Умножьте на 3, затем вычтите 2. Результат равен нулю. Ты победил!
Предположим, что х равен 7 ^ (1/3). Умножьте на x , затем снова на x , затем вычтите 7. Вы выиграли!
Предположим, что x равен √2 + √3. Здесь не так просто увидеть, как победить. Но оказывается, что если вы умножите на x , вычтите 10, умножите на x дважды и добавите 1, то вы выиграете. (Это не должно быть очевидно; вы можете попробовать это с помощью калькулятора.)
Но если вы начнете с x = π, вы не сможете выиграть. Невозможно перейти от π к 0, если вы добавляете, вычитаете, умножаете или делите на целые числа или умножаете на π, независимо от того, сколько шагов вы делаете. (Это также не должно быть очевидным. Это очень сложная вещь!)
Числа типа √2 + √3, из которых вы можете выиграть, называются алгебраическими . Числа, такие как π, с которыми вы не можете выиграть, называются трансцендентными.
Почему это интересно? Каждое алгебраическое число арифметически связано с целыми числами, и выигрышные ходы в игре показывают, как это так. Путь к нулю может быть длинным и сложным, но каждый шаг прост и есть путь. Но трансцендентные числа принципиально отличаются: они не арифметически связаны с целыми числами с помощью простых шагов.
По сути, вы будете использовать шаги, использованные в приведенном выше вопросе, чтобы «выиграть» игру для данного ввода.
Учитывая вещественную алгебраическую константу x
, преобразуйте число в ноль, используя следующие разрешенные операции:
- Добавить или вычесть целое число.
- Умножьте или разделите на ненулевое целое число.
- Умножьте на исходную константу
x
.
Входные данные - это строка, которая может содержать целые числа, сложение, вычитание, умножение, деление, возведение в степень (по вашему выбору **
или ^
, экспоненты используются для представления корней) и круглые скобки. Пробелы на входе являются необязательными, но не на выходе. Вы должны вывести шаги, необходимые для получения результата, равного нулю, поэтому умножение на 7
один шаг будет выведено как *7
. Трейлинг и / или перевод строки разрешены.
Примеры
0 -> +0 (or any other valid, or empty)
5/7 + 42 -> -42 *7 -5 (or shorter: *7 -299)
2^(1/3) -> *x *x -2
5*(3**(1/4)) -> *x *x *x -1875
2^(1/2)+3^(1/2) -> *x -10 *x *x +1
Самый короткий код выигрывает.
x^4-10*x^2+1
. Смотрите WolframAlpha
0
должны быть результаты? Учитывая ошибки округления и точность с плавающей точкой, я мог легко увидеть проблемные ситуации ...