Tulis fungsi atau program bernama yang menghitung produk angka empat dari dua angka empat. Gunakan sesedikit mungkin byte.
Pertanyaan
Kuota adalah perpanjangan dari bilangan real yang selanjutnya memperluas bilangan kompleks. Daripada satu unit imajiner tunggal i
, angka empat menggunakan tiga unit imajiner i,j,k
yang memuaskan hubungan.
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
(Ada juga tabel ini di halaman Wikipedia .)
Dalam kata-kata, setiap unit imajiner kuadratkan -1
, dan produk dari dua unit imajiner yang berbeda adalah yang ketiga tersisa dengan +/-
tergantung pada apakah urutan siklik (i,j,k)
dihormati (yaitu, aturan tangan kanan ). Jadi, urutan perkalian penting.
Angka empat umum adalah kombinasi linear dari bagian nyata dan tiga unit imajiner. Jadi, ini dijelaskan oleh empat bilangan real (a,b,c,d)
.
x = a + b*i + c*j + d*k
Jadi, kita dapat mengalikan dua angka empat menggunakan properti distributif, berhati-hati untuk mengalikan unit dalam urutan yang benar, dan mengelompokkan istilah seperti dalam hasil.
(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
Dilihat dengan cara ini, perkalian angka empat dapat dilihat sebagai peta dari sepasang 4-tupel menjadi 4-tupel tunggal, yang diminta untuk diterapkan.
Format
Anda harus menulis fungsi program atau bernama . Suatu program harus mengambil input dari STDIN dan mencetak hasilnya. Suatu fungsi harus menerima input fungsi dan mengembalikan (tidak mencetak) output.
Format input dan output fleksibel. Input adalah delapan bilangan real (koefisien untuk dua angka empat), dan output terdiri dari empat bilangan real. Input mungkin delapan angka, dua daftar empat angka, matriks 2x4, dll. Format input / output tidak harus sama. Pengurutan (1,i,j,k)
koefisien terserah Anda.
Koefisien bisa negatif atau tidak keseluruhan. Jangan khawatir tentang ketepatan nyata atau meluap.
Dilarang: Fungsi atau tipe khusus untuk angka empat atau setara.
Uji kasus
Ini dalam (1,i,j,k)
format koefisien.
[[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]
Implementasi Referensi
Dalam Python, sebagai fungsi:
#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