class Zavetisce(): def __init__(self): self._psi = Vrsta() self._macki = Vrsta() self._cas = 0 def sprejmi(self, ime, vrsta): if vrsta == 'pes': self._psi.vstavi((ime, self._cas)) else: self._macki.vstavi((ime, self._cas)) self._cas += 1 def oddaj_psa(self): if self._psi.prazna(): return None oddan = self._psi.zacetek()[0] self._psi.odstrani() return oddan def oddaj_macko(self): if self._macki.prazna(): return None oddan = self._macki.zacetek()[0] self._macki.odstrani() return oddan def oddaj_zival(self): if self._macki.prazna(): return self.oddaj_psa() if self._psi.prazna(): return self.oddaj_macko() return self.oddaj_psa() if self._psi.zacetek( )[1] < self._macki.zacetek()[1] else self.oddaj_macko()
class DruzabnaVrsta: def __init__(self): self.vrsta = Vrsta() def dodaj_prisleka(self, ime, skupina): '''doda prišleka, upošteva skupino''' pomozna_vrsta = Vrsta() zadnji_v_vrsti = None st = 0 while not self.vrsta.prazna(): ime1, skupina1 = self.vrsta.zacetek() self.vrsta.odstrani() pomozna_vrsta.vstavi((ime1, skupina1)) st += 1 if skupina == skupina1: zadnji_v_vrsti = st st = 0 while not pomozna_vrsta.prazna(): ime1, skupina1 = pomozna_vrsta.zacetek() pomozna_vrsta.odstrani() self.vrsta.vstavi((ime1, skupina1)) st += 1 if st == zadnji_v_vrsti: self.vrsta.vstavi((ime, skupina)) if zadnji_v_vrsti is None: self.vrsta.vstavi((ime, skupina)) def ime_prvega(self): if not self.vrsta.prazna(): return self.vrsta.zacetek()[0] def postrezi(self): if not self.vrsta.prazna(): self.vrsta.odstrani()
def vzemi_vrsta(vrsta, kolicina): '''iz vrste vzame število izdelkov ali vrže izjemo''' vr = Vrsta() odv_kol = 0 while odv_kol < kolicina and not vr.prazna(): vr.vstavi(vrsta.zacetek()) vrsta.odstrani() odv_kol += vr.zacetek() if odv_kol > kolicina: vrsta.vstavi(odv_kol-kolicina) elif odv_kol < kolicina: while not vr.prazna(): vrsta.vstavi(vr.zacetek()) vr.odstrani() raise IndexError
def kdaj_pridem_na_vrsto(otroci): '''vrne nov seznam, ki vsebuje števila od 1 naprej''' ind = 0 vrsta = Vrsta() for moc in otroci: vrsta.vstavi((moc, ind)) ind += 1 novSeznam = list() for i in range(ind): novSeznam.append(0) stOtroka = 1 #številke so od 1 do i while not vrsta.prazna(): najmocnejsi = ( 0, 0) #otrok z najmočnejšo močjo je na začetku kar prvi otrok vrsta.vstavi(None) while vrsta.zacetek( ) != None: #pregledamo celo vrsto, dokler ne pridemo do zadnjega, ki ima najmanjši ind prviOtrok = vrsta.zacetek() vrsta.odstrani() if prviOtrok[0] > najmocnejsi[0]: najmocnejsi = prviOtrok #dobimo novega otroka z največjo močjo vrsta.vstavi(prviOtrok) vrsta.odstrani() while vrsta.zacetek() != najmocnejsi: prviOtrok = vrsta.zacetek() vrsta.odstrani() vrsta.vstavi(prviOtrok) vrsta.odstrani() novSeznam[najmocnejsi[1]] = stOtroka stOtroka += 1 return novSeznam
class Zavetisce: def __init__(self): self._pes = Vrsta() self._macka = Vrsta() self._cas = 0 def sprejmi(self, ime, vrsta): '''evidentira novo zival z imenom IME, ki je pripadnik neke vrste vrsta''' if vrsta == 'pes': self._pes.vstavi((ime, self._cas)) else: self._macka.vstavi((ime, self._cas)) self._cas += 1 def oddaj_psa(self): '''vrne ime psa, ki je na vrsti za posvojitev''' if self._pes.prazna(): return None oddamoPsa = self._pes.zacetek() self._pes.odstrani() return oddamoPsa[0] def oddaj_macko(self): '''vrne ime macke, ki je na vrsti za posvojitev''' if self._macka.prazna(): return None oddamoMacko = self._macka.zacetek() self._macka.odstrani() return oddamoMacko[0] def oddaj_zival(self): '''v posvojitev da tisto žival, ki je prva na vrsti''' if self._macka.prazna(): return self.oddaj_psa() elif self._pes.prazna(): return self.oddaj_macko() else: macka = self._macka.zacetek() pes = self._pes.zacetek() if macka[1] < pes[1]: return self.oddaj_macko() else: return self.oddaj_psa()
def pregled_po_nivojih(zacetno_drevo): '''pregleda drevo po nivojih''' vrsta = Vrsta([zacetno_drevo]) while not vrsta.prazna(): drevo = vrsta.zacetek() if not drevo.prazno: vrsta.vstavi(drevo.levo) vrsta.vstavi(drevo.desno) yield drevo.podatek vrsta.odstrani()
def prestej_elemente(v): pomozna = Vrsta() stevec = 0 while not v.prazna(): pomozna.vstavi(v.zacetek()) stevec += 1 v.odstrani() while not pomozna.prazna(): v.vstavi(pomozna.zacetek()) pomozna.odstrani() return stevec
def odstrani_pogojno(v, p): pomozna = Vrsta() while not v.prazna(): if p(v.zacetek()): v.odstrani() continue pomozna.vstavi(v.zacetek()) v.odstrani() while not pomozna.prazna(): v.vstavi(pomozna.zacetek()) pomozna.odstrani()
def prestej_pogojno(v, p): pomozna = Vrsta() stevec = 0 while not v.prazna(): if p(v.zacetek()): stevec += 1 pomozna.vstavi(v.zacetek()) v.odstrani() while not pomozna.prazna(): v.vstavi(pomozna.zacetek()) pomozna.odstrani() return stevec
def pregled_po_nivojih(d): '''Vrača pregled dvojiškega drevesa po nivojih.''' vrsta = Vrsta() vrsta.vstavi(d) while not vrsta.prazna(): poddrevo = vrsta.zacetek() vrsta.odstrani() if not poddrevo.prazno: yield poddrevo.podatek vrsta.vstavi( poddrevo.levo ) # Vstavimo v vrsto, naprej levo in nato desno poddrevo vrsta.vstavi(poddrevo.desno)
def odstrani_ntega(v, n): pomozna = Vrsta() stevec = 0 while not v.prazna(): if stevec == n: v.odstrani() stevec += 1 continue stevec += 1 pomozna.vstavi(v.zacetek()) v.odstrani() while not pomozna.prazna(): v.vstavi(pomozna.zacetek()) pomozna.odstrani()
def moc_najmocnejsega_v_vrsti(vrs): '''Vrne moč otroka, ki ima v vrsti največjo moč''' vr = Vrsta() st = 0 naj_st = 0 while not vrs.prazna(): st = vrs.zacetek()[1] naj_st = max(naj_st, st) vr.vstavi(vrs.zacetek()) vrs.odstrani() while not vr.prazna(): vrs.vstavi(vr.zacetek()) vr.odstrani() return naj_st
def kdaj_pridem_na_vrsto(otrok): '''Sprejme seznam otrok- "vrsto" pred kioskom in vrne seznam, v katerem je izračunano, koliko časa bo moral otrok čakati na sladoled''' sez = [0] * len(otrok) vrsta = Vrsta() cas = 1 for i, el in enumerate(otrok): vrsta.vstavi((i, el)) while not vrsta.prazna(): st = vrsta.zacetek()[1] moč = moc_najmocnejsega_v_vrsti(vrsta) if st < moč: vrsta.vstavi(vrsta.zacetek()) #vstavi na konec vrsta.odstrani() else: sez[vrsta.zacetek()[0]] = cas vrsta.odstrani() cas += 1 return sez
def dodaj_prisleka(self, ime, skupina): '''doda prišleka, upošteva skupino''' pomozna_vrsta = Vrsta() zadnji_v_vrsti = None st = 0 while not self.vrsta.prazna(): ime1, skupina1 = self.vrsta.zacetek() self.vrsta.odstrani() pomozna_vrsta.vstavi((ime1, skupina1)) st += 1 if skupina == skupina1: zadnji_v_vrsti = st st = 0 while not pomozna_vrsta.prazna(): ime1, skupina1 = pomozna_vrsta.zacetek() pomozna_vrsta.odstrani() self.vrsta.vstavi((ime1, skupina1)) st += 1 if st == zadnji_v_vrsti: self.vrsta.vstavi((ime, skupina)) if zadnji_v_vrsti is None: self.vrsta.vstavi((ime, skupina))