Comment detail
「組合せ型の最小完全ハッシュ関数」の逆関数 (Nested Flatten)
テーブル(パスカルの三角形)を用意せず、富豪的に。
1 2 3 4 5 6 7 8 9 | | n r val pat |
n := 6. r := 3. val := 18.
pat := Array new: n withAll: 0.
r to: 1 by: -1 do: [:r0 |
| idx last |
idx := (1 to: n - (r - r0)) findLast: [:n0 | val >= (last := n0 - 1 take: r0)].
pat at: n - idx + 1 put: 1.
val := val - last].
^pat "=> #(1 1 0 1 0 0) "
|
shiro さん、tell さんのを読んで、上のは少々冗長だと遅まきながら気づきました(^_^;)。
1 2 3 4 5 6 7 8 9 | | val n r pat c |
n := 5. r := 2. val := 8.
pat := Array new: n withAll: 0.
1 to: n do: [:idx |
val >= (c := n - idx take: r) ifTrue: [
pat at: idx put: 1.
r := r - 1.
val := val - c]].
^pat "=> #(1 0 1 0 0) "
|





sumim
#1653()
[
Smalltalk
]
Rating0/0=0.00
| n r val pas ans pat | n := 5. r := 2. val := 8. pas := OrderedCollection with: (0 to: n - r). (r - 1) timesRepeat: [ pas addFirst: ( pas first inject: #(0) into: [:new :each | new, {each + new last}])]. ans := OrderedCollection new. pas do: [:arr | val := val - (arr at: (ans add: (arr findLast: [:m | val >= m])))]. pat := Array new: n withAll: 0. ans do: [:idx | pat at: (n - idx + 1) put: 1]. ^pat "=> #(1 0 1 0 0) "Rating0/0=0.00-0+
1 reply [ reply ]