Considere uma permutação dos valores inteiros de 1
a N
. Por exemplo, este exemplo para N = 4
:
[1, 3, 4, 2]
Consideraremos que esta lista é cíclica, de modo que 1
e 2
é tratada como adjacente. Uma quantidade que podemos calcular para essa lista é a diferença total quadrática dos valores adjacentes:
(1-3)² + (3-4)² + (4-2)² + (2-1)² = 10
Sua tarefa é encontrar uma permutação que maximize essa quantidade, dado um número inteiro positivo N
. No caso do N = 4
exemplo acima, não é o ideal (na verdade, é mínimo). Podemos alcançar uma diferença quadrática total 18
com a seguinte permutação (bem como várias outras):
[1, 4, 2, 3]
Seu algoritmo deve ser executado em tempo polinomial (de N
). Em particular, você não pode simplesmente calcular a diferença quadrática total de todas as permutações.
Você pode escrever um programa ou função, recebendo entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e emitindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
A saída pode estar em qualquer formato conveniente, inequívoco, de lista simples ou de seqüência de caracteres. Você pode optar por retornar uma lista com valores de 0
para em N-1
vez de 1
para N
.
Aplicam-se as regras padrão de código de golfe .
Dados de teste
Existe uma boa solução analítica para esse problema. Por exemplo, todas as soluções válidas para N = 10
são equivalentes à seguinte lista (até turnos cíclicos e reversão):
[7, 5, 6, 4, 8, 2, 10, 1, 9, 3]
Eu não quero revelar muito além disso (embora seja provavelmente o suficiente para descobrir o padrão), então, em vez de dar mais exemplos, você pode verificar se seus resultados têm as seguintes diferenças quadráticas totais para um dado N
:
N Total squared difference
1 0
2 2
3 6
4 18
5 36
6 66
7 106
8 162
9 232
10 322
33 11936
100 333202
333 12308236
1000 333332002
Essa é a entrada A064842 da OEIS (que também contém uma referência a um papel com uma solução para esse desafio, se você estiver preso).
(i<n/2||n%2)^i%2?i+1:n-i
.