Problem Statement
The rules of the game are as follows:
- The players take alternating turns. Alice plays first.
- When it is Alice's turn, she must choose one of the 'A' tokens and move it one cell to the left. Note that the destination cell must be empty.
- When it is Bob's turn, he must choose one of the 'B' tokens and move it one cell to the left. Note that the destination cell must be empty.
- The first player who is unable to make a valid move loses the game.
Among all boards that match pattern, let X be the number of boards for which Alice has a winning strategy. Compute and return the value X modulo (10^9 + 7).
Definition
- Class:
- GameOfTokens
- Method:
- count
- Parameters:
- String
- Returns:
- int
- Method signature:
- int count(String pattern)
- (be sure your method is public)
Constraints
- pattern will contain between 1 and 50 characters, inclusive.
- Each character in pattern will be one of {'.', 'A', 'B', '?'}.
Examples
".AB"
Returns: 0
Obviously, the only board that matches the given pattern is ".AB" itself. For this board there is only one way for the game to play out: Alice must move the only A token to the left. The board becomes "A.B". Bob must move the only B token to the left. The board becomes "AB.". Alice cannot make a valid move, so she loses the game. Thus, the board ".AB" is a losing position for Alice.
"???B"
Returns: 1
Among all 27 boards that match pattern, the only board that is a winning position for Alice is ".AAB".
"???????...BBB"
Returns: 0
"?.A?.B??.??B?"
Returns: 517
"????????????????????"
Returns: 612621096
Don't forget mod.
"..A..A..AAAAA.AAA?.A...A.AAAAA.?BA.A.AAAA.A"
Returns: 9
"?BBB"
Returns: 0
"??AAAA??AA?AAAAA?"
Returns: 579
"BBBBB.BBBBBB"
Returns: 0
"?A??AABAAA"
Returns: 16
"BAA.AABBABAABBABABABBAAA.ABBBBABBBBA"
Returns: 1
".A............A.AAAA?B?...."
Returns: 9
"..............B.................AB......."
Returns: 0
"AAA?AA??A?AAAA"
Returns: 61
"BB.BBB.BBB.BB..BBBBBB.BB.BBBB."
Returns: 0
"AAA...AAAAAAAAA.AAAA..A.AAAA.AAA.A.AAA"
Returns: 1
"..."
Returns: 0
"AAAAAABAABAAAAA.AA.AAAAABAABAAAABBAAAAAAAAA"
Returns: 1
".BB?.BB.BB.?.BBBBBBB.BBB"
Returns: 0
".......?...?B?....."
Returns: 6
"AAB?A?A.BBAAA.AAAAA?.AA.AAAA..AAAA.AAAA.ABAA"
Returns: 27
"???????B???????B??.?????????????"
Returns: 894098465
"?????????"
Returns: 7798
"......"
Returns: 0
"???A??????AB????????????A"
Returns: 94404183
"..B.BB?B??.?BB.?BBB..BB.B?B??.???B??BB?..BB?B.."
Returns: 0
"....."
Returns: 0
".AAAAAAAAAABA.A?AA?AAAA.AAAAAAAA?AA.A?AAA"
Returns: 81
"B..BB.B..BA"
Returns: 0
".BBBBBBBBA...BBBBBBBB.B.B"
Returns: 0
".B?BBBB.BBBBBBBBBBBBBB.BBBBBBBBAB"
Returns: 0
"....B.....BB.?"
Returns: 0
"..A...A.............?..?........B.A.."
Returns: 6
"??AA?A?BBA?AA?AA.??.?A???A?A??.??A.AB.?.??.??A??B"
Returns: 913279485
"?.???.?????"
Returns: 8967
"?BBB??BBB?.?BABAB......BB??.A.?BB??BBB?....?..B."
Returns: 0
"BBBBBBBB"
Returns: 0
"AA.....A..AAAAAAA......"
Returns: 1
"?"
Returns: 0
"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
Returns: 0
".B??..???.B...."
Returns: 32
".B..B.BBBBA.B.A.BB."
Returns: 0
"?..?.??B??..BB..?B.B?B???.???..?"
Returns: 379717
"AAAAAAAAA"
Returns: 0
"......................?.A?......AA...?...."
Returns: 27
"................................."
Returns: 0
"..AAB...B.BA.ABBABAAAA..AA...BA.BB.A."
Returns: 0
".........?"
Returns: 1
"?AAAAAA?AA?AA?A"
Returns: 65
"...?...B."
Returns: 0
"B...BB.BABABAA.BAB..BBB..AB"
Returns: 0
"?????????????????????????????????A.??"
Returns: 29270351
".BBAB..BB.B.BBB.B.BB.BA.BBBB....B.....BB.BB.B"
Returns: 0
".AAAA?AAAA.AAAAAAAAA.A?.AAAAAABAAA.AAABAABAAAAAA"
Returns: 9
"..................B......"
Returns: 0
"BBBBBBBBBBBBBBBBBABBBBBBBBABBBABABBBBBBBB"
Returns: 0
"BB?BBBBBBBB?BBBBBBB?BBBBBBB?BB?BBBB?BB"
Returns: 0
"AAA....AA..AA.ABAA.A.A.AA..?A..AA"
Returns: 3
"B??????????A?????????????????"
Returns: 621755428
"BABBABBABBBBBBBBBBBBBBBBBBBBBABBABBBBBBBBBBBB"
Returns: 0
"AAAAAAAAAAABAABAAAAAAABA.AAAAAABAAABAAAAA.A"
Returns: 1
"AAAAAAAAAAAAAAA?A?AAAAAAAAAAAAAA?AAAAAA?AAAAA"
Returns: 65
"BAAAA"
Returns: 0
"BBBBBB"
Returns: 0
"A.A.AA"
Returns: 1
".?A"
Returns: 2
"..A"
Returns: 1
"?B?BBBBBBBBBBBBBBBBBBBBBBBB?BBBBBBBBB"
Returns: 0
".B.B.A.B.B.B..BB.BBA....B...BB..B.A.BB.."
Returns: 0
"..........................................."
Returns: 0
"?B???????.???B?.?????????"
Returns: 757039369
"AAAAAAAA"
Returns: 0
"BBAABBB?AABAAAABABB?AAAB.BBB"
Returns: 1
"??????A??.A?"
Returns: 15364
"?AB?BB?AAAABAB???B?A?AAAAA.ABAA"
Returns: 5364
".BBBBA.BBBBABBBB?BB.BBBBBBBBBBB?BBBB?B"
Returns: 0
"..??...?AAB??A..??.?A?A.?????"
Returns: 4254175
"???.?A"
Returns: 59
"???A???.???.?????"
Returns: 2499903
".AAA..A.A....AA.AA....A..........A......"
Returns: 1
"?AAAA??AAA??B??AA????AAAA?AAAAA??A?AAA?A????"
Returns: 379493907
"..A.?.B..BB..??B?..?.?...?B...B?B.?..BBBB"
Returns: 0
"?..??????A??.??A.???A????AA.??.??????A."
Returns: 961008300
"AABB?AAB??AAA.BAABBAA?.?BAABA"
Returns: 172
"BBBB.BB?BB.BBBBBBBBBA????B?B.?BBB?BBBBB"
Returns: 0
"???.???????????????????????????"
Returns: 454215925
"A.B.?..B..?...A...A...B.A.....?A...A"
Returns: 27
"."
Returns: 0
"AAABA?AABAAAAAAAAAAAAAAABAAAAAABBAAAAAA"
Returns: 1
"B....A"
Returns: 1
"..B."
Returns: 0
"...??.......B..B?.......?..?...."
Returns: 31
"BBBBBBBBBBBBBB"
Returns: 0
"..?.A........A.A..A"
Returns: 3
"B?????BB?.B????????????B?B???B.??B?B?????B.?"
Returns: 183867584
"?.....B.?.....B....B.B...B....B..."
Returns: 0
"???BBBBB.BBB"
Returns: 0
"BAAA.AABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
Returns: 1
"AB...A......B.BB.B.B.A.B..BA.A"
Returns: 0
"?B?ABAA..BAAAAAAAA?AAB?A"
Returns: 54
"ABBAABAAABBBAABAAB.AABB.BBABBBBAABBBAAABAA.B"
Returns: 0
".????.?BB??.??"
Returns: 3914
"AB???A???????B?A?BBB?A?AAA?????AAA?????ABA?AA?A?"
Returns: 405567502
"BBBBBAAABAABABA.ABAAAAA.AAABA"
Returns: 1
"...B?.B.AB..A"
Returns: 1
"??????????????????????????????????????????????????"
Returns: 933631340