Task 1 - Robbie the Map Reader
Background
Robbie, our dear robot, was assigned a mission to explore Mars. He is very excited about this mission.
His first task is to explore the map of Mars. For simplicity, the map of Mars is represented by a 2D grid of n_rows rows and n_cols columns. A location on the map at row Y and column X is denoted by a pair (Y,X). This grid's origin location (0, 0) is the top left corner, with (n_rows-1, n_cols-1) being the bottom right corner.
Robbie was given a file geo_features.txt containing the size of the map and its geological features. This file employs comma-separated values and has the following format:
· The first line contains two (2) integer numbers for n_rows and n_cols, respectively.
· Each of the remaining lines of the file contains information about a geological feature, including:
o Two integers represent the location of this geological feature.
o A string (in lowercase) represents the type of this geological feature. There are 3 types: mountain, lake, or crater.
o A string (in lowercase) represents the name of this geological feature.
o An integer represents:
§ the mountain height if this is a mountain.
§ the depth of the lake if this is a lake.
§ the perimeter of the crater if this is a crater.
An example of geo_features.txt file:
4,5
1,1,mountain,olympus mons,21
2,4,lake,eridania,10
3,2,crater,huygens,45
Your tasks
You will write the code in the following files to assist Robbie's mission.
# geo_features.py
The geological_features.py module provides the base class and subclasses for geological features. The GeoFeature class will be the overarching abstract base class for all geological features. This class will have child classes Mountain, Lake, and Crater.
# task1.py
The task1.py module provides user interaction with Robbie.
If this module has "__main__" as it's __name__ value, it should load geo_features.txt before displaying a prompt > (greater sign and a whitespace) for user input.
· The user can input show map to show the map. The map is represented by letters, where a . showing a location without a geological feature, m for a mountain, l for a lake, and c for a crater (see example 1).
· The user can input info where and are integers corresponding to a location (Y,X) that Robbie wants to inspect. If a geological feature exists at this location, its details will be displayed. Otherwise, a message no information found will be shown (see example 2).
· The user can input quit. The program should print goodbye and finish running normally.
You can assume that and correspond to a valid location on the map.
You can assume that all user inputs are valid.
You are allowed to modify the import statements in the scaffold, but you are not allowed to import any modules which were not originally imported in the scaffold.
Examples
Example 1
> show map
.....
.m...
....l
..c..
> quit
goodbye
Example 2
> info 1 1
mountain olympus mons, height 21
> info 2 4
lake eridania, depth 10
> info 3 2
crater huygens, perimeter 45
> info 2 2
no information found
> quit
goodbye
Task1
Geo_features.txt :
4,5
1,1,mountain,olympus mons,21
2,4,lake,eridania,10
3,2,crater,huygens,45
Task1.py:
import geo_features
if __name__ == "__main__":
pass
Geo_features.py :
from abc import ABC, abstractmethod
from dataclasses import dataclass
@dataclass
class Location:
Y: int = 0
X: int = 0
def __str__(self):
return f"({self.Y},{self.X})"
@dataclass
class Size:
height: int = 0
width: int = 0
class GeoFeature(ABC):
pass
class Mountain(GeoFeature):
pass
class Lake(GeoFeature):
pass
class Crater(GeoFeature):
pass