# Нисходящее проектирование

def strip_car_name(line):
    tab_pos = line.find("\t")
    return line[:tab_pos]

def break_numbers(line):
    source = line.split(" ")
    result = []
    for s in source:
        if len(s) > 0:
            result.append(s)
    return result

def break_line_into_fields(line):
    only_numbers = strip_car_name(line)
    fields = break_numbers(only_numbers)
    return (float(fields[0]), int(fields[7]))

def read_data():
    data = []
    f = open("auto-mpg.data", "r", encoding="UTF-8")
    for line in f:
        if line.endswith("\n"):
            line = line[:-1]
        fields = break_line_into_fields(line)
        data.append(fields)
    return data


def calculate_average_mpg(data):
    regions = {} # {reg: [mpg, mpg, mpg...], reg: [mpg, mpg, ...]}
    for d in data:
        mpg, reg = d
        if reg not in regions:
            regions[reg] = []
        regions[reg].append(mpg)
    average = {} # {reg: average_mpg, reg: average_mpg}
    for reg, mpg_list in regions.items():
        average[reg] = sum(mpg_list) / len(mpg_list)
    return average


def print_results(results):
    region_names = {1: "USA", 2: "Europe", 3: "Asia"}
    sorted_results = sorted(results.items(), key=lambda e: e[1])
    for res in sorted_results:
        reg, avg_mpg = res
        reg_name = region_names[reg]
        print(f"{reg_name:10} {avg_mpg:5.5}")


# data = [(mgp, reg), (mpg, reg), ...]
data = read_data()
average = calculate_average_mpg(data)
print_results(average)