Considera una permutazione degli interi 1
, ..., n
come questa per n = 6
:
[5,2,4,3,6,1]
Se si visualizza la permutazione come una mappatura da [1,2,3,4,5,6]
a [5,2,4,3,6,1]
, la permutazione può essere scomposta in cicli disgiunti . Un ciclo è un sottoinsieme di elementi che si mappano l'un l'altro. Ad esempio, 1
viene mappato 5
, a cui viene mappato 6
, a cui viene mappato nuovamente 1
. Quindi un ciclo è [1,5,6]
. Gli altri cicli sono [2]
e [3,4]
. Quindi il numero di cicli per questa permutazione è 3
.
In generale, i cicli di una permutazione sono unici (fino all'ordine) e il numero di cicli per una permutazione delle dimensioni n
varia da 1
a n
.
La sfida
Data una permutazione non vuota, emette il suo numero di cicli.
Ingresso è una matrice formata dai n
numeri interi 1
, 2
, ..., n
, dove n > 0
. Ogni numero intero si verifica esattamente una volta. L'ordine in cui appaiono definiscono la permutazione, come nell'esempio sopra.
Invece di un array puoi usare un elenco, una stringa con un separatore tra i numeri, un input separato per ogni numero o qualsiasi cosa ragionevole.
Per una permutazione delle dimensioni n
, invece del set di numeri interi basato su 1 1
, ..., n
è possibile utilizzare coerentemente il set in base 0 0
, ..., n-1
. In tal caso, indicalo nella tua risposta.
Il codice dovrebbe funzionare n
fino a 20
un tempo ragionevole, diciamo meno di un minuto.
Codice golf. Sono ammessi tutti i builtin.
Casi test
Ciò presuppone un input di array basato su 1.
[1] -> 1
[3,2,1] -> 2
[2,3,4,5,1] -> 1
[5,2,4,3,6,1] -> 3
[8,6,4,5,2,1,7,3] -> 2
[4,5,11,12,7,1,3,9,10,6,8,2] -> 1
[4,2,5,11,12,7,1,3,9,10,6,8] -> 5
[5,8,6,18,16,9,14,10,11,12,4,20,15,19,2,17,1,13,7,3] -> 3
[14,5,17,15,10,18,1,3,4,13,11,16,2,12,9,7,20,6,19,8] -> 7
Relazionato
Questa sfida correlata richiede i cicli effettivi della permutazione, non il numero di essi. Richiedere solo il numero di cicli può portare a algoritmi più brevi che evitano di generare i cicli effettivi.
1
, ..., n
in questo ordine. Puoi chiarire come può una mappatura essere un input? È una struttura di dati?
dict
. Voglio avere {1: 2, 2: 1}
come input invece di [2, 1]
.