Similar Problems
Similar Problems not available
Chalkboard Xor Game - Leetcode Solution
Companies:
LeetCode: Chalkboard Xor Game Leetcode Solution
Difficulty: Hard
Topics: math bit-manipulation array
Introduction
In this problem, we have a game that is played on a chalkboard. Initially, the board contains an integer N. On each player's turn, they choose a number x from [1, N-1] and replace N with N xor x. The game continues until player 1 cannot make a move, i.e. there is no x in [1, N-1] that satisfies N xor x < N. The player who cannot make a move loses the game. We need to determine whether the first player to play can win the game or not.
Approach
We can solve this problem by observing some properties of the game. Firstly, we observe that if N is even, player 1 can always win the game. This is because if N is even, it can always be written as 2k for some integer k. In this case, player 1 can choose x as k, and N will be replaced by k xor (2k) = k^2 which is even.
Secondly, we observe that if N is odd, player 1 can only win the game if there are an odd number of odd integers in the range [1, N-1]. This is because if there are an odd number of odd integers, player 1 can always choose an odd integer x, and N will be replaced by N xor x, which is even. Then player 2 will have an even number, say e, to work with. In this case, player 2 can only choose an odd number, since e is even. This will give player 1 an odd number to work with, and the process continues until there are no odd integers left to choose.
However, if there are an even number of odd integers, player 2 can always respond with an even number, and player 1 will be stuck with an odd number. Therefore, in this case, player 2 wins.
Solution
We can implement the above approach in the following way:
- If N is even, return true, since player 1 can always win.
- Otherwise, count the number of odd integers in the range [1, N-1]. If this count is odd, return true, since player 1 can win, otherwise, return false, since player 2 can win.
We can count the number of odd integers in the range [1, N-1] by dividing N-1 by 2, since there are N-1 integers in the range [1, N-1], and every other one is odd. We can use the modulo operator to determine if N-1 is odd or even.
Here is the Python code for the above solution:
class Solution: def xorGame(self, nums: List[int]) -> bool: n = len(nums) xor_sum = 0 for i in nums: xor_sum ^= i return xor_sum == 0 or n % 2 == 0
Chalkboard Xor Game Solution Code
1