Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/brnovais/alien-invasion

Simple alien invasion simulator.
https://github.com/brnovais/alien-invasion

golang interview interview-questions

Last synced: about 1 month ago
JSON representation

Simple alien invasion simulator.

Awesome Lists containing this project

README

        

# Alien Invasion

[![Maintainability](https://api.codeclimate.com/v1/badges/cdc0a301c2bef60829fd/maintainability)](https://codeclimate.com/github/brnovais/alien-invasion/maintainability)

Mad aliens invasion simulator! This is a for fun project used to explore my
abilities as a Golang developer.

## How to use

You need to have [Go](https://go.dev/doc/install) installed to run this code.

### Running

To run the simulation, you can run the following command:

`go run cmd/alien-invasion/main.go`

The following command line options are available:

- n: number of aliens to simulate the invasion
- i: number of iterations the simulation will run
- file: data with cities and its roads

Example:

The following command will run the simulation with 5 aliens for no more than
10 iterations. The world is loaded from file _testdata/data.txt_.

`go run cmd/alien-invasion/main.go -n 5 -i 10 -file testdata/data.txt`

### Compiling

Compiling the code is not mandatory, but you can use go build to generate
an executable to run in your platform.

`go build cmd/alien-invasion/main.go`

## Task description

Mad aliens are about to invade the earth and you are tasked with simulating the
invasion.

You are given a map containing the names of cities in the non-existent world of
X. The map is in a file, with one city per line. The city name is first,
followed by 1-4 directions (north, south, east, or west). Each one represents a
road to another city that lies in that direction.

For example:

Foo north=Bar west=Baz south=Qu-ux
Bar south=Foo west=Bee

The city and each of the pairs are separated by a single space, and the
directions are separated from their respective cities with an equals (=) sign.

You should create N aliens, where N is specified as a command-line argument.

These aliens start out at random places on the map, and wander around randomly,
following links. Each iteration, the aliens can travel in any of the directions
leading out of a city. In our example above, an alien that starts at Foo can go
north to Bar, west to Baz, or south to Qu-ux.

When two aliens end up in the same place, they fight, and in the process kill
each other and destroy the city. When a city is destroyed, it is removed from
the map, and so are any roads that lead into or out of it.

In our example above, if Bar were destroyed the map would now be something
like:

Foo west=Baz south=Qu-ux

Once a city is destroyed, aliens can no longer travel to or through it. This
may lead to aliens getting "trapped".

You should create a program that reads in the world map, creates N aliens, and
unleashes them. The program should run until all the aliens have been
destroyed, or each alien has moved at least 10,000 times. When two aliens
fight, print out a message like:

Bar has been destroyed by alien 10 and alien 34!

(If you want to give them names, you may, but it is not required.) Once the
program has finished, it should print out whatever is left of the world in the
same format as the input file.

Feel free to make assumptions (for example, that the city names will never
contain numeric characters), but please add comments or assertions describing
the assumptions you are making.