Problem Statement
William and Xenia are fans of NIM-style games. Today, they came up with a new variant and they are both really excited to play it.
As is usually the case, the game is played with some piles of tokens, the players take alternating turns, and the person who is unable to make a valid move loses the game.
In this version of the game, the valid moves look as follows: The current player announces either "take" or "split". Then:
- If they chose "take", they must choose one non-empty pile of tokens and remove one or more tokens from the pile.
- If they chose "split", they must choose a pile with at least two tokens and split the chosen pile into two or more smaller piles.
For example, if there is a single pile with 7 tokens, the current player has multiple possibilities for a valid move, including these:
- Announce "take" and remove three tokens, leaving a single pile with four tokens.
- Announce "take" and remove all seven tokens, leaving an empty pile.
- Announce "split" and split the pile into a pile with two tokens and a pile with five tokens.
- Announce "split" and split the pile into seven piles containing one token each.
You are given the
Definition
- Class:
- YetAnotherTokenGame
- Method:
- getWinner
- Parameters:
- int[]
- Returns:
- String
- Method signature:
- String getWinner(int[] piles)
- (be sure your method is public)
Constraints
- piles will contain between 1 and 50 elements, inclusive.
- Each element of piles will be between 1 and 300, inclusive.
Examples
{47}
Returns: "William"
William can take all tokens and win in a single turn. (More precisely, after William takes all tokens, Xenia will be unable to make a valid move.)
{1,1,1,1,1}
Returns: "William"
The only valid move in this situation is choose "take" and to remove one of the tokens. Eventually, William will remove the last token and then Xenia will lose the game.
{3,1,1,1}
Returns: "William"
One winning move for William is to remove two tokens from the pile with three tokens. Another winning move is to split this pile into three piles, each containing one token.
{3,42,47,3,42,47}
Returns: "Xenia"
This position is symmetric. Xenia can use this symmetry to copy William's moves, and if she does that, she will eventually win the game.
{300,42,47,3,42,47}
Returns: "William"
One winning strategy for William is to produce the configuration from Example #3 and then to follow Xenia's strategy from that example.
{1,3,5}
Returns: "Xenia"
{273, 42, 25, 245, 232, 168, 197, 67, 235, 10}
Returns: "Xenia"
{177, 204, 260, 3, 260, 196, 213, 210, 24, 116, 158, 34, 208, 36, 199, 117, 36, 10, 106, 297, 148, 293, 243, 288, 102, 51, 70, 227, 156, 126, 193, 57, 293}
Returns: "William"
{199, 86, 150, 157, 71, 184, 39, 270, 160, 240, 31, 170, 105, 262, 157, 104, 130, 190, 162, 25, 48}
Returns: "Xenia"
{114, 166, 165, 146, 239, 176, 108, 134, 48, 300, 114, 299, 215, 57, 104, 124, 153, 299, 291, 253, 145, 238, 144, 108, 112, 154, 33, 212, 186, 252, 35, 101, 20, 171}
Returns: "William"
{228, 179, 131, 85, 85, 62, 28, 274, 278, 144, 190, 197, 262, 159, 82, 82, 160, 295, 270, 237, 103, 259, 268, 165, 38, 213, 73, 118, 243, 28, 22, 149, 268, 253, 71, 180, 172, 211, 146, 82, 133, 57}
Returns: "Xenia"
{57, 129, 238, 296, 182, 46, 3, 273, 203, 179, 136, 214, 228, 116, 74, 253, 92, 167, 87, 76, 195, 54, 147, 3, 35, 55, 174, 132, 57}
Returns: "William"
{202, 274, 85, 126, 21, 231, 230, 188, 218, 198, 76, 30, 123, 100, 95, 24, 112, 73, 243, 276, 30, 44, 215, 66, 21, 142, 155, 23, 278, 145, 51, 201, 163, 176, 88, 84, 279, 169, 225, 259, 156, 294, 33, 279, 91, 18, 94}
Returns: "Xenia"
{9, 202, 94, 130, 36, 223, 167, 276, 109, 182, 141, 247, 193, 44}
Returns: "William"
{211, 27, 160, 152, 41, 77, 107, 244, 282, 105, 19, 127, 127, 206, 269, 262, 52, 65, 113, 24, 271, 139, 235, 175, 21, 97, 8, 27, 213, 61, 212, 69, 11, 54, 131, 34, 61, 190, 202, 273, 215, 229, 116, 76, 255, 188, 269, 196, 232, 258}
Returns: "Xenia"
{252, 35, 31, 125, 155, 85, 90, 85, 233, 271, 54, 136, 124, 234}
Returns: "William"
{116, 296, 197, 257, 145, 185}
Returns: "Xenia"
{24, 212, 222, 236, 42, 48, 38, 41, 282, 64, 249, 55, 256, 171, 27, 42}
Returns: "William"
{90, 140, 256, 198, 16, 108, 136, 156, 217, 82, 60, 208, 107, 262, 36, 265, 72, 108, 30, 76, 154, 270, 28, 114, 6, 70, 25, 288, 104, 5, 101, 244, 280, 57, 71, 291, 217, 54}
Returns: "Xenia"
{218, 280, 224, 201, 147, 276, 193, 209, 56, 122, 100, 173, 114, 209, 18, 245, 3, 191, 235, 177, 191, 146, 44, 85, 225, 153, 74}
Returns: "William"
{235, 238, 40, 153, 51, 192, 162, 239, 268, 193, 1, 248, 189, 249, 227, 34, 17, 264, 107, 247, 173, 87, 157, 185, 189, 217, 295, 252, 112, 78, 14, 180}
Returns: "Xenia"
{270, 235, 293, 108, 296, 208, 88, 107, 191, 99, 209, 200, 108, 63, 81, 95, 213, 293, 133, 86, 70, 70, 214, 219, 258, 22, 130, 260, 75, 284, 254, 287, 220, 136, 199}
Returns: "William"
{85, 41, 123, 161, 105, 36, 109, 174, 89, 96, 267, 61, 248, 239, 275, 213, 281, 91, 113, 115, 166, 249, 257, 268, 249, 248, 117, 224, 176, 205, 210, 248, 24, 195, 242}
Returns: "Xenia"
{93, 105, 210, 224, 192, 218, 170}
Returns: "William"
{31, 290, 41, 116, 169, 153, 278, 140, 168, 221, 279, 267, 93, 16, 139, 35, 10, 37, 40, 84, 130, 260, 2}
Returns: "Xenia"
{57, 138, 235, 129, 237, 295}
Returns: "William"
{83, 296, 82, 233, 126, 30, 5, 191, 225, 178, 198, 180, 77, 48, 232, 160, 53, 122, 137, 128}
Returns: "Xenia"
{125, 202, 204, 132, 221, 36, 227, 230, 111, 20, 37, 182, 249, 145, 168, 59, 97, 124, 272, 144, 175, 256, 197, 236, 80, 287, 107, 197, 246, 11, 32, 272, 171, 219, 195, 86, 91, 300, 255, 233, 79, 41, 117, 299, 238, 79}
Returns: "William"
{294, 38, 135, 169, 97, 157, 110, 297, 212, 131, 251, 202, 288, 25, 108, 205, 149, 103, 22, 223, 82, 20, 222, 117, 122, 282, 74, 280, 25, 249, 116, 245, 102, 158, 12, 219, 137, 30, 25, 208, 129, 167, 209, 70}
Returns: "Xenia"
{244, 194, 125, 234, 63, 198, 274, 71, 139, 217, 168, 244, 146, 112, 223, 103, 169, 72, 242, 242, 20, 218, 256, 158, 50, 255, 22, 220, 208, 244, 77, 107, 57, 283, 46, 31, 84, 77, 15, 38, 155, 207, 172, 251, 234, 145}
Returns: "William"
{248, 145, 8, 68, 174, 201, 242, 273, 182, 124, 92, 31, 263, 40, 287, 89, 176, 141, 265, 104, 172, 21, 39, 50, 85, 246, 243, 272, 118, 55, 175, 109, 137, 280, 69, 83, 146, 220, 291, 100, 24}
Returns: "Xenia"
{177, 243, 202, 132, 147, 196, 251, 250, 230, 106, 256, 124, 30, 236, 235, 95, 196, 233, 237, 184, 113, 290, 189, 277, 81}
Returns: "William"
{26, 49, 68, 7, 10, 179, 151, 287, 252, 108, 142, 241, 36, 85, 27}
Returns: "Xenia"
{60, 74, 149, 89, 70, 283, 276, 16, 139}
Returns: "William"
{172, 252, 209, 28, 146, 144, 96, 124, 104, 54, 69, 261, 84, 74, 298, 197, 102, 149, 127, 148, 112, 14, 49, 223, 237, 272, 172, 130, 250, 188, 187, 165, 183, 254, 62, 19, 184, 185, 137, 188, 201, 138}
Returns: "Xenia"
{50, 194, 172, 73, 233, 53, 166, 272, 20, 97, 196, 65, 65, 223, 278, 268, 131, 20, 53, 59, 201, 230, 111}
Returns: "William"
{172, 108, 200, 266, 94, 180, 199, 212, 183, 127, 92, 24, 177, 121, 48, 116, 28, 32, 219, 135, 285, 96}
Returns: "Xenia"
{68, 172, 8, 1, 49, 74, 96, 6, 109, 13}
Returns: "William"
{11, 127, 191, 44, 175, 12, 246, 238, 24, 104, 118, 172, 275, 157, 62, 177, 296, 79, 12, 147, 150, 190, 9, 23, 207, 120, 259, 224, 128, 171, 10, 16, 271, 270, 17, 143, 137, 90, 178, 4, 247, 77, 288, 36, 33, 68, 237, 27, 287, 57}
Returns: "Xenia"
{291, 253, 233, 59, 226, 267, 242, 257, 295, 259, 210, 29, 85, 248, 181, 107, 239, 206, 248, 264, 278, 33, 113}
Returns: "William"
{257, 8, 253}
Returns: "Xenia"
{127, 241, 236, 170, 99, 51, 261, 74, 249, 47, 150, 252, 110, 64, 177, 105, 146, 202, 207, 175, 127}
Returns: "William"
{71, 234, 31, 75, 178, 86, 218, 197, 167, 235, 38, 122, 245, 262, 71, 53, 45, 232, 17, 72, 263, 121, 29, 38, 278, 97, 289, 212, 146, 274, 275, 236, 257, 87, 192, 150, 104, 249, 73, 172, 141}
Returns: "Xenia"
{19, 74, 157, 8, 168, 291, 138, 167, 171, 218, 269, 131, 273, 47, 24, 86, 51, 174, 233, 283, 271, 45, 63, 94, 185, 219, 123, 123, 58, 171, 298, 197, 122, 177, 153, 136, 291, 91, 112, 289, 75, 109, 151, 174, 111, 251, 34, 192}
Returns: "William"
{256, 239, 109, 54, 76, 228, 165, 88, 235, 190, 156, 8, 190, 119, 10, 256, 177, 278, 187, 257, 294, 271, 166, 218, 47, 148, 236, 36, 267, 299, 10, 48, 250, 148, 11, 119, 269, 234, 123, 189, 217, 207, 135, 85, 255, 151, 109, 54, 148}
Returns: "Xenia"
{198, 12, 145, 300}
Returns: "William"
{98, 87, 257, 299, 236, 268, 21, 229, 284, 191, 20, 102, 103, 60, 174, 135, 197, 217, 128, 158, 53, 115, 280, 27, 293, 170, 169, 249, 286, 28}
Returns: "Xenia"
{234, 160, 136, 219, 251, 204, 182, 34}
Returns: "William"
{24, 174, 295, 1, 64, 107, 71, 271, 289, 111, 139, 32, 253, 104, 175, 233, 68, 238, 298, 234, 142, 211, 153, 199, 230, 243, 3, 45, 282, 163, 203, 94, 13, 270, 71, 34, 181, 140, 171, 78}
Returns: "Xenia"
{236, 11, 49, 242, 23, 1, 154, 231, 171, 15}
Returns: "William"
{265, 204, 60, 80, 237, 36, 98, 265, 41, 148, 180, 159, 64, 205, 227, 289, 22, 165, 254, 254, 155, 140, 144, 285, 247, 242, 212, 299, 235, 64, 224, 204, 42, 228, 185, 78, 228, 158, 28, 256, 276, 46, 184, 143, 66, 176, 86}
Returns: "Xenia"
{102, 104, 165, 59, 231, 171, 170, 14, 81, 208, 135, 204, 137, 296, 283, 248, 265, 282, 214, 54, 218, 180, 186, 43, 182, 45, 230, 85, 1, 206, 111, 45}
Returns: "William"
{272, 135, 184, 159, 1, 257, 246, 142, 19, 34, 153, 253, 69, 248, 299, 299, 297, 6, 287, 38, 248, 85, 59, 4, 124, 30, 102, 86, 1, 292, 185, 148, 279, 40, 195, 296, 79, 71, 37, 115, 278, 267, 193, 259}
Returns: "Xenia"
{117, 165, 73, 282}
Returns: "William"
{65, 285, 140, 133, 6, 271, 214, 190, 18, 280, 269, 99, 20, 152}
Returns: "Xenia"
{139, 218, 41, 231, 196, 132, 185, 29, 151, 166, 63, 40, 101, 111, 2, 145, 120, 218, 58, 120, 248, 62, 54, 274, 40, 221, 51, 205, 2, 25, 61, 115, 153, 34, 88, 212}
Returns: "William"
{276, 55, 145, 221, 94, 109, 208, 260, 274, 181, 257, 59, 245, 198, 66, 58, 218}
Returns: "Xenia"
{228, 5, 129, 148, 195, 86, 124, 155, 16, 256, 42, 122, 181, 98, 87, 166, 158, 290, 27, 103, 36, 215, 54, 92, 149, 167, 198, 228, 28, 51, 14, 29, 263, 221, 41, 231, 248, 275, 111, 80, 6, 45, 63, 123}
Returns: "William"
{184, 85, 198, 239, 22, 271, 61, 91, 54, 34, 23, 226, 37, 96, 254, 203, 128, 72, 113, 267, 44}
Returns: "Xenia"
{127, 49, 13, 38, 135, 48, 21, 283, 70, 127, 283, 37, 277, 211, 126, 198, 53, 99, 25, 3, 1, 206, 80, 143, 244, 163, 166, 290, 155, 78, 92, 130, 180}
Returns: "William"
{123, 136, 91, 88, 36, 68, 72, 188, 116, 80, 175, 16, 183, 186, 283, 25, 300, 12, 164, 9, 87, 239, 283, 120, 31, 136, 102, 211, 259, 131, 196}
Returns: "Xenia"
{45, 128, 5, 110, 165, 139, 59, 101, 24, 174, 129, 79, 142, 19, 254, 53, 200, 255, 47, 267, 267, 138, 159, 167, 219, 94, 139, 14, 120, 133, 49, 100, 88, 41, 51, 121, 200, 120, 227, 240, 219, 66, 260, 108, 32, 143, 5, 253}
Returns: "William"
{238, 263, 248, 184, 57, 221, 298, 218, 9, 179, 64, 214, 266, 12, 40, 57, 6}
Returns: "Xenia"
{70, 211, 234, 175, 144, 293, 187, 59, 57, 178, 249, 103, 193, 91, 205, 85, 40, 241, 65, 24, 19, 295, 252}
Returns: "William"
{210, 254, 234, 202, 28, 12, 13, 91, 160, 116}
Returns: "Xenia"
{159, 98, 71, 122, 146, 164, 135, 288, 178, 237, 165, 177, 247, 246, 31}
Returns: "William"
{274, 128, 254, 164, 43, 249, 254, 281, 205, 183, 87, 8, 206, 32, 45, 49, 264, 76, 218, 2, 89, 149, 44, 243, 24, 178, 76, 185, 94, 190, 227}
Returns: "Xenia"
{135, 70, 1, 83, 145, 279, 2, 146, 251}
Returns: "William"
{78, 88, 245, 295, 151, 237, 64, 260, 191, 253, 182, 59, 156, 257, 180, 50, 192}
Returns: "Xenia"
{148, 290, 151, 120, 94, 214, 60, 278, 156, 278, 141, 32, 201, 145, 255, 259, 100, 222, 164, 217, 100, 275, 45, 182, 34, 239, 235, 211}
Returns: "William"
{3, 105, 162, 293, 276, 76, 298, 56, 99, 227, 278, 42, 293, 296, 195, 112, 31, 44, 169, 105, 110, 72, 60, 282, 190, 240, 170, 19, 274, 95, 247, 115, 109, 40, 244, 81, 66, 199, 227, 70, 144, 278}
Returns: "Xenia"
{251, 250, 22, 162, 187, 196, 19, 217, 278, 159, 43, 166, 26, 138, 294, 157, 211, 151, 114, 288, 142, 206, 91, 286, 53, 219, 151, 119, 152, 140, 185, 199, 101, 27, 131, 9, 212, 160, 15, 75, 5, 38, 174, 285, 236, 61, 294, 139, 276}
Returns: "William"
{150, 145, 38, 224, 114, 252, 147, 262, 24, 119, 290, 40, 119, 243, 21, 113, 211, 105, 271, 104, 252, 39, 45, 268, 115, 113, 281, 193, 128, 17, 271, 189, 149, 100, 124, 170}
Returns: "Xenia"
{205, 18, 235, 138, 71, 40, 262, 246, 234, 186, 19, 1, 255, 86, 255, 179, 151, 12, 87, 243, 261, 223, 243, 211, 282, 41, 38, 74, 85, 289, 53, 243, 74, 208, 289, 47, 13, 3, 37, 224}
Returns: "William"
{75, 68, 163, 12, 53, 107, 206, 181, 115, 173, 279, 137, 43, 287, 42, 209, 27, 296, 127, 38, 146}
Returns: "Xenia"
{9, 153, 8, 19, 171, 227, 40, 59, 267, 260, 151, 256, 60, 283, 151, 159}
Returns: "William"
{19, 25, 167, 276, 210, 266, 72, 175, 197, 275, 132, 107, 204, 50, 86, 174, 276, 93, 121, 112, 224, 178, 147, 23, 99, 19, 159, 173, 262, 274, 273, 23, 288, 10, 270, 224, 33, 82, 239, 279, 223, 110, 289, 132, 146, 218}
Returns: "Xenia"
{99, 73, 9, 170, 14, 87}
Returns: "William"
{185, 282, 122, 91, 229, 16, 186, 213, 143, 299, 233, 17, 14, 10, 133, 28, 68, 159, 246}
Returns: "Xenia"
{228, 62, 11, 231, 191, 61, 268, 256}
Returns: "William"
{181, 104, 265, 192, 249, 111, 217, 293, 263, 179, 51, 32, 77, 164, 117, 196, 220, 223, 203, 268, 284, 231, 285, 169}
Returns: "Xenia"
{13, 172, 102, 112, 192, 167, 154, 218, 226}
Returns: "William"
{206, 214, 88, 159, 6, 113, 134}
Returns: "Xenia"
{141, 35, 252, 67, 215, 1, 289, 228, 116, 47, 272, 286, 192, 214, 116, 203, 217, 117, 34, 244, 197, 151, 121, 102, 186, 54, 103, 188, 239, 250, 245, 172, 214, 95, 84, 260, 105, 248, 2, 150, 118, 215, 27, 196, 261, 137}
Returns: "William"
{222, 270, 52, 140, 296, 195, 187, 109, 116, 125, 132, 206, 42, 76, 240, 284, 185, 296, 146, 235, 181, 217, 133, 174, 295, 157, 83, 285, 123, 82, 69, 51, 106}
Returns: "Xenia"
{217, 239, 225, 157, 238, 297, 297, 29, 142, 8, 249, 255, 198, 168, 276, 198, 300, 139, 208, 76, 32, 107, 76, 289, 111, 184, 51, 214, 230, 212, 271, 172, 220}
Returns: "William"
{227, 151, 246}
Returns: "Xenia"
{183, 196, 282, 77, 225, 278, 163, 98, 215, 73, 250, 17, 112, 127, 86, 152, 282, 8, 120, 70, 232, 73, 215, 199, 168, 15, 227, 154, 296, 21, 294, 266, 118}
Returns: "William"
{41, 242, 95, 176, 300, 37, 153, 188}
Returns: "Xenia"
{129, 168, 10, 235, 238, 191, 71, 51, 1, 106, 15, 134, 57, 227, 109, 209, 240, 250, 86, 214, 115, 187, 12, 286, 192, 128, 276, 57, 245, 292, 260, 226, 216, 212, 74, 157, 37, 34, 288, 67, 201, 64}
Returns: "William"
{3, 13, 85, 286, 3, 134, 209, 220, 168, 187, 276}
Returns: "Xenia"
{246, 205, 12, 106, 72, 61, 182, 289, 234, 168, 127, 67, 199, 224, 295, 2, 198, 173, 271, 17, 198, 238, 289, 169, 89, 220, 121, 99, 141, 108, 271, 295, 17, 283, 284}
Returns: "William"
{29, 115, 198, 293, 143, 228, 259, 148, 8, 252, 7, 105, 287, 141, 172, 110, 299, 267, 198, 287, 245, 203, 31, 212, 99, 274, 222, 1, 120, 5, 13, 237, 153, 202}
Returns: "Xenia"
{264, 199, 192, 285, 152, 207, 100, 158, 273, 105, 203, 10, 165, 300, 149, 161, 118, 11, 6, 28, 247, 141, 2, 175, 15, 183, 147, 13, 99, 240, 19, 238, 101, 38, 172, 93, 290, 217, 20, 128, 165, 163, 175, 129, 107}
Returns: "William"
{55, 244, 169, 267, 259, 274, 13, 26, 227}
Returns: "Xenia"
{281, 239, 4, 128, 210, 209, 244, 177, 170, 275, 40, 71, 81, 42, 186, 102, 27, 273, 225, 287, 29, 164}
Returns: "William"
{133, 127, 5, 21, 234, 247, 204, 235, 235, 51, 157, 140, 193, 115, 227, 47, 246, 235, 17, 20, 9, 60, 169, 201, 117, 93, 80, 101, 114, 36, 65, 21, 153, 183, 300, 82, 193, 93, 110, 32, 106, 199, 47, 133, 92, 274, 174, 212}
Returns: "Xenia"
{94, 217, 162, 241, 174, 31, 60, 271, 44, 6, 58, 56, 22, 100, 195, 273, 281, 199, 116, 74, 13, 257, 79, 197, 201, 250, 40, 21, 96, 252, 102, 34, 1, 255}
Returns: "William"
{280, 122, 218, 161, 171, 13, 238, 286, 120, 231, 292, 238}
Returns: "Xenia"
{89, 25, 19, 121, 174, 16, 18, 45, 91, 226, 155, 43, 233, 58, 276, 268, 72, 129, 267, 184, 24, 211}
Returns: "William"
{262, 18, 42, 80, 264, 186, 183, 204, 220, 160, 62, 229, 237, 198, 191, 118, 297, 233, 239, 91, 107, 118, 70, 27, 227, 149, 49, 291, 4, 288, 13, 106, 23, 88, 111, 33, 167, 65, 255, 104}
Returns: "Xenia"
{191, 90, 201, 228, 95, 117, 221, 1, 249, 73, 237, 140, 59, 274, 16, 57, 253, 54, 129, 33, 66, 120, 227, 11, 90, 159, 83, 177}
Returns: "William"
{9, 11, 277, 278, 73, 82, 151, 175, 216, 155, 165, 141, 36, 71, 145, 219, 218, 1, 156, 187, 58, 266, 173, 97, 179, 185, 299, 90, 159, 249, 201, 79, 161, 240, 299, 234, 228, 202, 73, 6, 49}
Returns: "Xenia"
{32, 33, 25, 283, 69, 9, 165, 285, 295, 57, 104, 66, 243, 224, 33, 93, 105, 107}
Returns: "William"
{203, 290, 277, 95, 178, 150, 132, 254, 140, 289}
Returns: "Xenia"
{107, 88, 296, 281, 92, 44, 32, 179, 190, 199, 269, 298, 26, 181, 280, 219, 32, 249, 117, 158, 245, 149, 250, 252, 285}
Returns: "William"
{8, 2, 7 }
Returns: "Xenia"
{75, 113, 98, 252, 296, 218, 93, 293 }
Returns: "Xenia"
{3, 299, 300 }
Returns: "Xenia"
{1, 3, 6 }
Returns: "William"
{2, 8 }
Returns: "William"
{2, 7, 8 }
Returns: "Xenia"
{1, 2, 3, 8 }
Returns: "William"
{4, 8, 9 }
Returns: "Xenia"
{8, 4, 3 }
Returns: "William"