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 1s dan 0s, di mana fungsi predikat berada x ==> x > 0. Dalam hal ini, sumsetiap 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 . Auntuk orang dewasa, buntuk bayi, baris pesawat adalah 3kursi 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]]