Problem Statement
Initially the chessboard doesn't contain any pebbles. Elly places the pebbles one by one. The cost of adding a pebble is defined as follows. If this is the first pebble to be placed (i.e., the board is empty), it can be placed for free. Otherwise, the cost is the Manhattan distance (see Notes for the definition) to the most distant pebble that has already been placed on the board.
Return the minimal total cost of placing a pebble onto each chosen cell.
Definition
- Class:
- EllysChessboard
- Method:
- minCost
- Parameters:
- String[]
- Returns:
- int
- Method signature:
- int minCost(String[] board)
- (be sure your method is public)
Notes
- The Manhattan distance between the cell (x1, y1) and the cell (x2, y2) is defined as |x1-x2| + |y1-y2|, where || denotes absolute value.
Constraints
- board will contain exactly 8 elements.
- Each element of board will contain exactly 8 characters.
- Each character in board will be either '#' or '.'.
Examples
{"........", "........", "...#....", ".#......", ".......#", "........", "........", "........"}
Returns: 10
Elly wants to put pebbles on three cells: (2, 3), (3, 1), and (4, 7). One of the optimal ways to do this is as follows: First, put a pebble to (2, 3). It costs nothing. Next, put a pebble to (3, 1). It costs |2-3| + |3-1| = 3. Next, put a pebble to (4, 7). The Manhattan distance between (4, 7) and (2, 3) is 6, and the Manhattan distance between (4, 7) and (3, 1) is 7, so the cost is max(6, 7) = 7. The total cost is 0 + 3 + 7 = 10.
{"........", "........", "........", "........", "........", "........", "........", "........"}
Returns: 0
{"........", "........", "........", "........", "........", "........", "........", "......#."}
Returns: 0
{"........", "........", "........", ".......#", "....#...", "........", "........", "........"}
Returns: 4
{"........", "........", "........", "........", "........", "........", "...#....", "......##"}
Returns: 6
{"........", "........", ".#......", "........", "#.......", "......#.", "........", ".#......"}
Returns: 16
{"........", ".......#", "........", "........", ".#......", ".....#.#", "........", ".#......"}
Returns: 29
{"#.#.....", "..#.....", "........", ".....#..", "........", "........", "...#....", "....#..."}
Returns: 32
{"........", "....#...", "........", "........", "...#.#..", "#.......", "...#..#.", "......#."}
Returns: 31
{"....#...", "......#.", ".......#", "........", "....#.#.", "......#.", "....#...", ".......#"}
Returns: 38
{"........", "....#...", "......##", "........", "#.#...#.", "........", "#.......", "#.#....."}
Returns: 56
{".#......", "........", "..#..#.#", "...#..#.", "........", "...#...#", "...#...#", "........"}
Returns: 58
{".......#", "#..#....", "....#.#.", "........", "........", "....#...", "###.....", ".#..#..."}
Returns: 64
{".#......", "........", ".##....#", "..##.#.#", "........", "......#.", "..#.....", "....#.#."}
Returns: 71
{"........", "......#.", "....##..", "#.##....", "......##", "..#.....", ".##.....", "...#...#"}
Returns: 74
{"#...#...", "........", "#...#.#.", "...#....", "..#..##.", "##......", "##......", "....#..."}
Returns: 83
{".#......", "......#.", ".....#..", "#..#....", "#.#.....", ".#....#.", ".#.#....", "#.#..#.#"}
Returns: 96
{"#...#...", "#...#...", "......##", "##.#...#", "#..#..#.", ".#...#..", "........", "..#....."}
Returns: 95
{"..#.#...", "#.......", "...##...", ".#...#..", "..#..##.", ".#..###.", "......#.", "#......#"}
Returns: 101
{"..#....#", ".#..#...", "##...##.", "....##..", "........", "...#.#.#", ".###..#.", ".......#"}
Returns: 114
{"...##...", "##..#.##", "....#...", ".......#", "#..#....", ".#..#...", "#.#.....", "##.#..#."}
Returns: 136
{"...#.#..", "#....###", ".#......", "#.#....#", "..###...", "#.......", "##....#.", ".#...#.#"}
Returns: 140
{"##....#.", "##....#.", "..#.##..", "....#..#", "#..#..##", "...#....", "#......#", "#..#..#."}
Returns: 156
{"...#....", ".#.#####", ".###.#..", "#.#....#", "#......#", ".#......", "....#...", "##.#...#"}
Returns: 141
{".##.....", "..##.###", ".#..#..#", "#.....#.", "...#....", "..#.....", "#....###", "####...#"}
Returns: 174
{"...###.#", ".#..#...", ".###....", "..##...#", "..##..#.", "...#.#.#", "#.#..#..", "..##..#."}
Returns: 154
{".##.#.#.", "....###.", "#...##..", "##.#..##", ".#....#.", "##.#.#..", ".#..#.#.", "#......."}
Returns: 161
{"##..####", "....##..", "#.......", ".###.#.#", ".#......", "....##..", "####.#.#", "..#.#..#"}
Returns: 191
{".#.##...", "..#..#..", "..#..#..", "...###..", "..#..###", "#.###.#.", "#.#.#.##", "#..##..."}
Returns: 166
{"...#..#.", "..##.###", "..####..", ".....##.", "##...#..", "##...#.#", "##.#.#..", ".#..##.#"}
Returns: 189
{".###.#..", "##.#####", "#..#...#", "........", ".#####..", "..###..#", "##.....#", "....#.##"}
Returns: 198
{"#.##.##.", "#.##...#", "...#.#..", "###...#.", "#..#.#..", "#...##.#", ".#.###..", "#....###"}
Returns: 220
{"#.###.#.", "#.#.##..", "#.###...", "#.....#.", "##.##..#", "#.#.#...", "#.#.#..#", ".#.##.#."}
Returns: 212
{"#.##.##.", "##.####.", "..##.#.#", "#....#.#", ".#......", "...###.#", ".###.#.#", "....####"}
Returns: 229
{".#.#..#.", "##.##...", "###...#.", "#####.#.", "###.....", "#.######", "#.....#.", "..##.#.#"}
Returns: 214
{"#..#.#.#", "####.###", "#...##..", "...#####", ".#......", "##.#.###", ".##..##.", "..##..##"}
Returns: 248
{"..#.#..#", "#.##.#.#", ".###..#.", "##..##.#", "###.#..#", "###.....", "##..##.#", "#...####"}
Returns: 246
{"##..##..", "#..#..##", "####...#", "###.####", "##.#...#", ".##.###.", ".#..#.##", ".#..##.."}
Returns: 249
{"##..####", "#####..#", "..#.#...", "#..##.##", ".#.###.#", "####.###", "#.#...#.", "##....#."}
Returns: 275
{"###.#.#.", "#.####.#", "###.#.##", "#..##.#.", "....#.##", "#.#.###.", "#..#.###", ".##.#..#"}
Returns: 274
{".#####..", "#######.", "#.####..", "##.#.###", "#..##..#", ".#...#.#", "#####.#.", "..#..##."}
Returns: 257
{".##..###", ".##.###.", "##.#.##.", "########", ".###.#.#", ".##.##..", ".####.#.", ".#....##"}
Returns: 267
{".####.##", "..#....#", "#####..#", "..###.##", "###.###.", "###.####", "..##..##", "##.##..#"}
Returns: 288
{"#####.#.", "##..####", ".###.###", "###..#..", "##.#..##", "#######.", ".##..##.", "..##..##"}
Returns: 295
{".#..####", "###..###", "#.###...", "#.#..###", "..####.#", "####.###", ".#..####", "###.###."}
Returns: 311
{"..#..###", ".######.", "#..##.##", "###.####", ".#.#..##", "..##.###", "#..#####", "#####.##"}
Returns: 312
{".#####..", "##.#####", "#.###.#.", "#...####", ".######.", ".#####.#", ".#.###.#", "####.##."}
Returns: 306
{"##.###.#", ".#######", "##.#####", "###.##.#", "..###.##", "####.#.#", "####.##.", ".#.#..#."}
Returns: 320
{".#######", ".###.###", "####.#.#", "#.#####.", ".#.#####", "#..##.#.", "##..##.#", "####.###"}
Returns: 341
{"##.#####", ".#..####", "##.####.", "#######.", ".#####.#", "######.#", "###.#.#.", ".###.#.#"}
Returns: 337
{"#####.##", "..#####.", ".#######", "#..#####", "######.#", "#..#####", "#....#.#", "########"}
Returns: 349
{".#######", "#..####.", ".#######", "###.#.##", "#.###.##", "#..#####", "####.#.#", "#######."}
Returns: 357
{"###.###.", "########", "###.####", "##.##.#.", "######..", "###.##.#", "##.#.###", ".#######"}
Returns: 377
{"###.##.#", "####..##", "####.#.#", "##..####", "########", "#.######", "##.###.#", "######.#"}
Returns: 381
{"#####.##", "#....###", "###.####", ".#####..", "########", "####.###", "####.###", "########"}
Returns: 393
{".#####.#", "#####.##", "##.#####", ".#.#####", "########", "########", "#.##..##", "#######."}
Returns: 389
{"#####.#.", ".#######", "#.######", "########", "###.####", "##.##.##", "########", "#.#####."}
Returns: 388
{"###..###", "#.######", "###.####", "########", "########", "####.###", "##.##.#.", "########"}
Returns: 415
{"########", "########", "#.######", "####...#", "########", "########", "########", ".##.###."}
Returns: 416
{"########", "########", "####.###", "#######.", "##..###.", "#.######", "########", "########"}
Returns: 439
{"########", "####.###", "########", "########", "####.###", ".#.#####", "##.#####", "########"}
Returns: 442
{"########", "##.#####", "#.######", "###.####", "########", "######.#", "########", "########"}
Returns: 448
{"####.###", "########", "########", "#.######", "###.####", "########", "########", "########"}
Returns: 457
{"########", "###.####", "########", "########", "#.######", "########", "########", "########"}
Returns: 463
{"########", "########", "########", "########", "########", "########", "########", "#####.##"}
Returns: 466
{"########", "########", "########", "########", "########", "########", "########", "########"}
Returns: 476
{"#.#.####", "#.#.####", "#.#..###", "#.#...##", "#.#.##.#", "#.#.####", "#.#.#..#", "#.#.####" }
Returns: 316
{"........", "........", "........", "........", "........", "........", "........", "........" }
Returns: 0
{"####....", "####....", "####....", "####...#", "####..##", "####...#", "####....", "####...." }
Returns: 217
{"##.#.#..", "######.#", "#####.##", "#####..#", "#######.", "#####..#", "##..####", "#.#.####" }
Returns: 349
{"########", "########", "########", "###..###", "###..###", "########", "########", "########" }
Returns: 459
{"........", "#......#", "........", "........", "........", "........", "#......#", "#......#" }
Returns: 43