2012-04-23 4 views
1

목록의 숫자 파티션을 나타내야합니다. 또한이 절차는 최대 파티션 수와 초기 파티션의 최대 값을 결정하는 인수를 사용합니다.구성표에 숫자의 파티션을 나열하십시오.

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

여기서 초기 총, 내가 구성하는 도우미 함수로 분할 수를 공급한다고 생각 파티션의 최대 수는 2이고, 최대 초기 파티션 개념적 4.

이다 5 나를위한 파티션. 하지만 어떻게 구현할 수 있을까요?

+0

가 내가 그들을 계산에서 다수의 파티션을 찾기 위해 프로그램을 만들었다. 내 편집을 참조하십시오. –

답변

2

여기 라켓 가능한 해결책 해결. 먼저 partition 절차 (this 알고리즘 기반)는 정수 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)) 
+1

고마워! 우리가 Scheme을 사용하고 있기 때문에 당신의 솔루션을 사용하지는 않았지만, 저에게 누산기를 사용하는 아이디어를주었습니다. –

+0

@ Jonk Great !. 어떤 체계적인 통역관을 사용하고 있습니까? 왜냐하면 Racket _is_ Scheme 인터프리터 –

+0

Stk (http://kaolin.essi.fr/STk/)를 사용하기 때문입니다. 이렇게 많은 다른 제도 번역가가 있다는 것을 나는 전혀 몰랐다. –

관련 문제