Motivasi : Terkadang item tertentu dalam daftar tidak dihitung terhadap total Anda. Misalnya, menghitung penumpang pesawat dalam barisan, di mana bayi duduk di pangkuan orang tua.
Tantangan : menulis sebuah program untuk membagi daftar item menjadi potongan-potongan. Setiap potongan (kecuali mungkin yang terakhir) adalah ukuran yang sama , di mana ukuran didefinisikan sebagai jumlah item yang melewati fungsi predikat.
Aturan :
- Program Anda harus ambil
- daftar barang
- ukuran bilangan bulat positif
- fungsi predikat (mengambil item, dan mengembalikan benar atau salah)
- Anda harus mengembalikan daftar input yang dipecah menjadi beberapa bagian
- Setiap chunk adalah daftar item
- Secara keseluruhan barang harus tetap dalam urutan yang sama, tanpa ada yang dibuang
- Jumlah item yang melewati predikat di setiap chunk (kecuali mungkin yang terakhir) harus sesuai dengan ukuran chunk input.
- item yang gagal predikat seharusnya tidak diperhitungkan dalam ukuran ini
- Item yang gagal predikatnya adalah
- masih termasuk dalam potongan output
- dialokasikan ke chunk paling awal, dalam hal chunk adalah "penuh" tetapi item berikutnya adalah yang gagal predikat
- jadi potongan terakhir mungkin tidak hanya terdiri dari barang-barang yang gagal dengan predikat
- Potongan terakhir mungkin berukuran kurang dari ukuran potongan karena semua item telah diperhitungkan.
Contoh tidak lengkap:
Contoh paling sederhana adalah untuk mempertimbangkan 1
s dan 0
s, di mana fungsi predikat berada x ==> x > 0
. Dalam hal ini, sum
setiap chunk harus cocok dengan ukuran chunk.
- item:,
[]
ukuran2
:, predikat:x > 0
-> salah satu[]
atau[[]]
- item:,
[0, 0, 0, 0, 0, 0]
ukuran2
:, predikat:x > 0
->[[0, 0, 0, 0, 0, 0]]
- item:,
[0, 1, 1, 0]
ukuran2
:, predikat:x > 0
->[[0, 1, 1, 0]]
- item:,
[0, 1, 1, 0, 1, 0, 0]
ukuran2
:, predikat:x > 0
->[[0, 1, 1, 0], [1, 0, 0]]
- item:,
[0, 1, 0, 0, 1, 0, 1, 1, 0]
ukuran2
:, predikat:x > 0
->[[0, 1, 0, 0, 1, 0], [1, 1, 0]]
Dan mari kita selesaikan dengan penumpang pesawat di mana bayi duduk di pangkuan orang tua . A
untuk orang dewasa, b
untuk bayi, baris pesawat adalah 3
kursi lebar, orang dewasa selalu terdaftar sebelum bayi mereka:
- item:,
[A, b, A, b, A, A, A, b, A, b, A, A, b]
ukuran3
:, predikat:x => x == A
->[[A, b, A, b, A], [A, A, b, A, b], [A, A, b]]