Viết hàm hoặc chương trình được đặt tên để tính sản phẩm bậc bốn của hai bậc bốn. Sử dụng càng ít byte càng tốt.
Đệ tứ
Đệ tứ là một phần mở rộng của các số thực tiếp tục mở rộng các số phức. Thay vì một đơn vị tưởng tượng duy nhất i
, tứ phương sử dụng ba đơn vị tưởng tượng i,j,k
thỏa mãn các mối quan hệ.
i*i = j*j = k*k = -1
i*j = k
j*i = -k
j*k = i
k*j = -i
k*i = j
i*k = -j
(Ngoài ra còn có các bảng này trên trang Wikipedia .)
Nói cách khác, mỗi đơn vị tưởng tượng bình phương -1
và tích của hai đơn vị tưởng tượng khác nhau là đơn vị thứ ba còn lại với +/-
tùy thuộc vào thứ tự tuần hoàn (i,j,k)
có được tôn trọng hay không (nghĩa là quy tắc bàn tay phải ). Vì vậy, thứ tự của vấn đề nhân.
Một tứ phân vị chung là sự kết hợp tuyến tính của một phần thực và ba đơn vị tưởng tượng. Vì vậy, nó được mô tả bởi bốn số thực (a,b,c,d)
.
x = a + b*i + c*j + d*k
Vì vậy, chúng ta có thể nhân hai bậc bốn bằng cách sử dụng thuộc tính phân phối, cẩn thận để nhân các đơn vị theo đúng thứ tự và nhóm như các điều khoản trong kết quả.
(a + b*i + c*j + d*k) * (e + f*i + g*j + h*k)
= (a*e - b*f - c*g - d*h) +
(a*f + b*e + c*h - d*g)*i +
(a*g - b*h + c*e + d*f)*j +
(a*h + b*g - c*f + d*e)*k
Nhìn theo cách này, phép nhân bậc bốn có thể được xem như một bản đồ từ một cặp 4-tup đến một 4-tuple duy nhất, đó là những gì bạn được yêu cầu thực hiện.
định dạng
Bạn nên viết một chương trình hoặc chức năng được đặt tên . Một chương trình nên lấy đầu vào từ STDIN và in ra kết quả. Một chức năng sẽ nhận đầu vào chức năng và trả lại (không in) một đầu ra.
Định dạng đầu vào và đầu ra là linh hoạt. Đầu vào là tám số thực (hệ số của hai bậc bốn) và đầu ra bao gồm bốn số thực. Đầu vào có thể là tám số, hai danh sách bốn số, ma trận 2x4, v.v ... Định dạng đầu vào / đầu ra không nhất thiết phải giống nhau. Thứ tự các (1,i,j,k)
hệ số là tùy thuộc vào bạn.
Các hệ số có thể âm hoặc không toàn bộ. Đừng lo lắng về độ chính xác thực sự hoặc tràn.
Cấm: Chức năng hoặc các loại đặc biệt cho bậc bốn hoặc tương đương.
Các trường hợp thử nghiệm
Đây là ở (1,i,j,k)
định dạng hệ số.
[[12, 54, -2, 23], [1, 4, 6, -2]]
[-146, -32, 270, 331]
[[1, 4, 6, -2], [12, 54, -2, 23]]
[-146, 236, -130, -333]
[[3.5, 4.6, -0.24, 0], [2.1, -3, -4.3, -12]]
[20.118, 2.04, 39.646, -62.5]
Thực hiện tham khảo
Trong Python, dưới dạng hàm:
#Input quaternions: [a,b,c,d], [e,f,g,h]
#Coeff order: [1,i,j,k]
def mult(a,b,c,d,e,f,g,h):
coeff_1 = a*e-b*f-c*g-d*h
coeff_i = a*f+b*e+c*h-d*g
coeff_j = a*g-b*h+c*e+d*f
coeff_k = a*h+b*g-c*f+d*e
result = [coeff_1, coeff_i, coeff_j, coeff_k]
return result