Exemple #1
0
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()
Exemple #2
0
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
Exemple #4
0
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
Exemple #5
0
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()
Exemple #7
0
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
Exemple #8
0
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()
Exemple #9
0
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
Exemple #10
0
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)
Exemple #11
0
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
Exemple #14
0
    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))