forked from shuboc/LeetCode-2
-
Notifications
You must be signed in to change notification settings - Fork 1
/
chalkboard-xor-game.py
43 lines (39 loc) · 1.46 KB
/
chalkboard-xor-game.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# Time: O(n)
# Space: O(1)
# We are given non-negative integers nums[i] which are written on a chalkboard.
# Alice and Bob take turns erasing exactly one number from the chalkboard,
# with Alice starting first. If erasing a number causes the bitwise XOR of
# all the elements of the chalkboard to become 0, then that player loses.
# (Also, we'll say the bitwise XOR of one element is that element itself,
# and the bitwise XOR of no elements is 0.)
#
# Also, if any player starts their turn with the bitwise XOR of all the elements
# of the chalkboard equal to 0, then that player wins.
#
# Return True if and only if Alice wins the game, assuming both players play optimally.
#
# Example:
# Input: nums = [1, 1, 2]
# Output: false
# Explanation:
# Alice has two choices: erase 1 or erase 2.
# If she erases 1, the nums array becomes [1, 2]. The bitwise XOR of
# all the elements of the chalkboard is 1 XOR 2 = 3.
# Now Bob can remove any element he wants, because Alice will be the one
# to erase the last element and she will lose.
# If Alice erases 2 first, now nums becomes [1, 1]. The bitwise XOR of
# all the elements of the chalkboard is 1 XOR 1 = 0. Alice will lose.
#
# Notes:
# - 1 <= N <= 1000.
# - 0 <= nums[i] <= 2^16.
from operator import xor
from functools import reduce
class Solution(object):
def xorGame(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
return reduce(xor, nums) == 0 or \
len(nums) % 2 == 0