Resumen Ejecutivo
Teniendo en cuenta la entrada k
, encontrar una partición de números enteros 1
a n
en k
subconjuntos libre de suma para el más grande n
que pueda dentro de los 10 minutos.
Antecedentes: números de Schur
Un conjunto no A
tiene suma si su auto suma A + A = { x + y | x, y in A}
no tiene elementos en común.
Por cada número entero positivo k
hay un número entero más grande de S(k)
tal manera que el conjunto {1, 2, ..., S(k)}
se puede dividir en k
subconjuntos sin suma. Este número se denomina número k th Schur (OEIS A045652 ).
Por ejemplo, S(2) = 4
. Podemos particionar {1, 2, 3, 4}
como {1, 4}, {2, 3}
, y esa es la partición única en dos subconjuntos sin suma, pero ahora no podemos agregar 5
a ninguna de las partes.
Desafío
Escriba un programa determinista que haga lo siguiente:
- Tome un entero positivo
k
como entrada - Escribir la marca de tiempo actual de Unix en stdout
- Emite una secuencia de particiones de
1
an
enk
subconjuntos sin suma para aumentarn
, siguiendo cada secuencia con la marca de tiempo Unix actual.
El ganador será el programa que imprime una partición para el más grande n
en 10 minutos en mi computadora cuando se le da entrada 5
. Los empates se romperán por el tiempo más rápido para encontrar una partición para el mayor n
promedio de tres ejecuciones: es por eso que la salida debe incluir marcas de tiempo.
Detalles importantes:
- Tengo Ubuntu Precise, por lo que si su idioma no es compatible, no podré calificarlo.
- Tengo una CPU Intel Core2 Quad, por lo que si desea usar subprocesos múltiples, no tiene sentido usar más de 4 subprocesos.
- Si desea que use algún indicador o implementación particular del compilador, documente eso claramente en su respuesta.
- No deberá poner en mayúsculas y minúsculas su código para manejar la entrada
5
. - No es necesario que produzca todas las mejoras que encuentre. Por ejemplo, para la entrada
2
, solo puede generar la particiónn = 4
. Sin embargo, si no muestra nada en los primeros 10 minutos, lo calificaré comon = 0
.
n=59
, y ordenar por el mayor número de números permitidos menos quenextN
dan=64
. Ordenar por la longitud de la lista de números no permitidos (que puede tener repeticiones) conduce muy rápidamente a unn=30
patrón elegante .