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()