自然数の分割
Posted feedbacks - Smalltalk
Squeak Smalltalk で。
1 2 3 4 5 6 7 8 9 | | compo |
compo := [:nn :mm |
mm = 1 ifTrue: [{{nn}}] ifFalse: [
(nn to: 0 by: -1) inject: #() into: [:res :hd |
res, ((compo copy fixTemps value: nn - hd value: mm - 1) collect: [:each | {hd}, each])]]].
World findATranscript: nil.
(compo copy fixTemps value: 5 value: 3) do: [:nums |
Transcript cr.
nums do: [:num | Transcript show: num printString, ',']]
|
Squeak Smalltalk で。
n から 0 までの整数をそれぞれの桁と見なす m 桁の表現(配列)をすべて生成(asDigitsToPower: m do: aBlock)させ、うち合計(sum)が n になるものだけ選びました。
効率は悪いのですが、比較的簡潔に書けるところが yuin さんの #4301、ihag さんの #4313、kkobayashi さんの #4342 を拝見していて気に入ったので。
n から 0 までの整数をそれぞれの桁と見なす m 桁の表現(配列)をすべて生成(asDigitsToPower: m do: aBlock)させ、うち合計(sum)が n になるものだけ選びました。
効率は悪いのですが、比較的簡潔に書けるところが yuin さんの #4301、ihag さんの #4313、kkobayashi さんの #4342 を拝見していて気に入ったので。
1 2 3 4 5 | | n m results |
n := 5. m := 3.
results := OrderedCollection new.
(n to: 0 by: -1) asDigitsToPower: m do: [:digs | digs sum = n ifTrue: [results add: digs copy]].
^results
|


herumi
#4099()
Rating1/1=1.00
[ reply ]