# Bats Bunker

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).

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.

Example:

```checkio([
"B--",
"---",
"--A"]) == 2.83
checkio([
"B-B",
"BW-",
"-BA"]) == 4
checkio([
"BWB--B",
"-W-WW-",
"B-BWAB"]) == 12
checkio([
"B---B-",
"-WWW-B",
"-WA--B",
"-W-B--",
"-WWW-B",
"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.

Precondition:
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 Bat always exists.

45
Settings
Code:
Other:
Invalid hot key. Each hot key should be unique and valid
Hot keys:
•  to Run Code: to Check Solution: to Stop:
CheckiO Extensions

CheckiO Extensions allow you to use local files to solve missions. More info in a blog post.

In order to install CheckiO client you'll need installed Python (version at least 3.8)

Install CheckiO Client first:

`pip3 install checkio_client`

`checkio --domain=py config --key=`

Sync solutions into your local folder

`checkio sync`

(in beta testing) Launch local server so your browser can use it and sync solution between local file end extension on the fly. (doesn't work for safari)

`checkio serv -d`

Alternatevly, you can install Chrome extension or FF addon

`checkio install-plugin`
`checkio install-plugin --ff`
`checkio install-plugin --chromium`

Read more here about other functionality that the checkio client provides. Feel free to submit an issue in case of any difficulties.

Pair Programming (Beta-version)

Welcome to Pair Programming! Engage in real-time collaboration on coding projects by starting a session and sharing the provided unique URL with friends or colleagues. This feature is perfect for joint project development, debugging, or learning new skills together. Simply click 'Start Session' to begin your collaborative coding journey!

Waiting for Pair Programming to start...

You are trying to join a pair programming session that has not started yet.

Please wait for the session creator to join.

Waiting for Pair Programming to reconnect...

It looks like the creator of the pair programming session closed the editor window.

It might happen accidentally, so that you can wait for reconnection.