Problem Statement
You have an infinite number of the following two polyominoes: AAAA and BB.
You are given a
Return a
If there is no solution, return the
If there are multiple solutions, return the lexicographically smallest one.
Definition
- Class:
- LinearPolyominoCovering
- Method:
- findCovering
- Parameters:
- String
- Returns:
- String
- Method signature:
- String findCovering(String region)
- (be sure your method is public)
Notes
- A string S is greater than a string T lexicographically if T is a proper prefix of S, or if S has a greater character at the first position where the strings differ.
Constraints
- region will contain between 1 and 50 characters, inclusive.
- Each character of region will be either '.' or uppercase 'X'.
Examples
"XXXXXX"
Returns: "AAAABB"
There is only room for one AAAA polyomino, so there are three possible coverings: "AAAABB", "BBAAAA", and "BBBBBB". The first one is the lexicographically smallest.
"XX.XX"
Returns: "BB.BB"
The empty cell in the middle should be left uncovered, so we can't use the AAAA polyomino here.
"XXXX....XXX.....XX"
Returns: "impossible"
The middle segment of Xs is too narrow for an AAAA polyomino, but is too wide for a BB polyomino.
"."
Returns: "."
"X"
Returns: "impossible"
"XX"
Returns: "BB"
"XXXX"
Returns: "AAAA"
"XXXXXXXX"
Returns: "AAAAAAAA"
"X.XXXX"
Returns: "impossible"
"XXXX.X"
Returns: "impossible"
"XX.XXXX.XXXXXX.XXXXXXXX.XXXXXXXXXX"
Returns: "BB.AAAA.AAAABB.AAAAAAAA.AAAAAAAABB"
"XX.XXXXXXXXXX..XXXXXXXX...XXXXXX"
Returns: "BB.AAAAAAAABB..AAAAAAAA...AAAABB"
"..........XXXXXX........XXXX........XX.........."
Returns: "..........AAAABB........AAAA........BB.........."
"...XXXXXXXXXXXX.....XXXXXXXXXXXXXX......."
Returns: "...AAAAAAAAAAAA.....AAAAAAAAAAAABB......."
"XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX.XX"
Returns: "BB.BB.BB.BB.BB.BB.BB.BB.BB.BB.BB.BB.BB.BB.BB.BB.BB"
".XX.XXXX.XX.XX.XXXX.XX.XX.XXXX.XX.XX.XXXX.XX.XX.XX"
Returns: ".BB.AAAA.BB.BB.AAAA.BB.BB.AAAA.BB.BB.AAAA.BB.BB.BB"
"....XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...."
Returns: "....AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB...."
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Returns: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB"
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Returns: "impossible"
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX."
Returns: "impossible"
".XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX."
Returns: ".AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA."
"...XXXXXXXXXXXXXXXXXXXXXX.....XXXXXXXXXXXXXXXXXX.."
Returns: "...AAAAAAAAAAAAAAAAAAAABB.....AAAAAAAAAAAAAAAABB.."
"...XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Returns: "impossible"
".........................................XXXX"
Returns: ".........................................AAAA"
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Returns: "impossible"
".XX...XXXX.....XXXXXX.......XXXXXXXX........."
Returns: ".BB...AAAA.....AAAABB.......AAAAAAAA........."
"..XXX....XXXXX......XXXXXXX........XXXXXXXXX"
Returns: "impossible"
".........XXXXXXXX.......XXXXXX.....XXXX...XX."
Returns: ".........AAAAAAAA.......AAAABB.....AAAA...BB."
"XXXXXXXXXXXXXXXXXXXXXX......XXXXXXXXXXX..XXXX"
Returns: "impossible"
"XXXXXX........XXXX..XXXXXX....XXXXXX..XXXXXXX."
Returns: "impossible"
"........XXXX..XXXXXX....XXXXXX..X...."
Returns: "impossible"
"..X..XXXXXX....XXXXXX..XXXXXX...."
Returns: "impossible"
"........XXXXXXXX..XXXXXX....X..XXXXXX...."
Returns: "impossible"
"XX.XXXXXXXXXX..XXXXXXXX.XX.XXX.XXXXXX"
Returns: "impossible"
"XXXXX"
Returns: "impossible"
"XXX"
Returns: "impossible"
"X.X."
Returns: "impossible"
"....."
Returns: "....."
"..."
Returns: "..."
".."
Returns: ".."
"XXXX....XX..XXXX"
Returns: "AAAA....BB..AAAA"
"...."
Returns: "...."
"........"
Returns: "........"
"XX.XXXXXXXXXX..XXXXXXXX...XXX"
Returns: "impossible"
".XXX.XXX.XX.XXX.XXX.XX"
Returns: "impossible"
"X.X"
Returns: "impossible"
"...XX..."
Returns: "...BB..."
".........."
Returns: ".........."
"......"
Returns: "......"
".XXXX.XXXX.XX.XXXX."
Returns: ".AAAA.AAAA.BB.AAAA."