Driftsort es una forma simple de "ordenar" una matriz. Funciona "deslizando" o "girando" los elementos sobre la matriz hasta que se ordena la matriz, o hasta que la matriz no se puede ordenar.
Veamos dos ejemplos. Primero, considere la matriz [10, 2, 3, 4, 7]
. Como la matriz no está ordenada, la rotamos una vez. (Esto puede suceder en cualquier dirección, siempre que siga siendo la misma dirección). Luego, la matriz se convierte en:
[7, 10, 2, 3, 4]
Esto no está ordenado, por lo que giramos nuevamente.
[4, 7, 10, 2, 3]
Y otra vez:
[3, 4, 7, 10, 2]
Y un tiempo final:
[2, 3, 4, 7, 10]
¡Y está ordenado! Entonces, la matriz [10, 2, 3, 4, 7]
es derivable clasificable. Aquí están todas las rotaciones de la matriz, para mayor claridad:
[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]
Considere ahora la matriz [5, 3, 9, 2, 6, 7]
. Mira sus rotaciones:
[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]
Ninguno de estos arreglos está ordenado, por lo que el arreglo [5, 3, 9, 2, 6, 7]
no es derivable.
Objetivo Dada una matriz / lista de enteros no vacía como entrada a un programa / función, implementar driftsort en la entrada y salida, o generar un valor falsey ( o una matriz / lista vacía) si no se puede derivar. Los enteros están vinculados a sus idiomas max / min, pero esto debe ser al menos 255 para el máximo y 0 para el mínimo.
Puede utilizar métodos de clasificación integrados, pero no uno integrado que resuelva el desafío.
Este es un código de golf , por lo que el programa más corto en bytes.
Casos de prueba
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
operación que elimina el primer elemento de una matriz.
sorted(l)
es una sublista contigua del+l
.