Considere una permutación de los valores enteros de 1a N. Por ejemplo, este ejemplo para N = 4:
[1, 3, 4, 2]
Vamos a considerar que esta lista sea cíclico, de tal manera que 1y 2son tratados como adyacente. Una cantidad que podemos calcular para dicha lista es la diferencia al cuadrado total de los valores adyacentes:
(1-3)² + (3-4)² + (4-2)² + (2-1)² = 10
Su tarea es encontrar una permutación que maximice esta cantidad, dado un número entero positivo N. En el caso del N = 4ejemplo anterior, no es óptimo (de hecho, es mínimo). Podemos lograr una diferencia al cuadrado total de 18con la siguiente permutación (así como varias otras):
[1, 4, 2, 3]
Su algoritmo debe ejecutarse en tiempo polinómico (de N). En particular, no puede simplemente calcular la diferencia al cuadrado total de todas las permutaciones.
Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función y generando el resultado a través de STDOUT (o la alternativa más cercana), el valor de retorno de la función o el parámetro de función (out).
La salida puede estar en cualquier formato de cadena o lista conveniente, inequívoca y plana. Puede elegir devolver una lista con valores de 0a en N-1lugar de 1a N.
Aplican reglas estándar de código de golf .
Datos de prueba
Hay una buena solución analítica para este problema. Por ejemplo, todas las soluciones válidas N = 10son equivalentes a la siguiente lista (hasta cambios cíclicos y reversión):
[7, 5, 6, 4, 8, 2, 10, 1, 9, 3]
No quiero revelar mucho más allá de eso (aunque probablemente sea suficiente para descubrir el patrón), por lo que en lugar de dar más ejemplos, puede verificar que sus resultados tengan las siguientes diferencias cuadradas totales para un determinado 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
Esta es la entrada OEIS A064842 (que también contiene una referencia a un documento con una solución a este desafío si está atascado).
(i<n/2||n%2)^i%2?i+1:n-i.