У спліт-комплексні числа , також відомий як «спантеличити чисел» подібні комплексних чисел. Замість цього 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
з необов’язковим новим рядком. Цей рядок представляє вираз, використовуючи позначення інфіксу та пріоритет оператора (множення до додавання, з угрупованням у дужках).
- Символ
-
завжди буде представляти заперечення, ніколи не віднімання. Якщо ви так бажаєте, ви можете замінити-
або_
або~
для зручності вводу / виводу. - Парентез можна вкласти до трьох разів, щоб позначити групування:
(1+(1+(1)))
- Лист
j
ніколи не буде прямим префіксом із запереченням, і завжди його буде дотримуватися*
. - Дужкам не передуватиме заперечення
-(7)
, а навпаки-1*(j*5+2)
- Ніколи не буде неявних операцій. Все множення буде виражено як
(7)*7
замість(7)7
, так і якj*5
замістьj5
. - Немає провідних нулів.
Вихідні дані
Вихід буде у формі 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]
коефіцієнтами зчитування з верхнього рядка.