This project is meant to make you code a digital version of an ant farm.
Create a program `lem-in` that will read from a file (describing the ants and the colony) given in the arguments.
Upon successfully finding the quickest path, `lem-in` will display the content of the file passed as argument and each move the ants make from room to room.
- Some colonies will have many rooms and many links, but no path between `##start` and `##end`.
- Some will have rooms that link to themselves, sending your path-search spinning in circles, some will have too many/too few ants, no `##start` or `##end`, duplicated rooms, links to unknown rooms, rooms with invalid coordinates and a variety of other invalid or poorly-formatted input. In this cases the program will return an error message `ERROR: invalid data format`.
- A room is defined by `"name coord_x coord_y"`, and will usually look like `"Room 1 2", "nameoftheroom 1 6", "4 6 7"`.
- The links are defined by `"name1-name2"` and will usually look like `"1-2", "2-5"`.
Here is an example of this in practice :
```
##start
1 23 3
2 16 7
#comment
3 16 3
4 16 5
5 9 3
6 1 5
7 4 8
##end
0 9 5
0-4
0-6
1-3
4-3
5-2
3-5
#another comment
4-2
2-1
7-6
7-2
7-4
6-5
```
Which corresponds to the following representation :
```console
_________________
/ \
____[5]----[3]--[1] |
/ | / |
[6]---[0]----[4] / |
\ ________/| / |
\ / [2]/________/
[7]_________/
```
This project will help you learn about :
- Algorithmics
- Ways to receive data
- Ways to output data
- Manipulation of strings
- Manipulation of structures
### Bonus
- As a bonus you have to create an ant farm visualizer that shows the ants moving trough the colony.
- Here is an usage example : `./lem-in ant-farm.txt | ./visualizer`
- The coordinates of the room will be useful only here.
### Instructions
- You need to create tunnels and rooms.
- A room will never start with the letter `L` or with `#` and must have no spaces.
- You join the rooms together with as many tunnels as you need.
- A tunnel joins only two rooms together never more than that.
- A room can be linked to an infinite number of rooms and by as many tunnels as deemed necessary.
- Each room can only contain one ant at a time (except at `##start` and `##end` which can contain as many ants as necessary).
- To be the first to arrive, ants will need to take the shortest path or paths. They will also need to avoid traffic jams as well as walking all over their fellow ants.
- You will only display the ants that moved at each turn, and you can move each ant only once and through a tunnel (the room at the receiving end must be empty).
- The rooms names will not necessarily be numbers, and in order.
- Any unknown command will be ignored.
- The program must handle errors carefully. In no way can it quit in an unexpected manner.
- The coordinates of the rooms will always be `int`.