Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions solutions/python/tisbury-treasure-hunt/1/tuples.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
"""Functions to help Azara and Rui locate pirate treasure."""


def get_coordinate(record):
"""Return coordinate value from a tuple containing the treasure name, and treasure coordinate.

:param record: tuple - with a (treasure, coordinate) pair.
:return: str - the extracted map coordinate.
"""

coordinate = record[1]
return coordinate


def convert_coordinate(coordinate):
"""Split the given coordinate into tuple containing its individual components.

:param coordinate: str - a string map coordinate
:return: tuple - the string coordinate split into its individual components.
"""

return tuple(coordinate)


def compare_records(azara_record, rui_record):
"""Compare two record types and determine if their coordinates match.

:param azara_record: tuple - a (treasure, coordinate) pair.
:param rui_record: tuple - a (location, tuple(coordinate_1, coordinate_2), quadrant) trio.
:return: bool - do the coordinates match?
"""

azara_coord = tuple(azara_record[-1])
rui_coord = tuple(rui_record[1])
return azara_coord == rui_coord


def create_record(azara_record, rui_record):
"""Combine the two record types (if possible) and create a combined record group.

:param azara_record: tuple - a (treasure, coordinate) pair.
:param rui_record: tuple - a (location, coordinate, quadrant) trio.
:return: tuple or str - the combined record (if compatible), or the string "not a match" (if incompatible).
"""

if compare_records(azara_record, rui_record) == True:
return azara_record + rui_record
return "not a match"


def clean_up(combined_record_group):
"""Clean up a combined record group into a multi-line string of single records.

:param combined_record_group: tuple - everything from both participants.
:return: str - everything "cleaned", excess coordinates and information are removed.

The return statement should be a multi-lined string with items separated by newlines.

(see HINTS.md for an example).
"""

report = ""

for inner_tuple in combined_record_group:
# inner_tuple: (treasure, coordinate, location, (coord1, coord2), quadrant)
coord = f"'{inner_tuple[3][0]}', '{inner_tuple[3][1]}'"
report += f"('{inner_tuple[0]}', '{inner_tuple[2]}', ({coord}), '{inner_tuple[4]}')\n"
return report