Descripción
Deje que una permutación de los enteros {1, 2, ..., n}
se llame mínimamente interpolable si ningún conjunto de k+2
puntos (junto con sus índices) caen en un polinomio de grado k
. Es decir,
- No hay dos puntos en una línea horizontal (polinomio de 0 grados)
- No hay tres puntos en una línea (polinomio de 1 grado)
- No hay cuatro puntos en una parábola (polinomio de 2 grados)
- Etcétera.
Desafío
Escriba un programa que calcule la secuencia OEIS A301802 (n) , el número de permutaciones mínimamente interpolables {1, 2, ..., n}
para el n
mayor número posible.
Puntuación
Grabaré su código en mi computadora (Intel Core i5 de 2.3 GHz, 8 GB de RAM) con entradas cada vez mayores. Su puntaje será la mayor entrada que demore menos de 1 minuto en generar el valor correcto.
Ejemplo
Por ejemplo, la permutación [1, 2, 4, 3]
es mínimamente interpolable porque
the terms together with their indices
[(1, 1), (2, 2), (3, 4), (4, 3)]
have the property that
(0) No two points have the same y-value.
(1) No three points lie on a line.
(2) No four points lie on a parabola.
En la ilustración, puede ver que las líneas horizontales (rojo) tienen como máximo un punto, las líneas (azul) tienen como máximo dos puntos y las parábolas (verde) tienen tres puntos.
Datos
Aquí están las permutaciones mínimamente interpolable para n=3
, n=4
y n=5
:
n = 3: [1,3,2],[2,1,3],[2,3,1],[3,1,2]
n = 4: [1,2,4,3],[1,3,2,4],[1,3,4,2],[1,4,2,3],[2,1,3,4],[2,1,4,3],[2,3,1,4],[2,4,1,3],[2,4,3,1],[3,1,2,4],[3,1,4,2],[3,2,4,1],[3,4,1,2],[3,4,2,1],[4,1,3,2],[4,2,1,3],[4,2,3,1],[4,3,1,2]
n = 5: [1,2,5,3,4],[1,3,2,5,4],[1,3,4,2,5],[1,4,2,3,5],[1,4,3,5,2],[1,4,5,2,3],[1,4,5,3,2],[1,5,3,2,4],[2,1,4,3,5],[2,3,1,4,5],[2,3,5,1,4],[2,3,5,4,1],[2,4,1,5,3],[2,4,3,1,5],[2,4,5,1,3],[2,5,1,3,4],[2,5,1,4,3],[2,5,3,4,1],[2,5,4,1,3],[3,1,4,5,2],[3,1,5,2,4],[3,1,5,4,2],[3,2,5,1,4],[3,2,5,4,1],[3,4,1,2,5],[3,4,1,5,2],[3,5,1,2,4],[3,5,1,4,2],[3,5,2,1,4],[4,1,2,5,3],[4,1,3,2,5],[4,1,5,2,3],[4,1,5,3,2],[4,2,1,5,3],[4,2,3,5,1],[4,2,5,1,3],[4,3,1,2,5],[4,3,1,5,2],[4,3,5,2,1],[4,5,2,3,1],[5,1,3,4,2],[5,2,1,3,4],[5,2,1,4,3],[5,2,3,1,4],[5,2,4,3,1],[5,3,2,4,1],[5,3,4,1,2],[5,4,1,3,2]
Si mi programa es correcto, los primeros valores de a(n)
, el número de permutaciones mínimamente interpolables de {1, 2, ..., n}
:
a(1) = 1
a(2) = 2
a(3) = 4
a(4) = 18
a(5) = 48
a(6) = 216
a(7) = 584
a(8) = 2870
fuente
Respuestas:
C#
Toma valores de
n
como argumentos de línea de comandos, o si se ejecuta sin argumentos se multiplica por sí mismon=10
. Compilando como "Release" en VS 2017 y ejecutándose en un Intel Core i7-6700, calculon=9
en 1.2 segundos yn=10
en 13.6 segundos.n=11
Es poco más de 2 minutos.FWIW:
fuente