Sumário executivo
Dada entrada k
, encontrar uma partição de inteiros 1
para n
a k
subconjuntos livre de soma para o maior n
possível dentro de 10 minutos.
Contexto: números de Schur
Um conjunto A
é livre de soma se sua soma automática A + A = { x + y | x, y in A}
não tiver elementos em comum com ele.
Para todo número inteiro positivo, k
existe um número inteiro maior, de S(k)
modo que o conjunto {1, 2, ..., S(k)}
pode ser particionado em k
subconjuntos sem soma. Esse número é chamado de k- ésimo número de Schur (OEIS A045652 ).
Por exemplo S(2) = 4
,. Podemos particionar {1, 2, 3, 4}
como {1, 4}, {2, 3}
, e essa é a partição exclusiva em dois subconjuntos sem soma, mas agora não podemos adicionar um 5
a nenhuma das partes.
Desafio
Escreva um programa determinístico que faça o seguinte:
- Tome um número inteiro positivo
k
como entrada - Escreva o timestamp atual do Unix no stdout
- Saídas uma sequência de partições de
1
an
emk
subconjuntos livre de soma para o aumenton
, após cada sequência com o timestamp Unix.
O vencedor será o programa que imprimirá uma partição para a maior n
dentro de 10 minutos no meu computador quando receber uma entrada 5
. Os laços serão quebrados no momento mais rápido para encontrar uma partição para a maior n
média, em três execuções: é por isso que a saída deve incluir registros de data e hora.
Detalhes importantes:
- Eu tenho o Ubuntu Precise, portanto, se seu idioma não for suportado, não poderei pontuá-lo.
- Eu tenho uma CPU Intel Core2 Quad, portanto, se você quiser usar multithreading, não faz sentido usar mais de 4 threads.
- Se você quiser que eu use quaisquer sinalizadores ou implementações específicas do compilador, documente isso claramente em sua resposta.
- Você não deve especializar seu código para manipular a entrada
5
. - Você não é obrigado a produzir todas as melhorias encontradas. Por exemplo, para a entrada
2
você poderia saída apenas a partição paran = 4
. No entanto, se você não produzir nada nos primeiros 10 minutos, pontuarei isso comon = 0
.
n=59
, e classificando pelo maior número de números permitidos menor que o quenextN
fornecen=64
. A classificação pelo comprimento da lista de números não permitidos (que pode ter repetições) leva muito rapidamente a umn=30
padrão elegante .