O Driftsort é uma maneira simples de "classificar" uma matriz. Ele funciona "deslizando" ou "girando" os elementos na matriz até que a matriz seja classificada ou até que a matriz falhe na classificação.
Vamos percorrer dois exemplos. Primeiro, considere a matriz [10, 2, 3, 4, 7]
. Como o array não está classificado, nós o rotacionamos uma vez. (Isso pode acontecer em qualquer direção, desde que permaneça na mesma direção.) Em seguida, a matriz se torna:
[7, 10, 2, 3, 4]
Como não está classificado, giramos novamente.
[4, 7, 10, 2, 3]
E de novo:
[3, 4, 7, 10, 2]
E uma última vez:
[2, 3, 4, 7, 10]
E está resolvido! Portanto, a matriz [10, 2, 3, 4, 7]
é selecionável em derivações. Aqui estão todas as rotações da matriz, para maior clareza:
[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 agora a matriz [5, 3, 9, 2, 6, 7]
. Veja suas rotações:
[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]
Nenhuma dessas matrizes é classificada, portanto, a matriz [5, 3, 9, 2, 6, 7]
não é passível de derivação.
Objetivo Dada uma matriz / lista não-vazias de números inteiros como entrada para um programa / função, implemente o driftsort na entrada e a produza ou produza um valor falsey ( ou uma matriz / lista vazia) se não puder ser derivado. Os números inteiros estão vinculados aos seus idiomas max / min, mas isso deve ser pelo menos 255 para o máximo e 0 para o mínimo.
Você pode usar métodos de classificação internos, mas não um interno que resolva o desafio.
Este é um código de golfe , portanto, o programa mais curto em bytes.
Casos de teste
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
operação que remove o primeiro elemento de uma matriz.
sorted(l)
é uma sub- lista contígua del+l
.