--- id: 5900f4991000cf542c50ffab title: 'Завдання 301: Нім' challengeType: 5 forumTopicId: 301955 dashedName: problem-301-nim --- # --description-- Nim — це гра з купами каміння, де два гравці по черзі беруть певну кількість каменів із будь-якої купи до поки їх зовсім не залишиться. Розглянемо звичайну версію Nim на три купки каміння, яка працює наступним чином: - На початку гри є три купи каменів. - Коли настає черга певного гравця, він забирає додатне число каменів з будь-якої обраної купи. - Той, хто першим не зможе зробити хід (тому що не залишилося каменів), програє. Якщо ($n_1$, $n_2$, $n_3$) вказує на позицію Німа, що складається з купок розміром $n_1$, $n_2$ та $n_3$, тоді з'являється проста функція $X(n_1,n_2,n_3)$, яку можна спробувати знайти або спробувати вирахувати самостійно, яка повертає: - нуль, якщо гравець, з ідеальною стратегією, що збирається ходити, зрештою програє; чи - нуль, якщо гравець, з ідеальною стратегією, що збирається ходити, зрештою переможе. Наприклад, $X(1, 2, 3) = 0$ тому, що дії конкретного гравця неважливі, його опонент може відповісти ходом, відповідно до якого дві купи залишатимуться однакового розміру, адже цей гравець віддзеркалюватиме ходи до поки жодного каменя не залишитися, а тому він програє. Для унаочення: - поточний гравець ходить (1,2,1) - опонент ходить (1,0,1) - поточний гравець ходить (0,0,1) - хід суперника — (0,0,0), а отже він стає переможцем. Для скількох додатніх цілих чисел $n ≤ 2^{30}$ відповідає $X(n, 2n, 3n) = 0$? # --hints-- `nim()` має повернути `2178309`. ```js assert.strictEqual(nim(), 2178309); ``` # --seed-- ## --seed-contents-- ```js function nim() { return true; } nim(); ``` # --solutions-- ```js // solution required ```