ตัวเลขที่มีการแบ่งซับซ้อนซึ่งรู้จักกันว่า "ตัวเลขที่น่ารำคาญ" นั้นคล้ายกับจำนวนเชิงซ้อน แทนที่จะแต่เรามีi^2 = -1
ตัวเลขแต่ละตัวจะใช้รูปแบบของj^2 = 1; j != +/-1
z = x + j*y
ในความพยายามหนึ่งที่จะจำกัดความซับซ้อนของการท้าทายนี้ฉันจะใช้สัญลักษณ์-
เพื่อแสดงถึงการปฏิเสธเนื่องจากไม่มีการลบใด ๆ
นี่คือตัวอย่างบางส่วนเพื่อความสุขในการรับชมของคุณ:
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
ท้าทาย
เป้าหมายของความท้าทายนี้คือการประเมินการแสดงออกด้วยตัวเลขที่ซับซ้อนแยก
นี่คือรหัสกอล์ฟที่มีจำนวนน้อยที่สุดที่ชนะ
อินพุต
ข้อมูลที่ป้อนจะเป็นบรรทัดเดียวที่มีเฉพาะสัญลักษณ์+*()-
ตัวเลข0123456789
และตัวอักษรj
โดยมีบรรทัดใหม่ที่เป็นตัวเลือก สตริงนี้แสดงถึงการแสดงออกโดยใช้สัญกรณ์ infix และความสำคัญของผู้ประกอบการ (คูณก่อนนอกจากนี้ด้วยการจัดกลุ่มวงเล็บ)
- สัญลักษณ์
-
จะแสดงถึงการปฏิเสธเสมอไม่เคยลบ ดังนั้นหากคุณต้องการคุณสามารถแทนที่-
ด้วย_
หรือ~
เพื่อความสะดวกของ I / O - วงเล็บสามารถซ้อนกันได้สูงสุดสามครั้งเพื่อแสดงถึงการจัดกลุ่ม:
(1+(1+(1)))
- จดหมาย
j
จะไม่ถูกนำหน้าด้วยการปฏิเสธโดยตรงและจะถูกตามด้วย*
เสมอ - วงเล็บจะไม่ถูกนำหน้าด้วยการปฏิเสธ
-(7)
แต่แทนที่จะเป็นเช่นนั้น-1*(j*5+2)
- จะไม่มีการดำเนินการโดยนัย คูณทั้งหมดจะถูกแสดงเป็น
(7)*7
แทน(7)7
และเป็นแทนj*5
j5
- ไม่มีเลขศูนย์นำหน้า
เอาท์พุต
เอาต์พุตจะอยู่ในรูปของX+j*Y
โดยที่ X และ Y สามารถเป็นจำนวนเต็มใด ๆ หากจำนวนเต็มเป็นลบมันควรจะนำหน้าด้วยสัญญาณปฏิเสธ
ข้อ จำกัด เพิ่มเติม
แม้ว่าฉันจะไม่ได้ตระหนักถึงภาษาใด ๆ ที่มีการสนับสนุนในตัว จำนวนเชิงซ้อนปกติเป็นเกมที่ยุติธรรม
กรณีทดสอบ
คล้ายกับตัวอย่างข้างต้น แต่จัดระเบียบขึ้น ป้อนข้อมูลหนึ่งบรรทัดและส่งออกบรรทัดด้านล่าง
(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]
และอ่านค่าสัมประสิทธิ์จากแถวบนสุด