Driftsort est un moyen simple de "trier" un tableau. Il fonctionne en «faisant glisser» ou en «tournant» les éléments dans le tableau jusqu'à ce que le tableau soit trié ou jusqu'à ce que le tableau ne soit pas trié.
Passons en revue deux exemples. Tout d'abord, considérez le tableau [10, 2, 3, 4, 7]
. Comme le tableau n'est pas trié, nous le faisons pivoter une fois. (Cela peut se produire dans les deux sens, tant qu'il reste dans la même direction.) Ensuite, le tableau devient:
[7, 10, 2, 3, 4]
Ce n'est pas trié, alors nous tournons à nouveau.
[4, 7, 10, 2, 3]
Et encore:
[3, 4, 7, 10, 2]
Et une dernière fois:
[2, 3, 4, 7, 10]
Et c'est trié! Le tableau [10, 2, 3, 4, 7]
est donc dérivable. Voici toutes les rotations du tableau, pour plus de clarté:
[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]
Considérez maintenant le tableau [5, 3, 9, 2, 6, 7]
. Regardez ses rotations:
[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]
Aucun de ces tableaux n'est trié, donc le tableau [5, 3, 9, 2, 6, 7]
n'est pas dérivable.
Objectif Étant donné un tableau / une liste d'entiers non vides comme entrée dans un programme / une fonction, implémentez la dérive sur l'entrée et la sortie, ou affichez une valeur de falsey ( ou un tableau / liste vide) si elle ne peut pas être dérivée. Les entiers sont liés à vos langues max / min, mais cela doit être au moins 255 pour le max et 0 pour le min.
Vous pouvez utiliser des méthodes de tri intégrées, mais pas une méthode intégrée qui résout le problème.
Il s'agit d'un code-golf , donc le programme le plus court en octets.
Cas de 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
opération qui supprime le premier élément d'un tableau.
sorted(l)
est une sous-liste contiguë del+l
.