Bats Bunker Bats Bunker
English ES RU

While searching for an adventure on the island, our robotic trio found a creepy old bunker. In the bunker, someone has hidden a rare and powerful computer chip which the robots hope to install on their spaceship. Our adventurous heroes have tried to search for this chip, but the bunker is occupied by robo-bats and the Alpha Bat appears to be in possession of the chip. In order to obtain the chip, the robots must capture Alpha Bat. This is no easy feat though; the bunker is filled with bat scouts which will alert the others if they spot intruders. If we want to catch the Alpha Bat, we will need to know the amount of time it takes for the alert sent by the scout near the entrance to reach the Alpha Bat.

We have the advantage that the bunker's walls do not reflect sound, so the alert signals can extend only in a straight line. The time it takes an alert to move between two bats is proportional to the Euclidean distance between cell centers (see the illustration). The time for the alert to travel between neighbouring cells is 1 second. Alert "lines" cannot pass through walls or around corners.

You are given the map of bunker as a list of strings:
"-" is an empty cell
"W" is a wall
"B" is a bat
"A" is the Alpha Bat
The entrance is placed at top left cell and there's always a bat right there (be careful, the Alpha bat can be here too).

You should calculate the minimal possible time for the alert to reach the leader with a precision of two digits (±0.01).

bats-bunker bats-bunker

Input: A map of the bunker as a list of strings.

Output: The minimal possible time with a precision of two digits as a float.


    "--A"]) == 2.83
    "-BA"]) == 4
    "B-BWAB"]) == 12
    "B-BWB-"]) == 9.24

How it is used: This task is a tricky search problem. It teaches you how to build a graph and determine the line of visibility for the Bats. These concepts can help develop security in the form of CCTV placement, process lighting and even add search and discover algorithms to in game AI.

3 ≤ len(bunker) ≤ 7
all(3 ≤ len(row) ≤ 7 and len(row) == len(bunker[0]) for row in bunker)
bunker[0][0] == "B" or bunker[0][0] == "A"
The Alpha bat can be only one.
Path from left corner to Alpha Bet always exists.