Problem Statement
Tiny Chessboard Nim is a two-player game played on a tiny 2x2 chessboard.
A position in this game consists of some number of grains of rice placed on each cell of the chessboard.
A valid move in this game consists of:
- choosing either one row or one column of the chessboard
- choosing a positive integer x
- removing exactly x grains of rice from each cell in the chosen row/column
Standard termination rule applies: whoever cannot make a valid move, loses the game.
You are given a position: the
+---+---+ | a | b | +---+---+ | c | d | +---+---+
Return the number of winning moves in the given position.
Definition
- Class:
- TinyChessboardNim
- Method:
- countWinningMoves
- Parameters:
- int[]
- Returns:
- int
- Method signature:
- int countWinningMoves(int[] rice)
- (be sure your method is public)
Constraints
- rice will contain exactly 4 elements.
- Each element of rice will be between 0 and 1,000,000, inclusive.
Examples
{4, 7, 7, 4}
Returns: 0
This is a losing position. The second player can use the symmetry to make sure they always have a valid move. E.g., if the first player chooses one row, the second player will choose the other row and the same x as the first player used.
{0, 42, 47, 0}
Returns: 0
Even though there is still some rice on the chessboard, this game is already over.
{1, 2, 3, 4}
Returns: 2
The two winning moves are: select the second row and x = 3, producing the state {1, 2, 0, 1} select the first column and x = 1, producing the state {0, 2, 2, 4} given after after position: move #1: move #2: +---+---+ +---+---+ +---+---+ | 1 | 2 | | 1 | 2 | | 0 | 2 | +---+---+ +---+---+ +---+---+ | 3 | 4 | | 0 | 1 | | 2 | 4 | +---+---+ +---+---+ +---+---+
{2, 0, 3, 4}
Returns: 1
{3, 4, 2, 2}
Returns: 3
{4, 3, 3, 4}
Returns: 0
{0, 3, 5, 0}
Returns: 0
{0, 0, 2, 3}
Returns: 1
{5, 4, 0, 2}
Returns: 1
{4, 3, 1, 1}
Returns: 1
{4, 4, 2, 3}
Returns: 2
{1, 0, 4, 2}
Returns: 1
{5, 5, 2, 4}
Returns: 2
{2, 4, 4, 1}
Returns: 2
{1, 5, 0, 1}
Returns: 0
{2, 0, 2, 4}
Returns: 2
{3, 4, 4, 2}
Returns: 2
{0, 5, 1, 5}
Returns: 1
{2, 1, 3, 5}
Returns: 2
{0, 3, 4, 2}
Returns: 2
{5, 2, 1, 4}
Returns: 2
{2, 2, 4, 4}
Returns: 3
{0, 3, 2, 4}
Returns: 1
{6, 4, 8, 3}
Returns: 2
{9, 1, 10, 3}
Returns: 1
{6, 7, 4, 9}
Returns: 2
{8, 2, 7, 0}
Returns: 1
{2, 8, 10, 1}
Returns: 2
{1, 4, 8, 9}
Returns: 1
{8, 7, 6, 5}
Returns: 2
{0, 9, 4, 10}
Returns: 1
{9, 8, 10, 7}
Returns: 2
{10, 5, 0, 9}
Returns: 2
{3, 3, 5, 6}
Returns: 3
{2, 2, 7, 3}
Returns: 2
{2, 1, 2, 9}
Returns: 2
{5, 8, 6, 1}
Returns: 2
{4, 7, 0, 10}
Returns: 1
{1, 6, 1, 5}
Returns: 1
{0, 4, 0, 2}
Returns: 1
{2, 8, 7, 3}
Returns: 2
{7, 8, 7, 9}
Returns: 2
{9, 0, 1, 2}
Returns: 2
{5, 18, 11, 2}
Returns: 2
{20, 8, 2, 13}
Returns: 2
{4, 1, 3, 10}
Returns: 2
{2, 18, 10, 8}
Returns: 2
{20, 18, 5, 18}
Returns: 2
{19, 9, 20, 19}
Returns: 2
{3, 19, 16, 11}
Returns: 2
{18, 2, 4, 14}
Returns: 2
{14, 12, 10, 19}
Returns: 2
{16, 20, 5, 3}
Returns: 1
{17, 4, 15, 15}
Returns: 2
{1, 14, 19, 17}
Returns: 1
{3, 10, 16, 17}
Returns: 1
{4, 8, 12, 11}
Returns: 3
{6, 15, 1, 19}
Returns: 1
{4, 15, 15, 9}
Returns: 2
{18, 1, 18, 7}
Returns: 1
{10, 2, 9, 18}
Returns: 2
{16, 13, 3, 4}
Returns: 1
{17, 19, 20, 16}
Returns: 2
{275, 381, 404, 185}
Returns: 2
{296, 159, 210, 394}
Returns: 2
{349, 458, 459, 104}
Returns: 2
{374, 323, 46, 500}
Returns: 2
{480, 52, 262, 414}
Returns: 2
{156, 207, 488, 170}
Returns: 2
{275, 428, 184, 435}
Returns: 3
{55, 417, 477, 47}
Returns: 2
{437, 318, 380, 218}
Returns: 2
{184, 25, 179, 298}
Returns: 2
{442, 28, 473, 200}
Returns: 1
{324, 413, 137, 130}
Returns: 1
{107, 148, 107, 238}
Returns: 2
{435, 338, 420, 418}
Returns: 2
{489, 153, 227, 478}
Returns: 2
{397, 225, 162, 442}
Returns: 2
{345, 28, 79, 297}
Returns: 2
{245, 0, 14, 216}
Returns: 2
{443, 234, 266, 224}
Returns: 3
{314, 417, 440, 131}
Returns: 2
{1, 58, 1, 41}
Returns: 1
{40, 5, 14, 106}
Returns: 2
{12, 4, 8, 21}
Returns: 2
{1, 3, 4, 15}
Returns: 2
{2, 1, 17, 160}
Returns: 1
{6, 1, 165, 81}
Returns: 1
{6, 28, 117, 52}
Returns: 1
{24, 3, 17, 24}
Returns: 2
{5, 3, 1, 5}
Returns: 2
{60, 1, 59, 1}
Returns: 1
{17, 63, 100, 50}
Returns: 2
{53, 1, 108, 362}
Returns: 1
{2, 14, 10, 78}
Returns: 1
{1, 15, 308, 2}
Returns: 2
{31, 172, 14, 23}
Returns: 2
{6, 26, 19, 6}
Returns: 0
{186, 1, 36, 22}
Returns: 1
{3, 1, 95, 5}
Returns: 1
{8, 3, 348, 2}
Returns: 1
{2, 96, 3, 3}
Returns: 2
{24, 24, 392, 24}
Returns: 0
{103, 440, 32, 103}
Returns: 0
{21, 21, 5, 2}
Returns: 1
{223, 223, 431, 285}
Returns: 3
{4, 4, 158, 2}
Returns: 2
{107, 218, 431, 107}
Returns: 0
{59, 78, 59, 78}
Returns: 3
{447, 447, 492, 492}
Returns: 3
{221, 6, 3, 6}
Returns: 2
{150, 12, 63, 150}
Returns: 2
{49, 49, 1, 1}
Returns: 1
{437, 87, 78, 87}
Returns: 2
{200, 2, 2, 2}
Returns: 0
{456, 374, 162, 374}
Returns: 2
{8, 8, 211, 8}
Returns: 0
{430, 486, 486, 35}
Returns: 2
{8, 282, 282, 379}
Returns: 0
{210, 210, 89, 210}
Returns: 2
{1, 1, 1, 1}
Returns: 0
{216, 247, 247, 271}
Returns: 2
{14, 48, 48, 48}
Returns: 2
{77, 347, 77, 77}
Returns: 0
{13, 1, 1, 149}
Returns: 0
{214, 43, 214, 214}
Returns: 2
{7, 7, 241, 7}
Returns: 0
{494, 122, 494, 494}
Returns: 2
{63, 4, 38, 63}
Returns: 2
{236, 34, 236, 467}
Returns: 2
{1, 2, 12, 1}
Returns: 0
{388, 263, 24, 388}
Returns: 2
{2, 107, 2, 107}
Returns: 1
{372, 212, 212, 282}
Returns: 0
{30, 30, 30, 60}
Returns: 0
{376, 9, 460, 460}
Returns: 1
{452, 452, 191, 11}
Returns: 1
{296, 169, 135, 135}
Returns: 2
{59, 59, 59, 31}
Returns: 2
{114, 114, 218, 110}
Returns: 2
{1, 9, 9, 1}
Returns: 0
{329, 41, 41, 41}
Returns: 0
{368937, 65562, 451082, 580533}
Returns: 1
{475708, 598517, 360154, 269932}
Returns: 3
{537336, 405334, 411477, 645462}
Returns: 2
{42895, 833704, 438863, 690620}
Returns: 1
{24809, 107432, 656, 276621}
Returns: 1
{988439, 830728, 504944, 759019}
Returns: 2
{573243, 9579, 961967, 855335}
Returns: 1
{942395, 330907, 595138, 448475}
Returns: 2
{241221, 249290, 548687, 538918}
Returns: 1
{376524, 463702, 253806, 34879}
Returns: 1
{894097, 796171, 975774, 960501}
Returns: 1
{785310, 915084, 779261, 892442}
Returns: 1
{901519, 999454, 702751, 725105}
Returns: 2
{982284, 618496, 665797, 775074}
Returns: 2
{651352, 790231, 903223, 801105}
Returns: 2
{866498, 883182, 732558, 650907}
Returns: 2
{940162, 718991, 966586, 775562}
Returns: 3
{714585, 846955, 990164, 657748}
Returns: 2
{818449, 917013, 785099, 953818}
Returns: 2
{750113, 725295, 891119, 737148}
Returns: 1
{94494, 85092, 1193, 24}
Returns: 1
{306, 432, 247443, 1}
Returns: 2
{71002, 348, 133, 51}
Returns: 1
{12, 42677, 6, 19}
Returns: 1
{13, 93141, 371828, 1003}
Returns: 2
{1, 102, 171, 31513}
Returns: 1
{3677, 1, 58, 129166}
Returns: 2
{355083, 1, 1240, 44775}
Returns: 2
{41, 40, 5, 6770}
Returns: 2
{14, 106, 4312, 12}
Returns: 2
{4, 110712, 7761, 237379}
Returns: 1
{8, 21, 11918, 1}
Returns: 2
{3, 4, 4831, 15}
Returns: 1
{3259, 2, 1, 896}
Returns: 2
{84877, 17, 160, 1322}
Returns: 2
{6, 990, 1, 784}
Returns: 1
{11085, 165, 81, 393708}
Returns: 2
{155889, 371196, 6, 28}
Returns: 1
{117, 755318, 11853, 854970}
Returns: 1
{52, 921689, 73317, 24}
Returns: 2
{3, 35488, 3, 3}
Returns: 0
{849350, 657877, 657877, 849350}
Returns: 0
{115678, 346592, 115678, 15952}
Returns: 2
{660968, 579746, 287144, 660968}
Returns: 2
{35776, 1512, 35776, 214566}
Returns: 2
{798114, 798114, 266584, 822612}
Returns: 2
{62121, 156928, 60, 62121}
Returns: 0
{324075, 960402, 197652, 960402}
Returns: 1
{258713, 7770, 17808, 17808}
Returns: 2
{581147, 317468, 581147, 317468}
Returns: 3
{59, 1, 1, 17}
Returns: 0
{363083, 363083, 523430, 523430}
Returns: 1
{19967, 257446, 183925, 257446}
Returns: 1
{232578, 230001, 232578, 840672}
Returns: 2
{9933, 8187, 53, 8187}
Returns: 2
{37282, 806924, 426453, 37282}
Returns: 0
{16240, 16240, 1, 9057}
Returns: 1
{930373, 140885, 376917, 376917}
Returns: 2
{108, 362, 108, 108}
Returns: 0
{736575, 521268, 521268, 737000}
Returns: 0
{342, 342, 1621, 1900}
Returns: 1
{940585, 559561, 940585, 807054}
Returns: 1
{2552, 156908, 2552, 2552}
Returns: 0
{725888, 446546, 446546, 672692}
Returns: 0
{5983, 4405, 4405, 776}
Returns: 0
{957595, 903388, 903388, 957595}
Returns: 0
{308, 308, 2, 172}
Returns: 1
{166472, 166472, 439499, 846742}
Returns: 1
{56144, 6, 4293, 4293}
Returns: 2
{79526, 79526, 651514, 358516}
Returns: 1
{1000000, 575757, 757575, 333333 }
Returns: 2
{4, 11, 11, 3 }
Returns: 2