Date due permutazioni in forma di ciclo disgiunto, produrre il loro prodotto / composizione in forma di ciclo disgiunto.
Per trovare la composizione, converti i cicli disgiunti in permutazioni in notazione a due righe. Ogni numero in una parte disgiunta di un ciclo è mappato al numero che lo segue nella stessa parte. Si avvolge. Così 1 -> 5
, 5 -> 1
, 2 -> 4
, 4 -> 2
. Se un numero non viene trovato, 3 -> 3
viene mappato su se stesso. Il primo ciclo disgiunto potrebbe anche essere scritto (1 5)(2 4)(3)
. Queste mappature vengono convertite in due righe, in questo modo (si noti che l'ordine di P e Q sono invertiti):
Il prodotto di due permutazioni si ottiene riorganizzando le colonne della seconda permutazione (più a sinistra) in modo che la sua prima fila sia identica alla seconda riga della prima (più a destra) permutazione. Il prodotto può quindi essere scritto come prima riga della prima permutazione sulla seconda riga della seconda permutazione modificata.
Regole:
- L'input verrà fornito come un elenco di elenchi o un formato simile
- Si può non prendere qualcosa di simile
(1 5)(2 4)
, come[5, 4, 3, 2, 1]
, già in forma due righe (indice di mappatura a valore) - Non tutti i numeri devono essere presenti in ciascun gruppo, quindi potresti avere
(1 5)·(1 2)
, risultando(2 5 1)
. - L'output dovrebbe essere in grado di essere utilizzato come input.
- Non è necessario supportare l'input con un ciclo vuoto
(1 5)·()
. Quello sarebbe invece dato come(1 5)·(1)
o qualcosa di equivalente. - Poiché i cicli si concludono, l'ordine non ha importanza finché il risultato è corretto.
- Puoi iniziare da zero o uno. Non importa, perché i risultati sono gli stessi.
- I numeri possono essere più grandi di
9
. - Non è possibile includere lo stesso numero più di una volta nell'output. Quindi
[[1],[1]]
non è permesso. - Si noti che questa operazione non è commutativa ! Ho messo Q prima di P, perché è quello che ha fatto Wikipedia. Puoi scegliere qualsiasi ordine, ma specifica quale se è diverso.
- Il codice più corto vince
- Gli incorporati sono consentiti, ma se ne usi uno, mostra una soluzione anche senza usarla.
Esempi:
Non vengono visualizzate tutte le possibilità di output equivalenti
Input
Output
[[1, 5], [2, 4]], [[1, 2, 4, 3]]
[[1, 4, 3, 5]] (or [[4, 3, 5, 1]] or ...)
[[1, 5]], [[1, 2]]
[[2, 5, 1]]
[[10, 2, 3]], [[2]]
[[3, 10, 2]]
[[1]], [[3]]
[[]] (or [[1]] or something equivalent)
[[10,2,3,15],[1,7],[5,6],[14,4,13,11,12]], [[5,6,7,9,14],[2,8,3,10],[1,11]]
[[12, 14, 6, 1], [8, 15, 10, 3, 2], [13, 11, 7, 9, 4]]
(arguments in reverse order from above gives a different answer)
[[5,6,7,9,14],[2,8,3,10],[1,11]], [[10,2,3,15],[1,7],[5,6],[14,4,13,11,12]]
[[9, 14, 4, 13, 1], [10, 8, 3, 15, 2], [7, 11, 12, 5]]