Skip to content

Instantly share code, notes, and snippets.

@tzot
Created October 16, 2023 22:39
Show Gist options
  • Save tzot/747451904214efd92f04bb8c7f0cfdcd to your computer and use it in GitHub Desktop.
Save tzot/747451904214efd92f04bb8c7f0cfdcd to your computer and use it in GitHub Desktop.
Υπολογισμός βάσεων σχολών
# υπολογισμός βάσεων
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