Esistono molti modi diversi per spiegare la moltiplicazione delle matrici. Continuerò con una singola figura poiché credo che la maggior parte delle persone qui ne abbia familiarità (e la figura è molto descrittiva). Se desideri informazioni più dettagliate, ti suggerisco di visitare l' articolo di Wikipedia o la spiegazione su WolframMathWorld .
Semplice spiegazione:
Supponiamo di avere due matrici, A e B , dove A è 3 per 2 e B è 2 per 3. Se si esegue la moltiplicazione delle matrici su queste su matrici, AB o BA, si otterranno i risultati seguenti:
Sfida:
Implementa la moltiplicazione della matrice simbolica nella tua lingua. Devi prendere due matrici come input, in cui ogni elemento nelle matrici è rappresentato da un carattere ASCII non di spazi bianchi (punti codice 33-126). È necessario produrre il prodotto di queste matrici.
Regole relative all'output:
Un prodotto composto da due voci non deve contenere simboli in mezzo. E ' ab
, senza a*b
, a·b
, times(a,b)
o qualcosa di simile. Non lo aa
è a^2
.
La somma dei termini dovrebbe avere uno spazio (codice ASCII punto 32) in mezzo. E ' a b
, non è a+b
, plus(a,b)
o qualcosa di simile.
La logica di queste due regole è: Tutti i caratteri non bianchi sono ammessi come simboli nelle matrici, quindi usarli come simboli matematici sarebbe disordinato. Quindi, quello che potresti normalmente scrivere come a*b+c*d
sarà ab cd
.
Puoi scegliere l'ordine dei termini. ab cd
, dc ab
E cd ba
sono matematicamente parlando lo stesso, in modo da poter scegliere l'ordine anche qui. L'ordine non deve essere coerente finché è matematicamente corretto.
Regole relative alla formattazione della matrice:
Una matrice può essere immessa in qualsiasi formato desiderato, tranne una singola stringa senza delimitatori tra le righe (questo perché l'output sarebbe completamente incasinato). Entrambe le matrici devono essere immesse nello stesso formato. Tutti gli esempi seguenti sono modi validi per inserire e produrre una matrice.
"ab;cd" <- This will look awful, but it's still accepted.
"a,b\nc,d"
[[a,b],[c,d]]
[a, b]
[c, d]
Sono consapevole che ciò consente molti formati che sembreranno disordinati, ma la sfida riguarda la moltiplicazione delle matrici, non la formattazione dell'output.
Regole generali:
- Puoi assumere un input valido. La moltiplicazione delle matrici sarà sempre possibile con le dimensioni indicate.
- Ci saranno solo due matrici.
- Si può presumere che le matrici non siano vuote
- Le funzioni integrate sono accettate (ma probabilmente un po 'ingombranti a causa dei requisiti di formattazione).
- Naturalmente è possibile utilizzare caratteri di escape nell'input, se necessario (
\'
anziché'
). - Qualsiasi metodo di input e output standard è OK .
Casi test:
Le due matrici di input sono mostrate con una linea vuota in mezzo. L'output viene mostrato dopo Output:
. Quando ci sono due matrici di output, è solo per mostrare altri output che sarebbero accettati.
Caso di test n. 1
Inputs:
[a]
[b]
Output:
[ab]
[ba] <- Also OK
Caso di test n. 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]
Caso di test n. 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]
Se la tua risposta alle regole sulla necessità ab cd
invece di a*b+c*d
è: dovresti evitare ingombranti formati di input / output , quindi vorrei notare che i formati di input e output sono molto flessibili. Il fatto che non sia possibile utilizzare *
e +
per prodotti e somme potrebbe rendere più difficile l'utilizzo di un semplice built-in, ma non considero quella cosa negativa.