Definiamo la sequenza di Fibonacci come
F(1) = 1
F(2) = 2
F(n) = F(n - 2) + F(n - 1)
Quindi abbiamo la sequenza infinita 1,2,3,5,8,13,
... È noto che qualsiasi numero intero positivo può essere scritto come una somma di alcuni numeri di Fibonacci. L'unica avvertenza è che questa somma potrebbe non essere unica. C'è sempre almeno un modo per scrivere un numero come somma dei numeri di Fibonacci, ma potrebbero essercene molti di più.
La tua sfida è quella di scrivere un programma completo che usando stdin prenda un numero intero positivo compreso tra 1 e 1 milione incluso, e quindi emetta usando stdout tutte le possibili sommazioni dei numeri di Fibonacci che si sommano all'input. In una somma, i numeri di Fibonacci non devono ripetersi e questo include il numero 1
. In ogni sommatoria, se 1
presente, deve essere presente una sola volta perché nella mia definizione della sequenza sopra 1
appare solo una volta. Le somme con solo termine sono valide, quindi se il numero di input è un numero di Fibonacci stesso, il numero stesso è una somma valida e deve essere stampato. Se più somme, quindi tra due somme deve esserci una riga vuota per distinguerle facilmente.
Ecco alcuni esempi.
./myfib 1
1
C'è solo una di queste somme e ha solo un termine, quindi è tutto ciò che viene stampato.
./myfib 2
2
Nota qui che 1+1
non è una somma valida perché si 1
ripete.
./myfib 3
1+2
3
Due somme e sono entrambe stampate con una linea vuota in mezzo.
./myfib 10
2+8
2+3+5
./myfib 100
3+8+89
1+2+8+89
3+8+34+55
1+2+3+5+89
1+2+8+34+55
3+8+13+21+55
1+2+3+5+34+55
1+2+8+13+21+55
1+2+3+5+13+21+55
Vero code-golf. Vince il codice più corto in qualsiasi lingua. Pubblica il tuo codice con alcuni casi di test (oltre a quello che ho dato sopra). Nel caso di legami, scelgo quello con i voti più alti dopo aver atteso almeno due settimane e probabilmente più a lungo. Quindi la community non esita a votare qualsiasi soluzione ti piaccia. L'intelligenza / bellezza del codice conta molto più di chi pubblica per primo.
Buona programmazione!