두 정수 사이의 곱셈은 일련의 덧셈으로 줄일 수 있습니다.
3 * 5 = 3 + 3 + 3 + 3 + 3 = 5 + 5 + 5
지수 ( a 를 거듭 제곱 b )는 일련의 곱셈으로 줄일 수도 있습니다.
5 ^ 3 = 5 * 5 * 5
따라서, 곱셈 식을 만든 다음 일련의 덧셈으로 지수를 일련의 덧셈으로 줄일 수 있습니다. 예를 들어 5 ^ 3
(5 큐브)는 다음과 같이 다시 쓸 수 있습니다.
5 ^ 3 = 5 * 5 * 5
= (5 + 5 + 5 + 5 + 5) * 5
= (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5)
= 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5
당신의 임무는 지수, 곱셈 및 덧셈으로 구성된 식을 더하면 주어진 가장 짧은 덧셈으로 줄입니다. "가장 짧은"표현식은 +
기호 가 가장 적은 표현식으로 정의되며 원래 표현식에서 두 숫자 중 하나만 사용합니다. 예를 들어 가장 짧은 표현은 10 * 2
입니다 10 + 10
.
입력에 포함 된 숫자는 모두 양의 정수이며 식은 +
(더하기), *
(곱하기) 및 ^
(지수)와 함께 정수와 괄호 ( ()
) 와 함께 우선 순위를 나타냅니다.
출력은 양의 정수와 +
기호로만 구성되어야 합니다. 축소의 개별 단계를 출력하지 말고 최종 출력 만 출력하십시오. 출력은 입력에 나타나지 않는 숫자로 구성 될 수 없습니다. 그러나 대신 3 개의 고유 한 기호를 사용할 수 +*^
있지만 어떤 기호인지 알려주세요.
입력과 출력을 분리하는 공백은 프로그램에서 사용되거나 사용되지 않을 수 있습니다. 즉, 또는 3 * 5
로 출력 될 수 있습니다 .5 + 5 + 5
5+5+5
대부분의 경우 추가는 실제로 수행되지 않습니다. 추가가 수행되는 유일한 경우는 다음과 같은 것이있을 때 5 ^ (1 + 2)
입니다.이 경우 계속하려면 추가가 필요합니다 -> 5 ^ 3 -> 5 * 5 * 5 -> ...
. 테스트 사례 # 4를 참조하십시오.
코드는 모호한 표현에 도달하는 입력을 처리 할 필요가 없습니다. 예를 들면 다음과 같습니다 (2 + 2) * (4 + 1)
. 지금까지 설명한 규칙으로 인해 목표는 답을 계산하는 것이 아니라 목표를 더하기로 단순화하는 것입니다. 따라서 표현식이 해석되거나 정류되는 순서에 따라 결과가 다를 수 있습니다 (간단하게 추가하고 떠나야 할 추가 사항). 또 다른 잘못된 예 : ((3 + 2) ^ 2) ^ 3 -> ((3 + 2) * (3 + 2)) ^ 3 -> ???
.
이것은 코드 골프 이므로 가장 짧은 코드가 승리합니다.
테스트 사례
Input => output
5 ^ 3 + 4 * 1 ^ 5 => 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 4
2 ^ 1 * 2 + 3 + 9 => 2 + 2 + 3 + 9
2 ^ 1 * (2 + 3) + 9 => 2 + 3 + 2 + 3 + 9
2 ^ (1 * (2 + 3)) + 9 => 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 9
10 + 3 * 2 + 33 ^ 2 => 10 + 3 + 3 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33
100 * 3 => 100 + 100 + 100
2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1 => 2 + 2 + 2 + 2 + 8
(1 + 2 + 5 * 8 + 2 ^ 4) * 2 => 1 + 2 + 8 + 8 + 8 + 8 + 8 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1 + 2 + 8 + 8 + 8 + 8 + 8 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2
using only one of the two numbers in the original expression.
말하지만 원래 표현은 두 개 이상의 숫자를 가질 수 있습니다. 에 8 + 8
대한 올바른 출력이 아닌 이유 를 얻지 못했습니다 2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1
. 이 질문은 여전히 분명하지 않습니다.
**
대신에 사용할 수^
있습니까?