动机:有时候列表中的某些项目不会计入您的总数。例如,按排计数飞机乘客,其中婴儿坐在父母的膝盖上。
挑战:编写一个程序将项目列表拆分为多个块。每个块(除了最后一个块)都具有相同的大小,其中size定义为通过谓词函数的项目数。
规则:
- 您的程序必须
- 项目清单
- 正整数块大小
- 谓词函数(获取一项,并返回true或false)
- 您必须返回输入列表,并将其分成多个部分
- 每个块都是项目列表
- 总体而言,这些物品必须保持相同的顺序,且没有杂物
- 每个块(可能是最后一个块除外)中通过谓词的项目数应与输入块大小匹配。
- 无法通过谓词的项目不应计入此大小
- 谓词失败的项目是
- 仍包含在输出块中
- 分配给最早的块,如果块“满”,但接下来的项是不通过谓词的项
- 因此,最终块可能不仅仅包含不符合谓词的项目
- 最终块的大小可能小于块大小,因为所有项目都已考虑在内。
非详尽示例:
最简单的示例是考虑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]]