แรงจูงใจ : บางครั้งบางรายการในรายการจะไม่นับรวมกับยอดรวมของคุณ ตัวอย่างเช่นการนับจำนวนผู้โดยสารเครื่องบินในแถวที่ทารกนั่งอยู่บนตักของผู้ปกครอง
ท้าทาย : เขียนโปรแกรมในการแยกรายชื่อของรายการเป็นชิ้น แต่ละอัน (ยกเว้นอาจเป็นครั้งสุดท้าย) มีขนาดเท่ากันซึ่งขนาดถูกกำหนดเป็นจำนวนรายการที่ผ่านฟังก์ชันเพรดิเคต
กฎ :
- โปรแกรมของคุณต้องใช้
- รายการของรายการ
- ขนาดก้อนจำนวนเต็มบวก
- ฟังก์ชันเพรดิเคต (รับไอเท็มและส่งคืนจริงหรือเท็จ)
- คุณต้องส่งคืนรายการอินพุตแยกเป็นชิ้น ๆ
- แต่ละอันคือรายการของรายการ
- โดยรวมแล้วรายการจะต้องอยู่ในลำดับเดียวกันโดยไม่มีใครสนใจ
- จำนวนรายการที่ผ่านเพรดิเคตในแต่ละก้อน (ยกเว้นอาจเป็นรายการสุดท้าย) ควรตรงกับขนาดของก้อนข้อมูลเข้า
- รายการที่ล้มเหลวเพรดิเคตไม่ควรนับรวมกับขนาดนี้
- รายการที่ล้มเหลวของกริยาคือ
- ยังคงรวมอยู่ในกลุ่มเอาต์พุต
- จัดสรรให้กับชิ้นแรกสุดในกรณีที่ชิ้นเป็น "เต็ม" แต่รายการถัดไปเป็นรายการที่ล้มเหลวในเพรดิเคต
- ดังนั้นชิ้นสุดท้ายอาจไม่เพียง แต่ประกอบด้วยรายการที่ล้มเหลวของเพรดิเคต
- ก้อนสุดท้ายอาจมีขนาดน้อยกว่าขนาดก้อนเนื่องจากรายการทั้งหมดได้รับการพิจารณา
ตัวอย่างที่ไม่ครบถ้วนสมบูรณ์:
ตัวอย่างที่ง่ายที่สุดคือการพิจารณา1
และ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]]