" 복합 수 "라고도 하는 분할 복소수 는 복소수와 유사합니다. i^2 = -1
그러나 대신에 j^2 = 1; j != +/-1
. 각 숫자는 형식입니다 z = x + j*y
.
이 챌린지의 복잡성을 제한하려는 한 번의 시도에서 -
뺄셈이 없기 때문에 심볼 을 사용하여 부정을 나타냅니다.
다음은 시청의 즐거움을위한 몇 가지 예입니다.
6 * 9 = 54 // real numbers still act normally
5 + -7 = -2
j*1 + j*1 = j*2 // two `j`s added together make a j*2
7 * j*1 = j*7 // multiplication is commutative & associative
j*1 + 2 = 2+j*1 // like oil and water, "combine" to form a split-complex number
j*1 + j*-3 = j*-2 // seems okay so far
j*j*1 = j*-1*j*-1 = 1 // kinda sketchy, but such is its inherent nature
j*j*-1 = j*-1*j*1 = -1
(2+j*3)+(4+j*7) = 6+j*10 // combine like terms
7 * (2+j*3) = 14+j*21 // distributive property
j * (2+j*3) = (j*2) + (j*j*3) = 3+j*2 // since j^2 = 1, multiplying my j "swaps" the coefficients
(2+j*3)*(4+j*7) = (2*4)+(2*j*7)+(j*3*4)+(j*3*j*7) = 8+j*14+j*12+21 = 29+j*26 // a complete multiplication
도전
이 과제의 목표는 복소수로 표현을 평가하는 것입니다.
이것은 가장 적은 바이트가이기는 코드 골프 입니다.
입력
입력은 선택적인 개행과 함께 기호 +*()-
, 숫자 0123456789
및 문자 만 포함하는 단일 행 j
입니다. 이 문자열은 접두사 표기법과 연산자 우선 순위 (괄호 그룹화로 덧셈 전에 곱하기)를 사용하여 식을 나타냅니다.
- 이 기호
-
는 항상 부정을 나타내며 절대 빼지 않습니다. 원하는 경우 다음-
중 하나로 대체 할 수 있습니다._
또는~
I / O의 용이성을 위해. - 괄호는 그룹화를 나타 내기 위해 최대 세 번 중첩 될 수 있습니다.
(1+(1+(1)))
- 이 문자
j
는 절대로 접두사가 붙지 않으며 항상 뒤에옵니다.*
. - 괄호 앞에는 부정이 붙지 않습니다
-(7)
이 없지만 대신-1*(j*5+2)
- 암시 적 작업은 절대 없습니다. 모든 승산은 다음과 같이 표현 될 것
(7)*7
대신(7)7
, 그리고j*5
대신j5
. - 선행 0이 없습니다.
산출
출력은의 형식이며 X+j*Y
여기서 X와 Y는 정수일 수 있습니다. 정수가 음수이면 접두사 앞에 음수 부호를 붙여야합니다.
추가 제한
기본 지원 언어는 알지 못하지만 복잡한 숫자를 처리하는 기본 제공 언어는 금지되어 있습니다. 규칙적인 복소수는 공정한 게임입니다.
테스트 사례
위의 예와 비슷하지만 정리되었습니다. 한 줄에 입력하고 그 아래 줄을 출력하십시오.
(2+j*3)+(4+j*7)
6+j*10
(2+j*3)*(4+j*7)
29+j*26
(-5+j*1+j*2+2)*(4+j*7)
9+j*-9
(1+j*-1)*(1+j*1)
0+j*0 // this is why division does not exist.
j*((j*-1)+2)
-1+j*2
(2+(5+-1*(j*1))+2)
9+j*-1
j=[0 1; 1 0]
는 맨 위 행의 계수를 사용하여 식을 평가 하고 읽을 수 있습니다 .