1

リスト内の数値のパーティションを表す必要があります。このプロシージャは、パーティションの最大数と初期パーティションの最大値を決定する引数も取ります。

(list-partitions 5 2 4)
>((4 1) (3 2))

ここで、初期合計は5、最大パーティション数は2、最大初期パーティションは4です。

概念的には、パーティション化された数値を、パーティションを構築するヘルパー関数にフィードする必要があると思います。しかし、どうすればそれを実装できますか?

解決しました

4

1 に答える 1

2

これがRacketで考えられる解決策です。まず、 (このpartitionアルゴリズムに基づく)プロシージャは、整数のパーティションの完全なリストを生成します。次に、プロシージャは要求に応じて結果をフィルタリングします。nlist-partitions

#lang racket

(define (partition n)
  (let loop ((n n)
             (acc '()))
    (if (zero? n)
        (list acc)
        (append-map (lambda (i)
                      (loop (- n i) (cons i acc)))
                    (reverse (build-list n add1))))))

(define (list-partitions n max-number max-init)
  (take (filter (lambda (lst)
                  (<= (apply max lst) max-init))
                (partition n))
        max-number))

(list-partitions 5 2 4)
> '((1 4) (2 3))
于 2012-04-23T14:23:53.080 に答える