Les nombres complexes séparés , également connus sous le nom de "nombres complexes" sont similaires aux nombres complexes. Au lieu de i^2 = -1
, cependant, nous l'avons j^2 = 1; j != +/-1
. Chaque numéro prend la forme de z = x + j*y
.
Dans une tentative de limiter la complexité de ce défi, j'utiliserai le symbole -
pour représenter la négation, car il n'y aura pas de soustraction.
Voici quelques exemples pour votre plaisir visuel:
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
Défi
Le but de ce défi est d'évaluer une expression avec des nombres complexes séparés.
C'est le code-golf, le moins d'octets gagne.
Contribution
L'entrée sera une seule ligne contenant uniquement les symboles +*()-
, les chiffres 0123456789
et la lettre j
, avec un retour à la ligne facultatif. Cette chaîne représente une expression, utilisant la notation infixe et la priorité de l'opérateur (multiplication avant addition, avec regroupement entre parenthèses).
- Le symbole
-
représentera toujours la négation, jamais la soustraction. Si vous le souhaitez, vous pouvez remplacer-
par_
ou~
pour faciliter les E / S. - Les parenthèses peuvent être imbriquées jusqu'à trois fois pour indiquer un regroupement:
(1+(1+(1)))
- La lettre
j
ne sera jamais directement précédée de la négation et sera toujours suivie de*
. - Les parenthèses ne seront pas précédées d'une négation
-(7)
, mais plutôt comme-1*(j*5+2)
- Il n'y aura jamais d'opérations implicites. Toute multiplication sera exprimée comme
(7)*7
au lieu de(7)7
et commej*5
au lieu dej5
. - Pas de zéros non significatifs.
Production
La sortie sera sous la forme de X+j*Y
, où X et Y peuvent être n'importe quel entier. Si un entier est négatif, il doit être précédé du signe de négation.
Restrictions supplémentaires
Bien que je ne connaisse aucune langue avec un support natif, les modules intégrés qui traitent des nombres complexes divisés sont interdits. Les nombres complexes réguliers sont équitables.
Cas de test
Similaire aux exemples ci-dessus, mais rangé. Entrez sur une ligne et sortez la ligne en dessous.
(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]
et lire les coefficients de la ligne supérieure.