พื้นหลัง
Quaternionเป็นระบบตัวเลขที่ขยายจำนวนเชิงซ้อน quaternion มีแบบฟอร์มต่อไปนี้
ที่, ข, ค, วันที่ตัวเลขจริงและฉัน, J , Kสามหน่วย quaternion พื้นฐาน หน่วยมีคุณสมบัติดังต่อไปนี้:
โปรดทราบว่าการคูณ quaternion ไม่ได้สลับกัน
งาน
ให้quaternion ที่ไม่ใช่ของจริงคำนวณอย่างน้อยหนึ่งในรากที่สองของมัน
อย่างไร?
ตามคำตอบ Math.SE นี้เราสามารถแสดงควอเทอเนียนที่ไม่ใช่ของจริงในรูปแบบต่อไปนี้
ที่, Bตัวเลขจริงและ→ ยูเป็นเวกเตอร์หน่วยจินตภาพในรูปแบบx ฉัน+ Y J + Z kกับx 2 + y ที่2 + Z 2 = 1 → uใด ๆ ดังกล่าวมีคุณสมบัติ→ u 2 = - 1ดังนั้นจึงสามารถดูได้เป็นหน่วยจินตภาพ
จากนั้นสแควร์ของจะเป็นแบบนี้:
ตรงกันข้ามได้รับ quaternion เราสามารถหาสแควร์รูทของโดยการแก้สมการต่อไปนี้
ซึ่งเหมือนกับกระบวนการค้นหารากที่สองของจำนวนเชิงซ้อน
โปรดทราบว่าจำนวนจริงเชิงลบมี quaternion รากหลายอย่างมากมาย แต่quaternion ไม่ใช่จริงมีเพียงสองราก
อินพุตและเอาต์พุต
อินพุตเป็นควอเทอเนียนที่ไม่ใช่ของจริง คุณสามารถนำตัวเลขจริง (เลขทศนิยม) สี่ตัวในลำดับและโครงสร้างใด ๆ ที่คุณเลือก ไม่ใช่ของจริงหมายความว่าอย่างน้อยหนึ่งในไม่ใช่ศูนย์
เอาท์พุทเป็นหนึ่งหรือสอง quaternions ซึ่งเมื่อยกกำลังสองเท่ากับการป้อนข้อมูล
กรณีทดสอบ
Input (a, b, c, d) => Output (a, b, c, d) rounded to 6 digits
0.0, 1.0, 0.0, 0.0 => 0.707107, 0.707107, 0.000000, 0.000000
1.0, 1.0, 0.0, 0.0 => 1.098684, 0.455090, 0.000000, 0.000000
1.0, -1.0, 1.0, 0.0 => 1.168771, -0.427800, 0.427800, 0.000000
2.0, 0.0, -2.0, -1.0 => 1.581139, 0.000000, -0.632456, -0.316228
1.0, 1.0, 1.0, 1.0 => 1.224745, 0.408248, 0.408248, 0.408248
0.1, 0.2, 0.3, 0.4 => 0.569088, 0.175720, 0.263580, 0.351439
99.0, 0.0, 0.0, 0.1 => 9.949876, 0.000000, 0.000000, 0.005025
สร้างโดยใช้สคริปต์ Pythonนี้ มีการระบุคำตอบที่ถูกต้องเพียงหนึ่งในสองคำตอบสำหรับแต่ละกรณีทดสอบ อีกประการหนึ่งคือทั้งสี่ค่าเมื่อตะกี้
เกณฑ์การให้คะแนนและการชนะ
ใช้กฎมาตรฐานของกอล์ฟ โปรแกรมหรือฟังก์ชั่นที่สั้นที่สุดในหน่วยไบต์ในแต่ละภาษาชนะ
a,[b,[c,[d]]]
จะดีหากคุณสามารถบันทึกอย่างใดไบต์กับมัน :)
a, (b, c, d)
?