자극 : 때로는 목록의 특정 항목이 총계에 포함되지 않습니다. 예를 들어, 아기가 부모의 무릎에 앉는 비행기 승객을 줄로 세는 것입니다.
도전 과제 : 항목 목록을 덩어리로 나누는 프로그램을 작성하십시오. 각 청크 (마지막은 제외)는 같은 크기입니다 . 여기서 size 술어 함수를 전달하는 항목의 개수로 정의된다.
규칙 :
- 당신의 프로그램은
- 아이템 목록
- 양의 정수 청크 크기
- 술어 함수 (항목을 가져오고 true 또는 false를 리턴 함)
- 입력 목록을 청크로 분할하여 리턴해야합니다.
- 각 청크는 항목 목록입니다
- 전체적으로 품목은 동일한 순서로 유지되어야하며 무시하지 않아야합니다.
- 각 청크에 술어를 전달하는 항목 수 (마지막을 제외하고)는 입력 청크 크기와 일치해야합니다.
- 술어가 실패한 항목은이 크기에 포함되지 않아야합니다.
- 술어가 실패한 항목은
- 여전히 출력 청크에 포함
- 청크가 "full"이지만 다음 항목이 술어에 실패한 경우 가장 빠른 청크에 할당됩니다.
- 따라서 최종 청크는 술어가 실패한 항목으로 만 구성되지 않을 수 있습니다.
- 모든 항목이 설명 되었기 때문에 최종 청크의 크기 는 청크 크기보다 작을 수 있습니다 .
철저하지 않은 예 :
가장 간단한 예는 술어 함수가 인 1
s 및 0
s 를 고려 하는 것입니다 x ==> x > 0
. 이 경우 sum
각 청크의 청크 크기와 일치해야합니다.
- 항목 :
[]
, 크기 :2
, 조건 자 :x > 0
->[]
또는[[]]
- 항목 :
[0, 0, 0, 0, 0, 0]
, 크기 :2
, 술어 :x > 0
->[[0, 0, 0, 0, 0, 0]]
- 항목 :
[0, 1, 1, 0]
, 크기 :2
, 술어 :x > 0
->[[0, 1, 1, 0]]
- 항목 :
[0, 1, 1, 0, 1, 0, 0]
, 크기 :2
, 술어 :x > 0
->[[0, 1, 1, 0], [1, 0, 0]]
- 항목 :
[0, 1, 0, 0, 1, 0, 1, 1, 0]
, 크기 :2
, 술어 :x > 0
->[[0, 1, 0, 0, 1, 0], [1, 1, 0]]
그리고 아기가 부모의 무릎 예제 위에 앉는 비행기 승객으로 마무리합시다 . A
성인, b
아기, 비행 기행은 3
좌석이 넓고 어른은 항상 아기보다 먼저 나열됩니다.
- 항목 :
[A, b, A, b, A, A, A, b, A, b, A, A, b]
, 크기 :3
, 술어 :x => x == A
->[[A, b, A, b, A], [A, A, b, A, b], [A, A, b]]