Фон
Проблема дванадцяти монет - це класична головоломка, яка зазвичай використовується на співбесідах. Вперше головоломка з’явилася в 1945 році і була поставлена моїм дідом мого діда, коли він попросив одружитися з моєю матір’ю! У головоломці дванадцять монет, одна з яких або важча, або легша за інші (ви не знаєте, яка). Проблема полягає у використанні балансової шкали тричі для визначення унікальної монети. У деяких варіаціях також слід визначити, чи монета важча, чи легша.
Завдання тут полягає у вирішенні загальної проблеми із залученням російських монет, використовуючи найменше зважування, можливе в гіршому випадку. Не слід визначати, чи монета важча, чи легша, лише яка вона. Крім того, у вас немає доступу до будь-яких додаткових монет за межами заданого набору (що, що цікаво, має значення).
Виявляється, k зважування достатньо для монет до (3 ^ k-1) / 2 (тому 4 зважування в цьому варіанті насправді можуть обробляти 13 монет). Крім того, (і що дивно), можна (але не вимагати тут) повний набір зважувань заздалегідь, а не майбутні зважування залежать від минулих результатів. Описи двох можливих рішень див. У цій роботі та відповіді Quora .
Завдання
Напишіть функцію або програму, взявши ціле число n як вхід через STDIN, аргумент командного рядка або аргумент функції, який вирішує проблему для n монет, використовуючи найменші зважування, можливі в гіршому випадку. Програма повинна:
- Роздрукуйте зважування до STDOUT у форматі,
1,2,3-4,5,6
щоб вказати списки монет на кожній стороні шкали. Будь-які монети, які не зважуються, не слід згадувати. Монети неявно пронумеровані від 1 до n і не повинні друкуватися в цифровому порядку (так2,1-3,4
само, як і в1,2-3,4
). - Після кожного зважування програма повинна чекати на вхід через STDIN, який повинен бути
<
,=
або із>
зазначенням того, що ліва частина шкали світліша, однакова чи важча за праву. - Після останнього результату зважування програма повинна надрукувати або повернути номер унікальної монети.
- Програмі не потрібно обробляти непослідовні введення результатів від користувача.
- Програмі не потрібно обробляти n менше 3.
Приклади виходів
>> 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
Оцінка балів
Найкоротший код виграє. Діють стандартні правила.