Sintesi
Data di ingresso k
, trovare una partizione di interi 1
a n
in k
sottoinsiemi libera a somma per il più grande n
è possibile entro 10 minuti.
Contesto: numeri Schur
Una serie A
è senza somma se la sua somma totale A + A = { x + y | x, y in A}
non ha elementi in comune con essa.
Per ogni numero intero positivo k
esiste un numero intero più grande in S(k)
modo che l'insieme {1, 2, ..., S(k)}
possa essere partizionato in k
sottoinsiemi senza somma. Questo numero è chiamato k esimo numero Schur (OEIS A045652 ).
Ad esempio S(2) = 4
,. Siamo in grado di partizionare {1, 2, 3, 4}
come {1, 4}, {2, 3}
, e questa è la partizione unica in due sottoinsiemi senza somma, ma ora non possiamo aggiungere 5
a nessuna delle parti.
Sfida
Scrivi un programma deterministico che procede come segue:
- Prendi un numero intero positivo
k
come input - Scrivi l'attuale timestamp di Unix su stdout
- Uscite una sequenza di partizioni di
1
an
ink
sottoinsiemi privo di somma per aumentaren
, dopo ogni sequenza con il timestamp Unix corrente.
Il vincitore sarà il programma che stampa una partizione per il più grande n
entro 10 minuti sul mio computer quando viene dato l'input 5
. I legami verranno interrotti nel minor tempo possibile per trovare una partizione per la più grande n
, media su tre esecuzioni: ecco perché l'output dovrebbe includere i timestamp.
Dettagli importanti:
- Ho Ubuntu Precise, quindi se la tua lingua non è supportata non sarò in grado di assegnarla.
- Ho una CPU Intel Core2 Quad, quindi se vuoi usare il multithreading non ha senso usare più di 4 thread.
- Se vuoi che io usi particolari flag o implementazioni del compilatore, documentalo chiaramente nella tua risposta.
- Non dovrai inserire nel tuo caso speciale il tuo codice per gestire l'input
5
. - Non è necessario produrre ogni miglioramento riscontrato. Ad esempio, per l'input
2
è possibile generare solo la partizionen = 4
. Tuttavia, se non emetti nulla nei primi 10 minuti, lo segnerò comen = 0
.
n=59
e l'ordinamento per il maggior numero di numeri consentiti inferiore anextN
dàn=64
. L'ordinamento per la lunghezza dell'elenco di numeri non consentiti (che può avere ripetizioni) porta molto rapidamente a unn=30
modello elegante .