Latar Belakang
Masalah dua belas koin adalah puzzle keseimbangan klasik yang biasa digunakan dalam wawancara kerja. Teka-teki pertama kali muncul pada tahun 1945 dan diajukan kepada ayah saya oleh kakek saya ketika dia meminta untuk menikahi ibu saya! Dalam puzzle ada dua belas koin, yang salah satu lebih berat atau lebih ringan dari yang lain (Anda tidak tahu yang mana). Masalahnya adalah menggunakan timbangan timbangan tiga kali untuk menentukan koin unik. Dalam beberapa variasi, perlu juga untuk mengidentifikasi apakah koin lebih berat atau lebih ringan.
Tugas di sini melibatkan penyelesaian masalah umum yang melibatkan n koin, menggunakan penimbangan sesedikit mungkin dalam kasus terburuk. Tidak perlu mengidentifikasi apakah koin itu lebih berat atau lebih ringan, hanya koin yang mana. Selain itu, Anda tidak memiliki akses ke koin tambahan apa pun di luar set yang diberikan (yang, anehnya, membuat perbedaan).
Ternyata bobot k cukup untuk (3 ^ k-1) / 2 koin (jadi 4 bobot dalam variasi ini benar-benar dapat menangani 13 koin). Selanjutnya (dan secara mengejutkan), dimungkinkan (tetapi tidak diharuskan di sini) untuk memilih set lengkap penimbangan di muka, daripada memiliki penimbangan di masa depan tergantung pada hasil masa lalu. Untuk deskripsi dari dua kemungkinan solusi, lihat makalah ini dan jawaban Quora ini .
Tugas
Tulis fungsi atau program, ambil bilangan bulat n sebagai input melalui STDIN, argumen baris perintah atau argumen fungsi, yang menyelesaikan masalah untuk n koin menggunakan penimbangan sesedikit mungkin dalam kasus terburuk. Program harus:
- Cetak timbangan ke STDOUT dalam format
1,2,3-4,5,6
untuk menunjukkan daftar koin di setiap sisi skala. Koin apa pun yang tidak ditimbang tidak boleh disebutkan. Koin-koin tersebut secara implisit diberi nomor dari 1 hingga n dan tidak perlu dicetak dalam urutan numerik (demikian2,1-3,4
juga dengan1,2-3,4
). - Setelah masing-masing menimbang program harus menunggu pada input melalui STDIN, yang seharusnya
<
,=
atau>
, menunjukkan apakah sisi kiri skala lebih ringan, sama, atau lebih berat daripada sisi kanan. - Setelah hasil penimbangan terakhir, program harus mencetak atau mengembalikan jumlah koin unik.
- Program tidak perlu menangani input hasil yang tidak konsisten dari pengguna.
- Program tidak perlu menangani n kurang dari 3.
Keluaran contoh
>> 3
1-2
>> =
1-3
>> <
3
# using Quora algorithm
>> 13
1,2,3,4-5,6,7,8
>> <
1,2,5-3,4,6
>> >
3-4
>> <
3
# using paper algorithm
>> 13
1,2,3,4-5,6,7,8
>> <
2,6,7,9-3,8,10,11
>> >
6,8,10,12-4,5,7,11
>> =
3
Mencetak gol
Kode terpendek menang. Aturan standar berlaku.