Misi Anda adalah untuk membangun algoritma (program atau fungsi) yang dapat mengoptimalkan pengemasan buah dari ban berjalan ke dalam tas untuk dikirim ke pengecer, mengoptimalkan untuk sejumlah besar tas.
Setiap kantung harus memiliki berat setidaknya jumlah tertentu, tetapi setiap kelebihannya akan hilang karena bobot tersebut dapat digunakan untuk mengisi kantung lain. Mesin pengepakan Anda selalu melihat n
buah - buahan dari antrian dan hanya dapat memilih untuk menambahkan n
buah - buahan ini ke tas (tunggal) yang sedang diproses. Itu tidak bisa melihat melampaui n
elemen pertama dalam antrian. Program selalu tahu persis berapa banyak berat yang ada di dalam tas.
Cara lain untuk memvisualisasikan ini adalah memiliki ban berjalan dengan area pemuatan ukuran n
di ujung, dari mana buah harus diambil sebelum buah baru tiba. Buah sisa dan kantong yang tidak penuh di bagian akhir akan dibuang.
Input
- Daftar / array bobot buah dalam antrian (bilangan bulat positif)
- Berat total minimum untuk tas (bilangan bulat positif)
- Lookahead
n
(bilangan bulat positif)
Keluaran
Algoritme Anda harus mengembalikan untuk semua kantong bobot buah-buahan di dalamnya, dengan cara apa pun yang nyaman bagi Anda dan bahasa Anda, baik itu stdin atau nilai balik atau sesuatu yang lain. Anda harus dapat menjalankan program dan menghitung skor Anda dalam satu menit di komputer Anda.
Contoh
Total weight 1000, lookahead of 3 and fruit queue:
[171,163,172,196,156,175,162,176,155,182,189,142,161,160,152,162,174,172,191,185]
One possible output (indented to show how the lookahead affects the bagging):
[171,163,172, 156,175, 176]
[162, 155,182,189, 161,160]
[152,162,174,172,191,185]
Mencetak gol
Algoritme Anda akan diuji pada enam kali berjalan pada batch 10.000 jeruk yang telah saya siapkan untuk Anda, pada lookaheads mulai dari 2 hingga 7, termasuk di kedua ujungnya. Anda harus mengemasnya ke dalam tas dengan berat setidaknya 1000 unit. Jeruk biasanya didistribusikan dengan berat rata-rata 170 dan standar deviasi 13, jika itu bisa membantu.
Skor Anda akan menjadi jumlah jumlah tas dari enam seri. Skor tertinggi menang. Celah standar tidak diijinkan.
Contoh implementasi sederhana dan test suite boilerplate di Haskell