Seite 2 von 2

Re: Hilfe bei Python Programm

Verfasst: Freitag 29. Oktober 2021, 23:43
von __blackjack__
Das Ergebnis hatte ich doch auch für das Beispiel.

Hier ist mein Python-Programm ohne externe Abhängigkeiten und ohne die Optimierung aus dem BASIC-Programm:

Code: Alles auswählen

#!/usr/bin/env python3


def get_date_count(preference_table):
    return len(preference_table[0]) if preference_table else 0


def parse_lines(lines):
    rows = (list(map(int, line.split())) for line in lines)

    (member_count, date_count), *preference_table = rows

    if len(preference_table) != member_count or not all(
        len(row) == date_count for row in preference_table
    ):
        raise ValueError("mismatch between counts and table size")

    return preference_table


def has_swap(ratings, date_index):
    current_rating = ratings[date_index]
    return any(rating < current_rating for rating in ratings)


def calculate_swap_count(preference_table, date_index):
    return sum(has_swap(ratings, date_index) for ratings in preference_table)


def calculate_swap_counts(preference_table):
    return [
        calculate_swap_count(preference_table, date_index)
        for date_index in range(get_date_count(preference_table))
    ]


def get_result(swap_counts):
    return min(
        (swap_count, date_number)
        for date_number, swap_count in enumerate(swap_counts, 1)
    )


def main():
    for i in range(6):
        with open(f"praeferenzen{i}.txt", encoding="ascii") as lines:
            preference_table = parse_lines(lines)

        swap_counts = calculate_swap_counts(preference_table)
        swap_count, date_number = get_result(swap_counts)
        print(
            f"{i}: An Termin Nr. {date_number}"
            f" war{'' if swap_count == 1 else 'en'} {swap_count} Wechsel"
            f" notwendig."
        )


if __name__ == "__main__":
    main()