I numeri divisi complessi , noti anche come "numeri perplessi" sono simili ai numeri complessi. Invece di i^2 = -1
, invece, abbiamo j^2 = 1; j != +/-1
. Ogni numero assume la forma di z = x + j*y
.
Nel tentativo di limitare la complessità di questa sfida, userò il simbolo -
per rappresentare la negazione, poiché non vi sarà alcuna sottrazione.
Ecco alcuni esempi per il tuo piacere di visione:
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
Sfida
L'obiettivo di questa sfida è valutare un'espressione con numeri divisi complessi.
Questo è code-golf, vince il minor numero di byte.
Ingresso
L'input sarà una singola riga contenente solo i simboli +*()-
, le cifre 0123456789
e la lettera j
, con una nuova riga opzionale. Questa stringa rappresenta un'espressione, usando la notazione infissa e la precedenza dell'operatore (moltiplicazione prima dell'aggiunta, con raggruppamento di parentesi).
- Il simbolo
-
rappresenterà sempre negazione, mai sottrazione. Se lo desideri, puoi sostituirlo-
con_
o~
per facilità di I / O. - Le parentesi possono essere nidificate fino a tre volte per indicare il raggruppamento:
(1+(1+(1)))
- La lettera
j
non avrà mai il prefisso diretto con la negazione e sarà sempre seguita da*
. - Le parentesi non saranno precedute dalla negazione
-(7)
, ma invece saranno gradite-1*(j*5+2)
- Non ci saranno mai operazioni implicite. Tutta la moltiplicazione verrà espressa come
(7)*7
anziché(7)7
e comej*5
invece dij5
. - Nessuno zero iniziale.
Produzione
L'output sarà nella forma di X+j*Y
, dove X e Y possono essere qualsiasi numero intero. Se un numero intero è negativo, deve essere preceduto dal segno di negazione.
Restrizioni aggiuntive
Anche se non sono a conoscenza di alcuna lingua con supporto nativo, sono vietati incorporati che si occupano di numeri divisi complessi. I numeri complessi regolari sono un gioco equo.
Casi test
Simile agli esempi precedenti, ma riordinato. Immettere su una riga e generare la riga sottostante.
(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]
e leggere i coefficienti dalla riga superiore.