リスト内の数値のパーティションを表す必要があります。このプロシージャは、パーティションの最大数と初期パーティションの最大値を決定する引数も取ります。
(list-partitions 5 2 4)
>((4 1) (3 2))
ここで、初期合計は5、最大パーティション数は2、最大初期パーティションは4です。
概念的には、パーティション化された数値を、パーティションを構築するヘルパー関数にフィードする必要があると思います。しかし、どうすればそれを実装できますか?
解決しました
リスト内の数値のパーティションを表す必要があります。このプロシージャは、パーティションの最大数と初期パーティションの最大値を決定する引数も取ります。
(list-partitions 5 2 4)
>((4 1) (3 2))
ここで、初期合計は5、最大パーティション数は2、最大初期パーティションは4です。
概念的には、パーティション化された数値を、パーティションを構築するヘルパー関数にフィードする必要があると思います。しかし、どうすればそれを実装できますか?
解決しました
これがRacketで考えられる解決策です。まず、 (このpartition
アルゴリズムに基づく)プロシージャは、整数のパーティションの完全なリストを生成します。次に、プロシージャは要求に応じて結果をフィルタリングします。n
list-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))