動機:リスト内の特定のアイテムが合計にカウントされない場合があります。例えば、赤ちゃんが親の膝の上に座っている飛行機の乗客を列に数えます。
課題:アイテムのリストをチャンクに分割するプログラムを作成します。各チャンク(最後のチャンクを除く)は同じサイズです。サイズは、述語関数を渡すアイテムの数として定義されます。
ルール:
- あなたのプログラムは
- アイテムのリスト
- 正の整数チャンクサイズ
- 述語関数(項目を取り、trueまたはfalseを返します)
- 入力リストをチャンクに分割して返す必要があります
- 各チャンクはアイテムのリストです
- 全体的に、アイテムは同じ順序のままで、何も変装していない必要があります
- 各チャンク(おそらく最後を除く)で述語を渡すアイテムの数は、入力チャンクサイズと一致する必要があります。
- 述語に失敗したアイテムは、このサイズにカウントされません
- 述語に失敗した項目は
- 出力チャンクにまだ含まれています
- チャンクが「満杯」であるが、次の項目が述語に失敗したものである場合、最も早いチャンクに割り当てられます
- したがって、最終チャンクは、述語に失敗した項目のみで構成されない場合があります
- すべてのアイテムが考慮されているため、最終チャンクのサイズはチャンクサイズよりも小さい場合があります。
非網羅的な例:
最も簡単な例は、述語関数がである1
sと0
s を考慮することですx ==> x > 0
。この場合、sum
各チャンクのがチャンクサイズと一致する必要があります。
- items:
[]
、size:2
、predicate: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]]