Created
October 16, 2023 22:39
-
-
Save tzot/747451904214efd92f04bb8c7f0cfdcd to your computer and use it in GitHub Desktop.
Υπολογισμός βάσεων σχολών
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# υπολογισμός βάσεων | |
from typing import List, NamedTuple | |
class Μαθητής(NamedTuple): | |
όνομα: str | |
μόρια: int | |
σχολές: List[str] | |
class Σχολή(NamedTuple): | |
όνομα: str | |
χωρητικότητα: int | |
def βρες_βάσεις(μαθητές: List[Μαθητής], σχολές: List[Σχολή]): | |
χωρητικότητα = {e.όνομα: e.χωρητικότητα for e in σχολές} | |
βάσεις = {} # το αποτέλεσμα | |
μαθητές.sort(key=lambda e: e.μόρια, reverse=True) | |
for μαθητής in μαθητές: | |
for σχολή_του in μαθητής.σχολές: | |
if χωρητικότητα[σχολή_του] > 0 \ | |
or βάσεις.get(σχολή_του) == μαθητής.μόρια: | |
βάσεις[σχολή_του] = μαθητής.μόρια | |
χωρητικότητα[σχολή_του] -= 1 | |
break # επόμενος μαθητής | |
return βάσεις | |
# examples | |
if 0: | |
M=Μαθητής | |
S=Σχολή | |
βρες_βάσεις([ | |
M("Χ", 18000, ["Πάτρα", "Αθήνα", "Πειραιάς", "Θεσσαλονίκη"]), | |
M("Ν", 19000, ["Πάτρα", "Πειραιάς", "Γιάννενα"]), | |
M("Β", 19100, ["Αθήνα", "Θεσσαλονίκη", "Πάτρα", "Γιάννενα"]), | |
M("Α", 18100, ["Γιάννενα", "Βόλος"]), | |
], [ | |
S("Αθήνα", 2), | |
S("Θεσσαλονίκη", 2), | |
S("Πάτρα", 2), | |
S("Γιάννενα", 1), | |
]) | |
# → {'Αθήνα': 19100, 'Πάτρα': 18000, 'Γιάννενα': 18100} | |
βρες_βάσεις([ | |
M("Χ", 18000, ["Πάτρα", "Αθήνα", "Πειραιάς", "Θεσσαλονίκη"]), | |
M("Ν", 19000, ["Πάτρα", "Πειραιάς", "Γιάννενα"]), | |
M("Β", 19100, ["Αθήνα", "Θεσσαλονίκη", "Πάτρα", "Γιάννενα"]), | |
M("Α", 18100, ["Γιάννενα", "Βόλος"]), | |
], [ | |
S("Αθήνα", 2), | |
S("Θεσσαλονίκη", 2), | |
S("Πάτρα", 1), | |
S("Γιάννενα", 1), | |
]) | |
# → {'Αθήνα': 18000, 'Πάτρα': 19000, 'Γιάννενα': 18100} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment