Мені в інтерв'ю було надано таку проблему (яку я вже не вдалося вирішити, не намагаючись обдурити свій шлях минулого): Гра починається з натурального числа . (Наприклад A 0 = 1234. ) Це число перетворюється на двійкове представлення, а N - кількість бітів, встановлене на 1 . (Наприклад A 0 = b 100 1101 0010 , N = 5. )
Гравець 1 вибирає число менше A 0 . B 0 повинен мати лише один біт, встановлений на 1. (Наприклад, B 0 = b 10 0000 0000 = 512. ) Нехай A 1 = A 0 - B 0 . (Наприклад A 1 = 1234 - 512 = 722 = b 10 1101 0010. ) Переміщення дійсне, якщо B 0задовольняє попередні обмеження, і якщо кількість бітів в по - , як і раніше дорівнює N .
Гравець 2 продовжує з , вибираючи дійсний В 1 , потім гравець 1 продовжує з А 2 і так далі. Гравець програє, якщо у нього не залишилося дійсних кроків.
Припускаючи, що обидва гравці грають оптимально, визначте гравця-переможця, використовуючи досить ефективний метод. (У моєму визначенні проблеми обмеження в цьому полягали в тому, що програма повинна мати можливість надати рішення для кількох мільйонів вхідних чисел, які вписуються в підписане 32-бітове ціле число.) Тобто рішення не повинно бути повністю аналітичний.
Моя особиста зацікавленість тут полягає у з'ясуванні, чи сподівання мене знайти та застосувати правильне рішення, без зворотного зв’язку щодо правильності за 120 хвилин, які мені дали, було розумним; або якщо це було одне з таких питань "давайте подивимось, чи бачили цю головоломку раніше".
Я не зміг, тому що я вирішив реалізувати те, що здавалося розумною стратегією, і це дало мені правильні результати для кількох тестових випадків, від яких мені відмовились, витрачала занадто багато часу, роблячи цей пробіг швидко, і в кінці передала неправильно повний вихід, як мій час закінчився.
З ретроспективою я мав би реалізувати грубі сили пошуку та запам'ятовували часткові рішення для невеликих стартових чисел, але задній огляд завжди 20/20. Мені цікаво, однак, якщо існує інший загальний підхід, який ухилявся від мене як флункі.