Driftsort è un modo semplice per "ordinare" un array. Funziona "facendo scorrere" o "ruotando" gli elementi nell'array fino a quando l'array non viene ordinato o fino a quando l'array non riesce a essere ordinato.
Camminiamo attraverso due esempi. Innanzitutto, considera l'array [10, 2, 3, 4, 7]
. Poiché l'array non è ordinato, lo ruotiamo una volta. (Ciò può accadere in entrambe le direzioni, purché rimanga nella stessa direzione.) Quindi, l'array diventa:
[7, 10, 2, 3, 4]
Questo non è ordinato, quindi ruotiamo di nuovo.
[4, 7, 10, 2, 3]
E di nuovo:
[3, 4, 7, 10, 2]
E un'ultima volta:
[2, 3, 4, 7, 10]
Ed è ordinato! Quindi l'array [10, 2, 3, 4, 7]
è maneggevole. Ecco tutte le rotazioni dell'array, per chiarezza:
[10, 2, 3, 4, 7]
[7, 10, 2, 3, 4]
[4, 7, 10, 2, 3]
[3, 4, 7, 10, 2]
[2, 3, 4, 7, 10]
Considera ora l'array [5, 3, 9, 2, 6, 7]
. Guarda le sue rotazioni:
[5, 3, 9, 2, 6, 7]
[7, 5, 3, 9, 2, 6]
[6, 7, 5, 3, 9, 2]
[2, 6, 7, 5, 3, 9]
[9, 2, 6, 7, 5, 3]
[3, 9, 2, 6, 7, 5]
Nessuno di questi array è ordinato, quindi l'array [5, 3, 9, 2, 6, 7]
non è trasferibile.
Obiettivo Dato un array / elenco non vuoto di numeri interi come input per un programma / funzione, implementare Driftsort sull'input e output, oppure emettere un valore di falso ( o un array / elenco vuoto) se non può essere deviato. I numeri interi sono associati alle tue lingue max / min, ma questo deve essere almeno 255 per il massimo e 0 per il minimo.
È possibile utilizzare metodi di ordinamento integrati, ma non un metodo integrato che risolva la sfida.
Questo è un codice-golf , quindi il programma più breve in byte.
Casi test
input => output
[1] => [1]
[5, 0, 5] => [0, 5, 5]
[3, 2, 1] => false
[0, 9, 3] => false
[1, 2, 3, 4] => [1, 2, 3, 4]
[4, 1, 2, 3] => [1, 2, 3, 4]
[0, 2, 0, 2] => false
[5, 3, 9, 2, 6, 7] => false
[0, 0, 0, 0, 0, 0, 0] => [0, 0, 0, 0, 0, 0, 0]
[75, 230, 30, 42, 50] => [30, 42, 50, 75, 230]
[255, 255, 200, 200, 203] => [200, 200, 203, 255, 255]
shiftsort
?
shift
operazione che rimuove il primo elemento di un array.
sorted(l)
tratta di un elenco secondario contiguo dil+l
.