Ada banyak cara berbeda untuk menjelaskan perkalian matriks. Saya akan tetap dengan satu figur karena saya percaya sebagian besar orang di sini akrab dengannya (dan angka itu sangat deskriptif). Jika Anda ingin informasi lebih rinci, saya sarankan Anda mengunjungi artikel Wikipedia , atau penjelasan tentang WolframMathWorld .
Penjelasan sederhana:
Misalkan Anda memiliki dua matriks, A dan B , di mana A adalah 3-oleh-2, dan B adalah 2-oleh-3. Jika Anda melakukan perkalian matriks pada matriks ini, baik AB , atau BA Anda akan mendapatkan hasil di bawah ini:
Tantangan:
Terapkan penggandaan matriks simbolik dalam bahasa Anda. Anda harus mengambil dua matriks sebagai input, di mana setiap elemen dalam matriks diwakili oleh karakter ASCII non-spasi putih (kode poin 33-126). Anda harus mengeluarkan produk dari matriks ini.
Aturan tentang output:
Produk dari dua entri tidak boleh memiliki simbol di antaranya. Ini ab
, tidak a*b
, a·b
, times(a,b)
atau sesuatu yang serupa. Ini aa
, tidak a^2
.
Jumlah istilah harus memiliki spasi (ASCII kode titik 32) di antaranya. Ini a b
, bukan a+b
, plus(a,b)
atau sesuatu yang serupa.
Alasan dari kedua aturan tersebut adalah: Semua karakter non-spasi putih diizinkan sebagai simbol dalam matriks, sehingga menggunakannya sebagai simbol matematika akan berantakan. Jadi, apa yang biasanya Anda bisa menulis sebagai a*b+c*d
akan ab cd
.
Anda dapat memilih urutan persyaratan. ab cd
, dc ab
dan cd ba
secara matematis sama, sehingga Anda dapat memilih pesanan di sini juga. Urutan tidak perlu konsisten selama itu benar secara matematis.
Aturan tentang pemformatan matriks:
Matriks dapat dimasukkan dalam format apa pun yang Anda suka, kecuali satu string tanpa pembatas di antara baris (ini karena output akan benar-benar kacau). Kedua matriks harus dimasukkan pada format yang sama. Semua contoh di bawah ini adalah cara yang valid untuk memasukkan dan mengeluarkan matriks.
"ab;cd" <- This will look awful, but it's still accepted.
"a,b\nc,d"
[[a,b],[c,d]]
[a, b]
[c, d]
Saya sadar bahwa ini memungkinkan banyak format yang akan terlihat berantakan, tetapi tantangannya adalah tentang mengalikan matriks, bukan memformat output.
Aturan umum:
- Anda dapat menerima input yang valid. Penggandaan matriks akan selalu dimungkinkan dengan dimensi yang diberikan.
- Hanya akan ada dua matriks.
- Anda dapat mengasumsikan bahwa matriks tidak kosong
- Fungsi bawaan diterima (tapi mungkin agak rumit karena persyaratan pemformatan).
- Anda tentu saja dapat menggunakan karakter melarikan diri dalam input jika perlu (
\'
bukan'
). - Setiap input dan output metode standar OK .
Kasus uji:
Dua matriks input ditampilkan dengan garis kosong di antaranya. Output ditampilkan setelah Output:
. Ketika ada dua matriks keluaran maka itu hanya untuk menunjukkan keluaran lain yang akan diterima.
Uji kasus # 1
Inputs:
[a]
[b]
Output:
[ab]
[ba] <- Also OK
Uji kasus # 2
Inputs:
[a, b]
[1, 4]
[y, {]
[%, 4, 1]
[a, b, c]
Output:
[a% ba, a4 bb, a1 bc]
[1% 4a, 14 4b, 11 4c]
[y% {a, y4 {b, y1 {c]
Test case # 3:
Inputs:
[1, 2, 3, 4]
[5, 6, 7, 8]
[9, 1, 2, 3]
[4, 5, 6, 7]
[a]
[b]
[c]
[d]
Output:
[1a 2b 3c 4d]
[5a 6b 7c 8d]
[9a 1b 2c 3d]
[4a 5b 6c 7d]
[d4 c3 b2 a1] <-- Also OK
[d8 c7 b6 a5]
[1b 9a c2 3d]
[a4 b5 d7 6c]
Jika respons Anda terhadap aturan tentang keharusanab cd
alih - alih a*b+c*d
adalah: Anda harus menghindari format input / output yang rumit , maka saya ingin mencatat bahwa format input dan output sangat fleksibel. Fakta bahwa Anda tidak dapat menggunakan *
dan +
untuk produk dan jumlah mungkin membuatnya lebih sulit untuk menggunakan built-in yang sederhana, tapi saya tidak menganggap hal negatif itu.