Problem Statement
Alice and Bob are playing a game of Nim with n+1 piles of stones. The piles are numbered from 0 to n. For each i between 0 and n-1, inclusive, pile i contains exactly a[i] normal stones. Pile n contains exactly one magic stone.
Normal rules of Nim apply to this game: Alice and Bob take alternating turns, with Alice going first. In each turn the current player chooses a non-empty pile (between 0 and n, inclusive) and removes an arbitrary positive number of stones from the pile. The player who is unable to make a valid move loses the game. In other words, the winner is the player who removes the very last stone.
Additionally, there is a rule for the magic stone. When a player chooses pile n and removes the magic stone, they have the option to reverse the victory condition. If they choose to do so, the player who is unable to make a valid move now wins the game. If they choose not to do it, the game continues with the original victory condition.
You are given the
Help Alice and Bob determine the winner of the game, assuming both of them play optimally. Return the name of the winner: either "Alice" or "Bob".
Definition
- Class:
- MagicNim
- Method:
- findWinner
- Parameters:
- int[]
- Returns:
- String
- Method signature:
- String findWinner(int[] a)
- (be sure your method is public)
Constraints
- a will contain between 1 and 10 elements, inclusive.
- Each element of a will be between 1 and 50, inclusive.
Examples
{1}
Returns: "Alice"
There are two piles. The first pile is a normal pile with one stone. The second pile contains the magic stone. In this case, Alice can take the magic stone and change the rules so that the last person who takes a stone loses. Now, Bob is forced to take the stone in the first pile, and since that is the last available stone, he loses.
{2}
Returns: "Bob"
There are two piles. The first pile is a normal pile with two stones. The second pile contains the magic stone. In this case, no matter what Alice does, she will lose.
{1,1,1,1}
Returns: "Alice"
{1,1,1,1,1}
Returns: "Alice"
{1,3}
Returns: "Bob"
{4,4,2}
Returns: "Alice"
{50,50,50,50,50,50,50,50,50,50}
Returns: "Alice"
{6,7}
Returns: "Bob"
{30}
Returns: "Alice"
{20,50,29,17,35,45,24,35}
Returns: "Alice"
{34,44}
Returns: "Alice"
{28,39,43,27,17,7,44,49,22}
Returns: "Alice"
{34,2,46,8}
Returns: "Alice"
{32,5,8}
Returns: "Alice"
{10,48,29,18,12,29,16}
Returns: "Alice"
{13,27}
Returns: "Alice"
{25,38,19,38}
Returns: "Alice"
{1,5,50}
Returns: "Alice"
{48,12,44}
Returns: "Alice"
{8,16,42,23,5,17,32,21}
Returns: "Alice"
{34,37}
Returns: "Alice"
{24,2,40,29,18}
Returns: "Alice"
{40,19,37,27}
Returns: "Alice"
{6,41,13,50,11,22,37,47,45,11}
Returns: "Alice"
{32,4,20,30,18}
Returns: "Alice"
{43,6,15,32,1,28}
Returns: "Alice"
{6,20,38,19,50,23,35,24}
Returns: "Alice"
{14,33,41,6,5,49,38,7}
Returns: "Alice"
{5,3,18,13}
Returns: "Alice"
{29,13,13,13,48,13,31}
Returns: "Alice"
{15,41,15}
Returns: "Alice"
{33,42,46,28,2}
Returns: "Alice"
{44,28,44,36,1,28,30,15}
Returns: "Alice"
{36,10,9,16,9}
Returns: "Alice"
{49,41,43,30,12,1,12}
Returns: "Alice"
{40,14,22,8,23,16,19,47}
Returns: "Alice"
{12,10,21,35,15,23,37}
Returns: "Alice"
{3,43,34,48,9,11,25,17,2}
Returns: "Alice"
{14,45,2,23,22,37,22,28}
Returns: "Alice"
{1,3,3}
Returns: "Alice"
{1,3,1,3,1,2,2}
Returns: "Alice"
{3,1,3,1}
Returns: "Alice"
{2,2,3,2,3,2,2}
Returns: "Bob"
{2,2,1,1,3,3,1,2,2}
Returns: "Alice"
{2,3,2,3,2,3}
Returns: "Alice"
{3,2,3,1,2,1,3,1,1,3}
Returns: "Alice"
{2,1,1,2,1}
Returns: "Alice"
{3,2,3,3}
Returns: "Alice"
{3,2,1,1,3,2,2,1,1,3}
Returns: "Alice"
{3,3,3,1}
Returns: "Bob"
{2,2,2,1}
Returns: "Alice"
{1,2,1,2,1}
Returns: "Alice"
{1,1,2,1,1,3,3,3,3}
Returns: "Bob"
{2,1,3,2,2,1,1,1}
Returns: "Alice"
{2,2,2,3,2,3,3}
Returns: "Alice"
{1,1,3,1}
Returns: "Bob"
{1,2,1,1,2,2,3,2,1}
Returns: "Alice"
{1,2,3,3,2,1,3,2}
Returns: "Alice"
{1,2,3,2,2,2,1,3}
Returns: "Alice"
{2,2}
Returns: "Alice"
{2,2,3,1,1,1,2,1,2,2}
Returns: "Alice"
{2,2,3,2,3,1}
Returns: "Alice"
{3,3,2}
Returns: "Bob"
{3,3,2,2,2,3}
Returns: "Alice"
{2,2,3,1,3,1,2,1,3,1}
Returns: "Alice"
{3,2,2,3,3,3,3,3,1}
Returns: "Alice"
{1,3,2,1,2,3,1,2}
Returns: "Alice"
{1,1,3,2,3,1,2,3}
Returns: "Bob"
{3,1,3,3,3,1,1,1}
Returns: "Alice"
{2,5,3,2,2,4,4,3,1}
Returns: "Alice"
{1,3,5,1,2}
Returns: "Alice"
{1,4}
Returns: "Alice"
{3,2,3,1,3,2}
Returns: "Bob"
{1,1,3}
Returns: "Alice"
{1,4,3,4,5}
Returns: "Alice"
{5,3,1,2,1,2,5,2,1,2}
Returns: "Alice"
{2,3,2,1,3,1,1}
Returns: "Alice"
{1,2,1,4,1,3,4}
Returns: "Alice"
{3,2,1}
Returns: "Alice"
{1,3,3,1,2,2,2,1,2}
Returns: "Alice"
{2,4,5}
Returns: "Alice"
{1,1,2,1}
Returns: "Alice"
{3,2,3,4,5,1,4}
Returns: "Alice"
{5,1,5,1,5}
Returns: "Alice"
{2,3,2,1,3,3}
Returns: "Bob"
{4,5,5}
Returns: "Alice"
{1,1,4}
Returns: "Alice"
{4,3,5,4,5,1}
Returns: "Alice"
{1,2,2,2,1,2,1,2,2}
Returns: "Alice"
{1,4,2,2,1,3,4,4}
Returns: "Alice"
{5,5,3,5,2,4}
Returns: "Alice"
{3,1,3,2,2,2,1,3,3,1}
Returns: "Alice"
{5,2,4,4,2,3,1,4}
Returns: "Alice"
{5,3,4,4,4,5,4}
Returns: "Alice"
{3,3,1,3,1,3,1,4,2,1}
Returns: "Alice"
{1,3,3,3,3,1,3,3,2}
Returns: "Bob"
{4,1,4,1,3,1,4}
Returns: "Alice"
{1,1,3,3,4,4,4}
Returns: "Alice"
{4,3,2,3,2,1,1,1}
Returns: "Alice"
{31,46,49,9,8}
Returns: "Bob"
{12,31,2,22,2,8,5,9}
Returns: "Bob"
{41,21,12,49}
Returns: "Bob"
{35,34,1,12,46,16,15,33,49,44}
Returns: "Bob"
{39,18,50}
Returns: "Alice"
{48,49}
Returns: "Bob"
{29,46,50}
Returns: "Bob"
{25,13,3,16,8,16,42,36,16}
Returns: "Bob"
{45,23,8,50,1}
Returns: "Bob"
{37,46,8,18,4,45,4}
Returns: "Alice"
{41,35,3,8}
Returns: "Bob"
{25,8,16}
Returns: "Bob"
{47,38,35,25,16,39,44,41}
Returns: "Bob"
{27,13,30,39,41,7}
Returns: "Bob"
{41,22,13,48,46,45}
Returns: "Bob"
{35,21,3,16,26,37,27}
Returns: "Bob"
{8,35,14,7,43,13,29,29,26,31}
Returns: "Bob"
{43,17,32,2,38,39,24}
Returns: "Bob"
{20,11,50,7,46,13,8}
Returns: "Bob"
{27,12,30,24,22,26,3,7,24}
Returns: "Bob"
{2,2,1}
Returns: "Alice"
{2,2,2}
Returns: "Bob"
{50, 50, 50, 50, 50, 50, 50, 50, 50, 50 }
Returns: "Alice"
{3 }
Returns: "Alice"
{4, 4, 2 }
Returns: "Alice"
{3, 1, 2, 2 }
Returns: "Bob"
{2, 2, 2 }
Returns: "Bob"
{2, 3 }
Returns: "Alice"
{10, 11 }
Returns: "Bob"