Các số phức tách , còn được gọi là "số perplex" tương tự như số phức. Thay vì i^2 = -1
, tuy nhiên, chúng tôi có j^2 = 1; j != +/-1
. Mỗi số có dạng z = x + j*y
.
Trong một nỗ lực để hạn chế sự phức tạp của thử thách này, tôi sẽ sử dụng biểu tượng -
để thể hiện sự phủ định, vì sẽ không có bất kỳ phép trừ nào.
Dưới đây là một số ví dụ cho niềm vui xem của bạn:
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
Thử thách
Mục tiêu của thử thách này là đánh giá một biểu thức với các số phức.
Đây là mã golf, ít byte nhất sẽ thắng.
Đầu vào
Đầu vào sẽ là một dòng duy nhất chỉ chứa các ký hiệu +*()-
, chữ số 0123456789
và chữ cái j
, với một dòng mới tùy chọn. Chuỗi này đại diện cho một biểu thức, sử dụng ký hiệu infix và ưu tiên toán tử (phép nhân trước khi thêm, với nhóm dấu ngoặc đơn).
- Biểu tượng
-
sẽ luôn đại diện cho phủ định, không bao giờ trừ. Nếu bạn rất mong muốn, bạn có thể thay thế-
bằng một trong hai_
hoặc~
để dễ dàng cho I / O. - Dấu ngoặc đơn có thể được lồng tối đa ba lần để biểu thị nhóm:
(1+(1+(1)))
- Bức thư
j
sẽ không bao giờ được thêm tiền tố trực tiếp vào phủ định và sẽ luôn được theo sau bởi*
. - Dấu ngoặc đơn sẽ không được đi trước bởi phủ định
-(7)
, mà thay vào đó như-1*(j*5+2)
- Sẽ không bao giờ có hoạt động ngầm. Tất cả các phép nhân sẽ được biểu thị
(7)*7
thay vì(7)7
vàj*5
thay vìj5
. - Không có số không hàng đầu.
Đầu ra
Đầu ra sẽ ở dạng X+j*Y
, trong đó X và Y có thể là bất kỳ số nguyên nào. Nếu một số nguyên là âm, nó nên được thêm tiền tố với dấu phủ định.
Hạn chế bổ sung
Mặc dù tôi không biết bất kỳ ngôn ngữ nào có hỗ trợ riêng, nhưng các nội dung tích hợp liên quan đến các số phức tách đều bị cấm. Số phức thường xuyên là trò chơi công bằng.
Các trường hợp thử nghiệm
Tương tự như các ví dụ trên, nhưng được dọn dẹp. Nhập vào một dòng và xuất dòng bên dưới.
(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]
và đọc các hệ số từ hàng trên cùng.