Comment detail

「組合せ型の最小完全ハッシュ関数」の逆関数 (Nested Flatten)

This comment is reply for 1653 sumim: Squeak Smalltalk で。(「組合せ型の最小完全ハッシュ関数」の逆関数). Go to thread root.

テーブル(パスカルの三角形)を用意せず、富豪的に。
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) "

Index

Feed

Other

Link

Pathtraq

loading...