Los números complejos divididos , también conocidos como "números perplejos" son similares a los números complejos. En lugar de i^2 = -1
, sin embargo, tenemos j^2 = 1; j != +/-1
. Cada número toma la forma de z = x + j*y
.
En un intento por limitar la complejidad de este desafío, usaré el símbolo -
para representar la negación, ya que no habrá ninguna resta.
Aquí hay algunos ejemplos para su placer visual:
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
Desafío
El objetivo de este desafío es evaluar una expresión con números complejos divididos.
Este es el código de golf, gana la menor cantidad de bytes.
Entrada
La entrada será una sola línea que contiene solo los símbolos +*()-
, los dígitos 0123456789
y la letra j
, con una nueva línea opcional. Esta cadena representa una expresión, usando notación infija y precedencia de operador (multiplicación antes de la suma, con agrupación de paréntesis).
- El símbolo
-
siempre representará negación, nunca resta. Si lo desea, puede reemplazar-
, ya sea con_
o~
para la facilidad de E / S. - Los paréntesis se pueden anidar hasta tres veces para denotar la agrupación:
(1+(1+(1)))
- La letra
j
nunca irá directamente precedida de negación y siempre irá seguida de ella*
. - Los paréntesis no irán precedidos de negación
-(7)
, sino que-1*(j*5+2)
- Nunca habrá operaciones implícitas. Toda multiplicación se expresará como en
(7)*7
lugar de(7)7
y como enj*5
lugar dej5
. - Sin ceros a la izquierda.
Salida
La salida tendrá la forma de X+j*Y
, donde X e Y pueden ser cualquier número entero. Si un número entero es negativo, debe tener como prefijo el signo de negación.
Restricciones Adicionales
Aunque no conozco ningún idioma con soporte nativo, están prohibidos los complementos que tratan con números complejos divididos. Los números complejos regulares son un juego justo.
Casos de prueba
Similar a los ejemplos anteriores, pero ordenado. Entrada en una línea y salida de la línea debajo.
(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]
y leer coeficientes de la fila superior.