Statistics

Problem Statement for "TinyChessboardNim"

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:

  1. choosing either one row or one column of the chessboard
  2. choosing a positive integer x
  3. 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 int[] rice that gives the number of grains of rice on each cell of the chessboard in row major order. That is, if rice = {a, b, c, d}, the board looks as follows:

+---+---+
| 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

  1. {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.

  2. {0, 42, 47, 0}

    Returns: 0

    Even though there is still some rice on the chessboard, this game is already over.

  3. {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 | +---+---+ +---+---+ +---+---+

  4. {2, 0, 3, 4}

    Returns: 1

  5. {3, 4, 2, 2}

    Returns: 3

  6. {4, 3, 3, 4}

    Returns: 0

  7. {0, 3, 5, 0}

    Returns: 0

  8. {0, 0, 2, 3}

    Returns: 1

  9. {5, 4, 0, 2}

    Returns: 1

  10. {4, 3, 1, 1}

    Returns: 1

  11. {4, 4, 2, 3}

    Returns: 2

  12. {1, 0, 4, 2}

    Returns: 1

  13. {5, 5, 2, 4}

    Returns: 2

  14. {2, 4, 4, 1}

    Returns: 2

  15. {1, 5, 0, 1}

    Returns: 0

  16. {2, 0, 2, 4}

    Returns: 2

  17. {3, 4, 4, 2}

    Returns: 2

  18. {0, 5, 1, 5}

    Returns: 1

  19. {2, 1, 3, 5}

    Returns: 2

  20. {0, 3, 4, 2}

    Returns: 2

  21. {5, 2, 1, 4}

    Returns: 2

  22. {2, 2, 4, 4}

    Returns: 3

  23. {0, 3, 2, 4}

    Returns: 1

  24. {6, 4, 8, 3}

    Returns: 2

  25. {9, 1, 10, 3}

    Returns: 1

  26. {6, 7, 4, 9}

    Returns: 2

  27. {8, 2, 7, 0}

    Returns: 1

  28. {2, 8, 10, 1}

    Returns: 2

  29. {1, 4, 8, 9}

    Returns: 1

  30. {8, 7, 6, 5}

    Returns: 2

  31. {0, 9, 4, 10}

    Returns: 1

  32. {9, 8, 10, 7}

    Returns: 2

  33. {10, 5, 0, 9}

    Returns: 2

  34. {3, 3, 5, 6}

    Returns: 3

  35. {2, 2, 7, 3}

    Returns: 2

  36. {2, 1, 2, 9}

    Returns: 2

  37. {5, 8, 6, 1}

    Returns: 2

  38. {4, 7, 0, 10}

    Returns: 1

  39. {1, 6, 1, 5}

    Returns: 1

  40. {0, 4, 0, 2}

    Returns: 1

  41. {2, 8, 7, 3}

    Returns: 2

  42. {7, 8, 7, 9}

    Returns: 2

  43. {9, 0, 1, 2}

    Returns: 2

  44. {5, 18, 11, 2}

    Returns: 2

  45. {20, 8, 2, 13}

    Returns: 2

  46. {4, 1, 3, 10}

    Returns: 2

  47. {2, 18, 10, 8}

    Returns: 2

  48. {20, 18, 5, 18}

    Returns: 2

  49. {19, 9, 20, 19}

    Returns: 2

  50. {3, 19, 16, 11}

    Returns: 2

  51. {18, 2, 4, 14}

    Returns: 2

  52. {14, 12, 10, 19}

    Returns: 2

  53. {16, 20, 5, 3}

    Returns: 1

  54. {17, 4, 15, 15}

    Returns: 2

  55. {1, 14, 19, 17}

    Returns: 1

  56. {3, 10, 16, 17}

    Returns: 1

  57. {4, 8, 12, 11}

    Returns: 3

  58. {6, 15, 1, 19}

    Returns: 1

  59. {4, 15, 15, 9}

    Returns: 2

  60. {18, 1, 18, 7}

    Returns: 1

  61. {10, 2, 9, 18}

    Returns: 2

  62. {16, 13, 3, 4}

    Returns: 1

  63. {17, 19, 20, 16}

    Returns: 2

  64. {275, 381, 404, 185}

    Returns: 2

  65. {296, 159, 210, 394}

    Returns: 2

  66. {349, 458, 459, 104}

    Returns: 2

  67. {374, 323, 46, 500}

    Returns: 2

  68. {480, 52, 262, 414}

    Returns: 2

  69. {156, 207, 488, 170}

    Returns: 2

  70. {275, 428, 184, 435}

    Returns: 3

  71. {55, 417, 477, 47}

    Returns: 2

  72. {437, 318, 380, 218}

    Returns: 2

  73. {184, 25, 179, 298}

    Returns: 2

  74. {442, 28, 473, 200}

    Returns: 1

  75. {324, 413, 137, 130}

    Returns: 1

  76. {107, 148, 107, 238}

    Returns: 2

  77. {435, 338, 420, 418}

    Returns: 2

  78. {489, 153, 227, 478}

    Returns: 2

  79. {397, 225, 162, 442}

    Returns: 2

  80. {345, 28, 79, 297}

    Returns: 2

  81. {245, 0, 14, 216}

    Returns: 2

  82. {443, 234, 266, 224}

    Returns: 3

  83. {314, 417, 440, 131}

    Returns: 2

  84. {1, 58, 1, 41}

    Returns: 1

  85. {40, 5, 14, 106}

    Returns: 2

  86. {12, 4, 8, 21}

    Returns: 2

  87. {1, 3, 4, 15}

    Returns: 2

  88. {2, 1, 17, 160}

    Returns: 1

  89. {6, 1, 165, 81}

    Returns: 1

  90. {6, 28, 117, 52}

    Returns: 1

  91. {24, 3, 17, 24}

    Returns: 2

  92. {5, 3, 1, 5}

    Returns: 2

  93. {60, 1, 59, 1}

    Returns: 1

  94. {17, 63, 100, 50}

    Returns: 2

  95. {53, 1, 108, 362}

    Returns: 1

  96. {2, 14, 10, 78}

    Returns: 1

  97. {1, 15, 308, 2}

    Returns: 2

  98. {31, 172, 14, 23}

    Returns: 2

  99. {6, 26, 19, 6}

    Returns: 0

  100. {186, 1, 36, 22}

    Returns: 1

  101. {3, 1, 95, 5}

    Returns: 1

  102. {8, 3, 348, 2}

    Returns: 1

  103. {2, 96, 3, 3}

    Returns: 2

  104. {24, 24, 392, 24}

    Returns: 0

  105. {103, 440, 32, 103}

    Returns: 0

  106. {21, 21, 5, 2}

    Returns: 1

  107. {223, 223, 431, 285}

    Returns: 3

  108. {4, 4, 158, 2}

    Returns: 2

  109. {107, 218, 431, 107}

    Returns: 0

  110. {59, 78, 59, 78}

    Returns: 3

  111. {447, 447, 492, 492}

    Returns: 3

  112. {221, 6, 3, 6}

    Returns: 2

  113. {150, 12, 63, 150}

    Returns: 2

  114. {49, 49, 1, 1}

    Returns: 1

  115. {437, 87, 78, 87}

    Returns: 2

  116. {200, 2, 2, 2}

    Returns: 0

  117. {456, 374, 162, 374}

    Returns: 2

  118. {8, 8, 211, 8}

    Returns: 0

  119. {430, 486, 486, 35}

    Returns: 2

  120. {8, 282, 282, 379}

    Returns: 0

  121. {210, 210, 89, 210}

    Returns: 2

  122. {1, 1, 1, 1}

    Returns: 0

  123. {216, 247, 247, 271}

    Returns: 2

  124. {14, 48, 48, 48}

    Returns: 2

  125. {77, 347, 77, 77}

    Returns: 0

  126. {13, 1, 1, 149}

    Returns: 0

  127. {214, 43, 214, 214}

    Returns: 2

  128. {7, 7, 241, 7}

    Returns: 0

  129. {494, 122, 494, 494}

    Returns: 2

  130. {63, 4, 38, 63}

    Returns: 2

  131. {236, 34, 236, 467}

    Returns: 2

  132. {1, 2, 12, 1}

    Returns: 0

  133. {388, 263, 24, 388}

    Returns: 2

  134. {2, 107, 2, 107}

    Returns: 1

  135. {372, 212, 212, 282}

    Returns: 0

  136. {30, 30, 30, 60}

    Returns: 0

  137. {376, 9, 460, 460}

    Returns: 1

  138. {452, 452, 191, 11}

    Returns: 1

  139. {296, 169, 135, 135}

    Returns: 2

  140. {59, 59, 59, 31}

    Returns: 2

  141. {114, 114, 218, 110}

    Returns: 2

  142. {1, 9, 9, 1}

    Returns: 0

  143. {329, 41, 41, 41}

    Returns: 0

  144. {368937, 65562, 451082, 580533}

    Returns: 1

  145. {475708, 598517, 360154, 269932}

    Returns: 3

  146. {537336, 405334, 411477, 645462}

    Returns: 2

  147. {42895, 833704, 438863, 690620}

    Returns: 1

  148. {24809, 107432, 656, 276621}

    Returns: 1

  149. {988439, 830728, 504944, 759019}

    Returns: 2

  150. {573243, 9579, 961967, 855335}

    Returns: 1

  151. {942395, 330907, 595138, 448475}

    Returns: 2

  152. {241221, 249290, 548687, 538918}

    Returns: 1

  153. {376524, 463702, 253806, 34879}

    Returns: 1

  154. {894097, 796171, 975774, 960501}

    Returns: 1

  155. {785310, 915084, 779261, 892442}

    Returns: 1

  156. {901519, 999454, 702751, 725105}

    Returns: 2

  157. {982284, 618496, 665797, 775074}

    Returns: 2

  158. {651352, 790231, 903223, 801105}

    Returns: 2

  159. {866498, 883182, 732558, 650907}

    Returns: 2

  160. {940162, 718991, 966586, 775562}

    Returns: 3

  161. {714585, 846955, 990164, 657748}

    Returns: 2

  162. {818449, 917013, 785099, 953818}

    Returns: 2

  163. {750113, 725295, 891119, 737148}

    Returns: 1

  164. {94494, 85092, 1193, 24}

    Returns: 1

  165. {306, 432, 247443, 1}

    Returns: 2

  166. {71002, 348, 133, 51}

    Returns: 1

  167. {12, 42677, 6, 19}

    Returns: 1

  168. {13, 93141, 371828, 1003}

    Returns: 2

  169. {1, 102, 171, 31513}

    Returns: 1

  170. {3677, 1, 58, 129166}

    Returns: 2

  171. {355083, 1, 1240, 44775}

    Returns: 2

  172. {41, 40, 5, 6770}

    Returns: 2

  173. {14, 106, 4312, 12}

    Returns: 2

  174. {4, 110712, 7761, 237379}

    Returns: 1

  175. {8, 21, 11918, 1}

    Returns: 2

  176. {3, 4, 4831, 15}

    Returns: 1

  177. {3259, 2, 1, 896}

    Returns: 2

  178. {84877, 17, 160, 1322}

    Returns: 2

  179. {6, 990, 1, 784}

    Returns: 1

  180. {11085, 165, 81, 393708}

    Returns: 2

  181. {155889, 371196, 6, 28}

    Returns: 1

  182. {117, 755318, 11853, 854970}

    Returns: 1

  183. {52, 921689, 73317, 24}

    Returns: 2

  184. {3, 35488, 3, 3}

    Returns: 0

  185. {849350, 657877, 657877, 849350}

    Returns: 0

  186. {115678, 346592, 115678, 15952}

    Returns: 2

  187. {660968, 579746, 287144, 660968}

    Returns: 2

  188. {35776, 1512, 35776, 214566}

    Returns: 2

  189. {798114, 798114, 266584, 822612}

    Returns: 2

  190. {62121, 156928, 60, 62121}

    Returns: 0

  191. {324075, 960402, 197652, 960402}

    Returns: 1

  192. {258713, 7770, 17808, 17808}

    Returns: 2

  193. {581147, 317468, 581147, 317468}

    Returns: 3

  194. {59, 1, 1, 17}

    Returns: 0

  195. {363083, 363083, 523430, 523430}

    Returns: 1

  196. {19967, 257446, 183925, 257446}

    Returns: 1

  197. {232578, 230001, 232578, 840672}

    Returns: 2

  198. {9933, 8187, 53, 8187}

    Returns: 2

  199. {37282, 806924, 426453, 37282}

    Returns: 0

  200. {16240, 16240, 1, 9057}

    Returns: 1

  201. {930373, 140885, 376917, 376917}

    Returns: 2

  202. {108, 362, 108, 108}

    Returns: 0

  203. {736575, 521268, 521268, 737000}

    Returns: 0

  204. {342, 342, 1621, 1900}

    Returns: 1

  205. {940585, 559561, 940585, 807054}

    Returns: 1

  206. {2552, 156908, 2552, 2552}

    Returns: 0

  207. {725888, 446546, 446546, 672692}

    Returns: 0

  208. {5983, 4405, 4405, 776}

    Returns: 0

  209. {957595, 903388, 903388, 957595}

    Returns: 0

  210. {308, 308, 2, 172}

    Returns: 1

  211. {166472, 166472, 439499, 846742}

    Returns: 1

  212. {56144, 6, 4293, 4293}

    Returns: 2

  213. {79526, 79526, 651514, 358516}

    Returns: 1

  214. {1000000, 575757, 757575, 333333 }

    Returns: 2

  215. {4, 11, 11, 3 }

    Returns: 2


This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2024, TopCoder, Inc. All rights reserved.
This problem was used for: