diff --git a/solutions/python/tisbury-treasure-hunt/2/tuples.py b/solutions/python/tisbury-treasure-hunt/2/tuples.py new file mode 100644 index 0000000..5f98910 --- /dev/null +++ b/solutions/python/tisbury-treasure-hunt/2/tuples.py @@ -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) is 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 \ No newline at end of file