Motivation : Manchmal zählen bestimmte Elemente in einer Liste nicht zu Ihren Gesamtsummen. Zählen Sie beispielsweise Fluggäste in Reihen, in denen Babys auf dem Schoß eines Elternteils sitzen.
Herausforderung : Schreiben Sie ein Programm, um eine Liste von Elementen in Blöcke aufzuteilen. Jeder Block (außer möglicherweise der letzte) hat dieselbe Größe , wobei die Größe als die Anzahl der Elemente definiert ist, die eine Prädikatfunktion bestehen.
Regeln :
- Ihr Programm muss dauern
- eine Liste von Elementen
- eine positive Ganzzahlblockgröße
- eine Prädikatfunktion (nimmt ein Element und gibt true oder false zurück)
- Sie müssen die in Blöcke aufgeteilte Eingabeliste zurückgeben
- Jeder Chunk ist eine Liste von Elementen
- Insgesamt müssen die Artikel in der gleichen Reihenfolge bleiben, ohne dass sie verworfen werden
- Die Anzahl der Elemente, die das Prädikat in jedem Block (außer möglicherweise dem letzten) übergeben, sollte mit der Größe des Eingabeblocks übereinstimmen.
- Elemente, die das Prädikat nicht erfüllen, sollten bei dieser Größe nicht berücksichtigt werden
- Elemente, die das Prädikat nicht erfüllen, sind
- weiterhin in den Ausgabestücken enthalten
- Wird dem frühesten Chunk zugewiesen, wenn ein Chunk "voll" ist, aber die nächsten Elemente das Prädikat nicht erfüllen
- Daher besteht der letzte Block möglicherweise nicht nur aus Elementen, die das Prädikat nicht erfüllen
- Der endgültige Block hat möglicherweise eine kleinere Größe als der Block, da alle Elemente berücksichtigt wurden.
Nicht erschöpfende Beispiele:
Das einfachste Beispiel ist, 1
s und 0
s zu betrachten, in denen die Prädikatfunktion ist x ==> x > 0
. In diesem Fall sum
muss der Wert jedes Blocks mit der Blockgröße übereinstimmen.
- Elemente:,
[]
Größe2
:, Prädikat:x > 0
-> entweder[]
oder[[]]
- Elemente:,
[0, 0, 0, 0, 0, 0]
Größe2
:, Prädikat:x > 0
->[[0, 0, 0, 0, 0, 0]]
- Elemente:,
[0, 1, 1, 0]
Größe2
:, Prädikat:x > 0
->[[0, 1, 1, 0]]
- Elemente:,
[0, 1, 1, 0, 1, 0, 0]
Größe2
:, Prädikat:x > 0
->[[0, 1, 1, 0], [1, 0, 0]]
- Elemente:,
[0, 1, 0, 0, 1, 0, 1, 1, 0]
Größe2
:, Prädikat:x > 0
->[[0, 1, 0, 0, 1, 0], [1, 1, 0]]
Und lassen Sie uns mit den Flugzeugpassagieren enden, bei denen Babys auf dem Schoß eines Elternteils sitzen . A
Für Erwachsene, b
für Babys ist die 3
Sitzreihe in der Ebene breit, Erwachsene stehen immer vor ihrem Baby:
- Elemente:,
[A, b, A, b, A, A, A, b, A, b, A, A, b]
Größe3
:, Prädikat:x => x == A
->[[A, b, A, b, A], [A, A, b, A, b], [A, A, b]]