「複素数」とも呼ばれる分割複素数は、複素数に似ています。i^2 = -1
ただし、代わりにがありj^2 = 1; j != +/-1
ます。各番号はの形式を取りますz = x + j*y
。
この課題の複雑さを制限するための1つの試み-
では、減算を行わないため、シンボルを使用して否定を表します。
視聴の楽しみの例を次に示します。
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
チャレンジ
この課題の目標は、分割複素数を持つ式を評価することです。
これはcode-golfであり、最も少ないバイトが勝ちます。
入力
入力は、シンボル+*()-
、数字0123456789
、文字のみを含む1行j
で、オプションの改行があります。この文字列は、中置表記法と演算子の優先順位を使用して式を表します(加算前の乗算、括弧のグループ化)。
- 記号
-
は常に否定を表し、減算を表しません。 必要に応じて、-
どちらか_
または~
I / Oを簡単にするために置き換えることができます。 - 括弧は、グループ化を示すために最大3回ネストできます。
(1+(1+(1)))
- 文字の
j
前に否定が直接付加されることはなく、常に後に続き*
ます。 - 括弧の前には否定がありませんが
-(7)
、代わりに-1*(j*5+2)
- 暗黙的な操作はありません。すべての乗算は、と表現する
(7)*7
代わりに(7)7
、およびなどj*5
の代わりにj5
。 - 先行ゼロなし。
出力
出力はの形式になりますX+j*Y
。XとYは任意の整数です。整数が負の場合、負符号を前に付ける必要があります。
追加の制限
私はネイティブサポートの言語を認識していませんが、分割複素数を扱う組み込み関数は禁止されています。通常の複素数は公平なゲームです。
テストケース
上記の例と同様ですが、整理されています。1行に入力し、その下の行を出力します。
(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]
は、最上行から係数を使用して式を評価し、係数を読み取ることもできます。