The nomor split-kompleks , juga dikenal sebagai "nomor perplex" yang mirip dengan nomor kompleks. Alih-alih i^2 = -1
, bagaimanapun, kita punya j^2 = 1; j != +/-1
. Setiap angka berbentuk z = x + j*y
.
Dalam satu upaya untuk membatasi kompleksitas tantangan ini, saya akan menggunakan simbol -
untuk mewakili negasi, karena tidak akan ada pengurangan.
Berikut adalah beberapa contoh untuk kesenangan menonton Anda:
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
Tantangan
Tujuan dari tantangan ini adalah untuk mengevaluasi ekspresi dengan bilangan kompleks.
Ini adalah kode-golf, byte paling sedikit menang.
Memasukkan
Input akan menjadi satu baris yang hanya berisi simbol +*()-
, digit 0123456789
, dan huruf j
, dengan baris baru opsional. String ini mewakili ekspresi, menggunakan notasi infiks dan prioritas operator (perkalian sebelum penambahan, dengan pengelompokan tanda kurung).
- Simbol
-
akan selalu mewakili negasi, tidak pernah mengurangi. Jika diinginkan, Anda dapat menggantinya-
dengan_
atau~
untuk kemudahan I / O. - Parenthesis dapat disarangkan hingga tiga kali untuk menunjukkan pengelompokan:
(1+(1+(1)))
- Surat
j
itu tidak akan pernah secara langsung diawali dengan negasi, dan akan selalu diikuti oleh*
. - Kurung tidak akan didahului dengan negasi
-(7)
, melainkan sebaliknya-1*(j*5+2)
- Tidak akan pernah ada operasi implisit. Semua perkalian akan dinyatakan sebagai
(7)*7
bukan(7)7
, danj*5
bukanj5
. - Tidak ada angka nol di depan.
Keluaran
Output akan dalam bentuk X+j*Y
, di mana X dan Y dapat berupa bilangan bulat apa pun. Jika bilangan bulat negatif, harus diawali dengan tanda negasi.
Batasan Tambahan
Meskipun saya tidak mengetahui bahasa apa pun dengan dukungan asli, built-in yang menangani bilangan kompleks harus dilarang. Bilangan kompleks reguler adalah permainan yang adil.
Uji Kasus
Mirip dengan contoh di atas, tetapi dirapikan. Input pada satu baris dan outputkan baris di bawahnya.
(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]
dan membacakan koefisien dari baris atas.