class Gruppe: def __init__(self, krav): self._krav = krav self._personer = [] def legg_til_personer(self, nye_personer): for person in nye_personer: self._personer.append(person) def hent_personer(self): return self._personer def hent_krav(self): return self._krav class Rom: def __init__(self, romnr, ant_senger, fasiliteter): self._romnr = romnr self._ant_senger = ant_senger self._fasiliteter = fasiliteter self._opptatt = False self._gjester = [] def reserver(self, nye_gjester): if not self._opptatt: for gjest in nye_gjester: self._gjester.append(gjest) self._opptatt = True else: print("Rommet er opptatt") def hent_ant_senger(self): return self._ant_senger def passer(self, krav): for kravet in krav: if kravet not in self._fasiliteter: return False return True def __str__(self): fasilitet_streng = "" for fasilitet in self._fasiliteter: fasilitet_streng += fasilitet + ", " fasilitet_streng = fasilitet_streng.strip(", ") return f"Rom {self._romnr}\n{self._ant_senger} senger\nFasiliteter: {fasilitet_streng}\n" class Hotell: def __init__(self, navn): self._hotellnavn = navn self._rom = {} fil = open(navn + ".txt") for linje in fil: linje = linje.strip().split(" ") romnr = int(linje[0]) ant_senger = int(linje[1]) fasiliteter = linje[2:] nytt_rom = Rom(romnr, ant_senger, fasiliteter) self._rom[romnr] = nytt_rom def reserver_rom(self, romnr, gjester): if romnr in self._rom: self._rom[romnr].reserver(gjester) else: print(f"Rommet {romnr} eksisterer ikke.") def finn_passende_rom(self, krav): passende = [] for rom in self._rom.values(): if rom.passer(krav): passende.append(rom) return passende class Reservasjonssystem: def __init__(self, hotellnavn): self._hoteller = {} for navn in hotellnavn: nytt_hotell = Hotell(navn) self._hoteller[navn] = nytt_hotell def reserver_rom_i_hotell(self, hotellnavn, romnr, gjester): if hotellnavn in self._hoteller: self._hoteller[hotellnavn].reserver_rom(romnr, gjester) else: print(f"Hotellet {hotellnavn} eksisterer ikke.") def _finn_alle_passende_rom(self, fasiliteter): passende = {} for hotellnavn in self._hoteller: passende_rom = self._hoteller[hotellnavn].finn_passende_rom(fasiliteter) if len(passende_rom) > 0: passende[hotellnavn] = passende_rom return passende def gruppe_reservasjon(self, gruppe): bekreftelse = [] passende_hoteller = self._finn_alle_passende_rom(gruppe.hent_krav()) for hotell in passende_hoteller: for rom in passende_hoteller[hotell]: bekreftelses_streng = hotell + ":\n" senger = rom.hent_ant_senger() rom_gruppe = [] while senger > 0 and len(gruppe.hent_personer()) > 0: rom_gruppe.append(gruppe.hent_personer().pop(0)) senger -= 1 rom.reserver(rom_gruppe) bekreftelses_streng += str(rom) bekreftelse.append(bekreftelses_streng) if len(gruppe.hent_personer()) == 0: return bekreftelse if len(bekreftelse) == 0: return "Ingen passende rom" elif len(gruppe.hent_personer()) > 0: print(f"{len(gruppe.hent_personer())} personer fra gruppa fikk ikke plass") return bekreftelse def hovedprogram(): r = Reservasjonssystem(["Lacetta"]) gruppe = Gruppe(["bad"]) gruppe.legg_til_personer(["Timothy", "Adam", "Monica", "Person1", "Person2", "Person3"]) print(r.gruppe_reservasjon(gruppe)) hovedprogram()