Masalah
Bayangkan 7 ember berbaris berturut-turut. Setiap ember dapat memuat paling banyak 2 apel. Ada 13 apel berlabel 1 hingga 13. Mereka didistribusikan di antara 7 ember. Sebagai contoh,
{5,4}, {8,10}, {2,9}, {13,3}, {11,7}, {6,0}, {12,1}
Di mana 0 mewakili ruang kosong. Urutan di mana apel muncul dalam setiap ember tidak relevan (misalnya {5,4} setara dengan {4,5}).
Anda dapat memindahkan apel apa pun dari satu ember ke ember yang berdekatan, asalkan ada ruang di ember tujuan untuk apel lain. Setiap gerakan dijelaskan oleh jumlah apel yang ingin Anda pindahkan (yang tidak ambigu karena hanya ada satu ruang kosong). Misalnya, menerapkan langkah
7
dengan pengaturan di atas akan menghasilkan
{5,4}, {8,10}, {2,9}, {13,3}, {11,0}, {6,7}, {12,1}
Objektif
Tulis program yang membaca pengaturan dari STDIN dan mengurutkannya ke dalam pengaturan berikut
{1,2}, {3,4}, {5,6}, {7,8}, {9,10}, {11,12}, {13,0}
menggunakan gerakan sesedikit mungkin. Sekali lagi, urutan di mana apel muncul dalam setiap ember tidak relevan. Urutan ember tidak masalah. Seharusnya menampilkan gerakan yang digunakan untuk mengurutkan setiap pengaturan yang dipisahkan oleh koma. Sebagai contoh,
13, 7, 6, ...
Skor Anda sama dengan jumlah jumlah gerakan yang diperlukan untuk menyelesaikan pengaturan berikut:
{8, 2}, {11, 13}, {3, 12}, {6, 10}, {4, 0}, {1, 7}, {9, 5}
{3, 1}, {6, 9}, {7, 8}, {2, 11}, {10, 5}, {13, 4}, {12, 0}
{0, 2}, {4, 13}, {1, 10}, {11, 6}, {7, 12}, {8, 5}, {9, 3}
{6, 9}, {2, 10}, {7, 4}, {1, 8}, {12, 0}, {5, 11}, {3, 13}
{4, 5}, {10, 3}, {6, 9}, {8, 13}, {0, 2}, {1, 7}, {12, 11}
{4, 2}, {10, 5}, {0, 7}, {9, 8}, {3, 13}, {1, 11}, {6, 12}
{9, 3}, {5, 4}, {0, 6}, {1, 7}, {12, 11}, {10, 2}, {8, 13}
{3, 4}, {10, 9}, {8, 12}, {2, 6}, {5, 1}, {11, 13}, {7, 0}
{10, 0}, {12, 2}, {3, 5}, {9, 11}, {1, 13}, {4, 8}, {7, 6}
{6, 1}, {3, 5}, {11, 12}, {2, 10}, {7, 4}, {13, 8}, {0, 9}
Ya, masing-masing pengaturan ini memiliki solusi.
Aturan
- Solusi Anda harus dijalankan dalam waktu polinomial dalam jumlah ember per gerakan. Intinya adalah menggunakan heuristik pintar.
- Semua algoritma harus deterministik.
- Jika terjadi seri, hitungan byte terpendek akan menang.