16/08/23 17:06:57.99 Z+VJIz/8.net
>>618 Squeak Smalltalk
| fn |
fn := [:N |
| fibonacciUpTo elems ans |
fibonacciUpTo := [:m |
Array streamContents: [:ss |
| a b |
ss nextPut: (a := b := 1).
[(a := b flag: (b := a + b)) < m] whileTrue: [ss nextPut: a]
]
].
ans := nil.
elems := fibonacciUpTo value: N.
[:exit |
elems size to: 1 by: -1 do: [:m |
elems combinations: m atATimeDo: [:comb |
comb sum = N ifTrue: [ans := comb. exit value]
]
]
] valueWithExit.
ans
].
^(1 to: 10), {100. 1000} collect: [:N | N -> (fn value: N)]
"=> {1->#(1) . 2->#(1 1) . 3->#(1 2) . 4->#(1 1 2) . 5->#(1 1 3) . 6->#(1 2 3) .
7->#(1 1 2 3) . 8->#(1 2 5) . 9->#(1 1 2 5) . 10->#(1 1 3 5) . 100->#(1 2 3 5 13 21 55) .
1000->#(1 1 3 8 21 34 89 233 610)} "