Мотивація : Іноді певні елементи у списку не зараховуються до вашої суми. Наприклад, підрахунок пасажирів літака рядами, де малюки сидять на колінах батьків.
Завдання : написати програму, щоб розділити список елементів на шматки. Кожен фрагмент (крім можливо останнього) має однаковий розмір , де розмір визначається як кількість елементів, що передають функцію предиката.
Правила :
- Ваша програма повинна приймати
- перелік предметів
- додатний цілий розмір шматка
- функція предиката (бере елемент і повертає істинне чи хибне)
- Ви повинні повернути список вхідних даних, розділений на шматки
- Кожен шматок - це список предметів
- В цілому предмети повинні залишатися в одному порядку, без жодного відхилення
- Кількість елементів, що передають предикат у кожному фрагменті (крім, можливо, останнього), повинна відповідати розміру вхідного фрагмента.
- елементи, які не мають присудка, не повинні враховуватися до цього розміру
- Елементи, що не мають присудка, є
- як і раніше включені у вихідні фрагменти
- виділяється на самий ранній шматок, якщо шматок "повний", але наступні пункти - це невдалі предикат
- таким чином, остаточний фрагмент може складатися не лише з предметів, які не відповідають присудку
- Останній шматок може бути розміром менше розміру, оскільки всі предмети були враховані.
Невичерпні приклади:
Найпростішим прикладом є розгляд 1
s і 0
s, де функція предиката x ==> x > 0
. У цьому випадку sum
кожен шматок повинен відповідати розміру шматка.
- items:,
[]
size:,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]]