Die aufgeteilten komplexen Zahlen , auch als "Perplexzahlen" bekannt, sind den komplexen Zahlen ähnlich. Stattdessen i^2 = -1
haben wir jedoch j^2 = 1; j != +/-1
. Jede Zahl hat die Form von z = x + j*y
.
In einem Versuch, die Komplexität dieser Herausforderung zu begrenzen, werde ich das Symbol verwenden, -
um die Negation darzustellen, da es keine Subtraktion geben wird.
Hier einige Beispiele für Ihr Sehvergnügen:
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
Herausforderung
Das Ziel dieser Herausforderung besteht darin, einen Ausdruck mit aufgeteilten komplexen Zahlen zu bewerten.
Das ist Code-Golf, die wenigsten Bytes gewinnen.
Eingang
Die Eingabe erfolgt in einer einzelnen Zeile, die nur die Symbole +*()-
, die Ziffern 0123456789
und den Buchstaben enthält j
, und optional in einer neuen Zeile. Diese Zeichenfolge stellt einen Ausdruck unter Verwendung der Infixnotation und der Operatorpriorität dar (Multiplikation vor Addition mit Klammergruppierung).
- Das Symbol
-
steht immer für Negation, niemals für Subtraktion. Wenn Sie dies wünschen, können Sie-
entweder_
~
I / O durch I / O oder I / O durch I / O ersetzen . - Klammern können bis zu dreimal geschachtelt werden, um die Gruppierung zu kennzeichnen:
(1+(1+(1)))
- Dem Brief
j
wird niemals direkt die Verneinung vorangestellt, sondern immer gefolgt von*
. - Klammern wird keine Negation vorangestellt
-(7)
, sondern gefällt-1*(j*5+2)
- Es wird niemals implizite Operationen geben. Alle Multiplikationen werden als
(7)*7
statt(7)7
und alsj*5
statt ausgedrücktj5
. - Keine führenden Nullen.
Ausgabe
Die Ausgabe erfolgt in der Form X+j*Y
, wobei X und Y eine beliebige Ganzzahl sein können. Wenn eine Ganzzahl negativ ist, muss ihr das Negationszeichen vorangestellt werden.
Zusätzliche Einschränkungen
Obwohl ich keine Sprache mit nativer Unterstützung kenne, sind integrierte Funktionen, die sich mit aufgeteilten komplexen Zahlen befassen, verboten. Regelmäßige komplexe Zahlen sind Freiwild.
Testfälle
Ähnlich den obigen Beispielen, aber aufgeräumt. Geben Sie in eine Zeile ein und geben Sie die Zeile darunter aus.
(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]
Koeffizienten in der obersten Zeile auswerten und davon ablesen.