Bölünmüş karmaşık sayılar da "perplex sayılar" olarak bilinen, karmaşık sayılar benzer. i^2 = -1
Ancak bunun yerine, var j^2 = 1; j != +/-1
. Her sayı şeklinde olur z = x + j*y
.
Bu zorluğun karmaşıklığını sınırlamak için bir girişimde, sembolü -
, olumsuzlamayı temsil etmek için kullanacağım , çünkü herhangi bir çıkarma olmayacaktır.
İşte izleme keyfinize dair bazı örnekler:
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
Meydan okuma
Bu zorluğun amacı bölünmüş karmaşık sayılarla bir ifadeyi değerlendirmektir.
Bu kod golf, en az bayt kazanır.
Giriş
Girdi, isteğe bağlı bir satırsonu içeren yalnızca simgeleri +*()-
, rakamları 0123456789
ve harfi içeren tek j
bir satır olacaktır. Bu dize, infix gösterimi ve operatör önceliği (parantez gruplamasıyla toplamadan önce çarpma) kullanan bir ifadeyi temsil eder.
- Sembol
-
her zaman olumsuzlamayı temsil eder, asla çıkarma yapmaz. Arzu ederseniz-
_
~
, G / Ç kolaylığı ya da kolaylıkla değiştirebilirsiniz . - Parantez, gruplandırmayı belirtmek için en fazla üç kez iç içe yerleştirilebilir:
(1+(1+(1)))
- Mektubun
j
hiçbir zaman doğrudan olumsuzlama öneki olmayacak ve ardından gelen harf olacaktır*
. - Parantezden önce olumsuzlama olmayacak
-(7)
, aksine-1*(j*5+2)
- Asla örtük işlemler olmayacak. Tüm çarpma olarak ifade edilecektir
(7)*7
yerine(7)7
ve aynıj*5
yerinej5
. - Başında sıfır yok.
Çıktı
Çıktı şeklinde olacaktır X+j*Y
, burada X ve Y herhangi bir tamsayı olabilir. Bir tamsayı negatifse, önüne negatif işareti gelmelidir.
Ek Kısıtlamalar
Yerel desteğe sahip herhangi bir dilin farkında olmasam da, bölünmüş karmaşık sayılarla ilgilenen yerleşik yapılar yasaktır. Düzenli karmaşık sayılar adil bir oyundur.
Test Durumları
Yukarıdaki örneklere benzer, ancak toparlandı. Bir satırdan giriş yapın ve alt satırdan çıkış yapın.
(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]
üst satırdaki katsayılarla birlikte değerlendirebilir ve okuyabilir.