예제 #1
0
    def odstrani_najmlajsega_najvecjega(self):
        """
        Iz sklada odstrani najmlajsi najvecji element
        """
        naj = 0
        ponovitve_naj = 0
        pomozen = Sklad()
        while not self.prazen():
            el = self.vrh()
            self.odstrani()
            if el > naj:
                naj = el
                ponovitve_naj = 1
            elif el == naj:
                ponovitve_naj += 1
            pomozen.vstavi(el)

        while not pomozen.prazen():
            el = pomozen.vrh()
            if el == naj:
                if ponovitve_naj == 1:
                    pomozen.odstrani()
                    continue
                else:
                    ponovitve_naj -= 1
                    self.vstavi(el)
            else:
                self.vstavi(el)
            pomozen.odstrani()
예제 #2
0
def pregled_po_skladu(zacetno_drevo):
    '''pregleda drevo s skladom'''
    sklad = Sklad()
    sklad.vstavi(zacetno_drevo)
    while not sklad.prazen():
        drevo = sklad.poberi()
        if not drevo.prazno:
            sklad.vstavi(drevo.levo)
            sklad.vstavi(drevo.desno)
            yield drevo.podatek
def je_lahko_BST(pre):
    '''preveri ali premi pregled lahko predstavlja dvojiško iskalno drevo'''
    s = Sklad()

    # Trenutni koren = -inf
    koren = float('-inf')

    # Sprehodi se čez seznam
    for vrednost in pre:
        #Opomba:vrednost = pre[i] po
        #danem algoritmu

        # Če najdemo vrednost, ki je manjša od korena, vrni False
        if vrednost < koren:
            return False

        # Če je vrednost(pre[i]) v desnem poddrevesu
        # Odstrani elemente, ki so manjši kot je koren
        # in naredi zadnjega kot koren
        while not s.prazen() and s.vrh() < vrednost:
            koren = s.vrh()
            s.odstrani()

        # Na tej točki je sklad prazen ali je vrednost manjša
        # od korena, vstavi vrendost
        s.vstavi(vrednost)

    return True
예제 #4
0
def oklepaji(niz):
    s = Sklad()
    for c in niz:
        if c in OKLEPAJI:
            s.vstavi(c)
        if c in OKLEPAJI.values():
            if s.prazen() or OKLEPAJI[s.vrh()] != c:
                return False
            s.odstrani()
    return s.prazen()
예제 #5
0
def preveri_HTML(ime_dat=''):
    '''preveri ali je html datoteka pravilno sestavljena'''
    s = Sklad()
    for znacka, st in znacke(ime_dat):
        if st == 1:
            s.vstavi((znacka, st))
        if st == 2:
            if s.prazen() or znacka != s.vrh()[0]:
                return False
            s.odstrani()
    return s.prazen()
예제 #6
0
def vrednost_z_vsemi_oklepaji(izraz):
    sklad_vrednosti = Sklad()
    sklad_operacij = Sklad()
    for znak in cleni_izraza(izraz):
        if znak in {'+','*','**'}:
            sklad_operacij.vstavi(znak)
        elif znak.isdigit():
            sklad_vrednosti.vstavi(int(znak))
        elif znak == ')':
            izvedi_racun(sklad_operacij,sklad_vrednosti)
    return sklad_vrednosti.vrh()
예제 #7
0
def obrni(v):
    pomozni = Sklad()
    while not v.prazna():
        pomozni.vstavi(v.zacetek())
        v.odstrani()
    while not pomozni.prazen():
        v.vstavi(pomozni.vrh())
        pomozni.odstrani()
예제 #8
0
def vrednost_rpn(niz):
    '''Izračuna vrednost RPN izraza preko tega, da po dve števili shranjujemo v sklad.'''
    s = Sklad()
    for znak in niz.split():
        try:
            int(znak)
            s.vstavi(znak) # Število dodamo v sklad
        except:
            prvoSt = s.poberi()
            drugoSt = s.poberi()
            s.vstavi(str(eval(prvoSt + znak + drugoSt)))
    return int(s.poberi())
예제 #9
0
def upor_vezja(niz):
    '''Izračuna upor vezja s pomočjo sklada.'''
    print(niz)
    sklad = Sklad()
    for znak in niz.split():
        if znak in 'VZ':
            drugiEl = sklad.poberi()
            prviEl = sklad.poberi()
            sklad.vstavi(nadomestni_upor(float(prviEl), float(drugiEl), znak))
        else:  # Imamo število
            sklad.vstavi(float(znak))
    return sklad.poberi()
예제 #10
0
def locevanje(sklad):
    seznam = [Sklad() for i in range(10)]
    obrat = Sklad()
    while not sklad.prazen():
        obrat.vstavi(sklad.vrh())
        sklad.odstrani()
    while not obrat.prazen():
        x = obrat.vrh()
        obrat.odstrani()
        sklad.vstavi(x)
        seznam[(x % 10)].vstavi(x)

    return seznam
예제 #11
0
def oklepaji(niz):
    """Preveri, ali so v danem nizu oklepaji pravilno gnezdeni"""
    sklad_oklepajev = Sklad()
    oklep = {'(': ')', '{': '}', '[': ']', '<': '>'}
    for znak in niz:
        if znak in oklep.keys():
            sklad_oklepajev.vstavi(znak)
        elif znak in oklep.values():
            if sklad_oklepajev.prazen(
            ) or znak != oklep[sklad_oklepajev.vrh()]:
                return False
            sklad_oklepajev.odstrani()
    return sklad_oklepajev.prazen()
예제 #12
0
def vagoni(prihod, odhod):
    '''Ali se lahko vlaki prerazporedijo'''
    vhod, izhod, slepi = Sklad(), Sklad(), Sklad()
    for el in prihod:
        vhod.vstavi(el)
    for el in odhod:
        izhod.vstavi(el)
    while not izhod.prazen():
        nasl = izhod.vrh()
        izhod.odstrani()
        while slepi.prazen() or slepi.vrh() != nasl:
            if vhod.prazen():
                return False
            slepi.vstavi(vhod.vrh())
            vhod.odstrani()
        slepi.odstrani()
    return True
예제 #13
0
def obicajni_zapis(izraz):
    '''Vrne običanji zapis računanja.'''
    sklad = Sklad()
    obicajni_izraz = ''
    for znak in izraz.split():
        try:
            int(znak)
            sklad.vstavi(znak) # Število dodamo v sklad
        except:
            drugiIzraz = sklad.poberi()
            prviIzraz = sklad.poberi()
            obicajni_izraz
            sklad.vstavi('({0} {1} {2})'.format(prviIzraz, znak, drugiIzraz))
    return sklad.poberi()
def oklepaji(niz):
    '''Preveri, ali so oklepaji pravilno gnezdeni. Vrne True ali False.'''
    sklad = Sklad()
    for znak in niz:
        if znak in slovar_oklep:  # ce je znak v slovarju oklepaji, ga doda v sklad
            sklad.vstavi(znak)
        elif znak in slovar_oklep.values():  # ce je znak zaklepaj
            if sklad.prazen():
                return False
            if not slovar_oklep[sklad.vrh()] == znak:  # ce vrh ni enak znaku
                return False
            # nasli smo ustrezen par oklepajev
            sklad.odstrani()
    return sklad.prazen()  # ce je sklad prazen, vrne True, sicer pa False
def prestej_elemente(s):
    pomozen = Sklad()
    stevec = 0
    while not s.prazen():
        pomozen.vstavi(s.vrh())
        stevec += 1
        s.odstrani()
    while not pomozen.prazen():
        s.vstavi(pomozen.vrh())
        pomozen.odstrani()
    return stevec
def locevanje(sklad):
    '''Vrne seznam desetih skladov, pri cemer i-ti sklad vsebuje tista stevila
     s sklada sklad, ki dajo ostanek i pri deljenju z 10'''
    seznam = [Sklad() for i in range(10)] #seznam desedtih skladov
    obrat = Sklad() #pomozni sklad
    while not sklad.prazen():
        obrat.vstavi(sklad.vrh())
        sklad.odstrani()
    while not obrat.prazen():
        x = obrat.vrh()
        obrat.odstrani()
        sklad.vstavi(x)
        seznam[(x % 10)].vstavi(x)

    return seznam
예제 #17
0
def vzemi_sklad(sklad, kolicina):
    '''iz sklada vzame število izdelkov ali vrže izjemo'''
    pom = Sklad()
    odv_kol = 0
    while odv_kol < kolicina and not sklad.prazen():
        pom.vstavi(sklad.vrh())
        sklad.odstrani()
        odv_kol += pom.vrh()
    if odv_kol > kolicina:
        sklad.vstavi(odv_kol - kolicina)
    elif odvzeta_kolicina < kolicina:
        while not pom.prazen():
            sklad.vstavi(pom.vrh())
            pom.odstrani()
        raise IndexError
 def odstrani_najvecje(self):
     '''Odstrani vse največje'''
     if self.prazen():
         return None
     naj = float('-inf')
     pomozni = Sklad()
     while not self.prazen():
         el = self.vrh()
         self.odstrani()
         naj = max(el, naj)
         pomozni.vstavi(el)
     while not pomozni.prazen():
         if naj != pomozni.vrh():
             self.vstavi(pomozni.vrh())
         pomozni.odstrani()
예제 #19
0
def nadomestni_upor(r1, r2, tipV):
    '''Vrne nadomestni upor vezja. Argumenta sta dve stevili r1 in r2
    ter tip vezave, ki je bodisi znak 'V' ali 'Z' '''
    sklad = Sklad()
    if tipV == 'Z':
        return r1 + r2
    if tipV == 'V':
        if 0 in (r1, r2):
            return 0
        return (r1 * r2) / (r1 + r2)
def permutacija_s_skladom(sez):
    '''Ali lahko dano permutacijo sestavimo s skladom'''
    n=0
    s = Sklad()
    for el in sez:
        while n < el:
            n+=1
            s.vstavi(n)
        if s.prazen() or el != s.vrh():
            return False
        s.odstrani()
    return True
예제 #21
0
def max_globina(niz):
    oklep = {'(': ')', '{': '}', '[': ']', '<': '>'}
    globina = 0
    naj_globina = 0
    sklad = Sklad()
    for znak in niz:
        if znak in oklep.keys():
            sklad.vstavi(znak)
            globina += 1
            naj_globina = max(globina, naj_globina)
        elif znak in oklep.values():
            if sklad.prazen() or znak != oklep[sklad.vrh()]:
                return False
            sklad.odstrani()
            globina -= 1
    return naj_globina if sklad.prazen() else False
    def odstrani_najstarejsega_najvecjega(self):
        '''Odstrani najstarejšega največjega'''
        if self.prazen():
            return None
        naj = float('-inf')
        prvi = False
        pomozni = Sklad()
        while not self.prazen():  #preložim v pomožnega
            el = self.vrh()
            self.odstrani()
            naj = max(el, naj)
            pomozni.vstavi(el)
        while not pomozni.prazen():
            if prvi or naj != pomozni.vrh():
                self.vstavi(pomozni.vrh())
            else:
                prvi = True

            pomozni.odstrani()
예제 #23
0
    def odstrani_najvecje(self):
        '''iz sklada odstrani vse najvecje elemente'''
        najvecji = 0
        sklad = Sklad()
        while not self.prazen():
            vrh = self.vrh()
            self.odstrani()
            if vrh > najvecji:
                najvecji = vrh
            sklad.vstavi(vrh)

        while not sklad.prazen():
            vrh = sklad.vrh()
            if vrh != najvecji:
                self.vstavi(vrh)
            sklad.odstrani()
예제 #24
0
def max_globina(niz):
    s = Sklad()
    naj = 0
    trenutna = 0
    if not oklepaji(niz):
        return
    for c in niz:
        if c in OKLEPAJI:
            s.vstavi(c)
            trenutna += 1
            naj = max(trenutna, naj)
        if c in OKLEPAJI.values():
            if s.prazen() or OKLEPAJI[s.vrh()] != c:
                return
            s.odstrani()
            trenutna -= 1
    return naj
 def odstrani_najmlajsega_najvecjega(self):
     '''odstrani najmlajsega najvecjega'''
     if self.prazen():
         return None
     st = 0
     naj = float('-inf')
     pomozni = Sklad()
     while not self.prazen():  #preložim v pomožnega
         el = self.vrh()
         pomozni.vstavi(el)
         if self.vrh() > naj:
             naj = self.vrh()
             st = 1
         elif self.vrh() == naj:
             st += 1
         self.odstrani()
     while not pomozni.prazen():
         if naj == pomozni.vrh():
             st -= 1
             if st > 0:
                 self.vstavi(pomozni.vrh())
         else:
             self.vstavi(pomozni.vrh())
         pomozni.odstrani()
예제 #26
0
def poisci_sobo(skladisce, pot, smer=None):
    '''Vrne iskano sobo ter skladišče s po potrebi dodanimi praznimi sobami.'''
    if skladisce.prazno:
        if smer == 'L':
            skladisce = Drevo(Vrsta())
        elif smer == 'D':
            skladisce = Drevo(Sklad())
    if pot == '':
        return skladisce, skladisce.podatek
    elif pot[0] == 'L':
        levo_skladisce, soba = poisci_sobo(skladisce.levo, pot[1:], smer='L')
        return Drevo(skladisce.podatek, levo=levo_skladisce, desno=skladisce.desno), soba
    elif pot[0] == 'D':
        desno_skladisce, soba = poisci_sobo(skladisce.desno, pot[1:], smer='D')
        return Drevo(skladisce.podatek, levo=skladisce.levo, desno=desno_skladisce), soba
 def prestej_elemente(self):
     '''Prešteje elemente s pomočjo metode pop in pomožnega sklada'''
     i = 0
     pomozni = Sklad()
     while not self.prazen():
         pomozni.vstavi(self.pop())
         i += 1
     while not pomozni.prazen():
         self.vstavi(pomozni.pop())
     return i
예제 #28
0
def oklepaji(niz):
    '''Preveri, ali so oklepaji pravilno gnezdeni. Uporaba sklada.'''
    sklad = Sklad()
    for znak in niz:
        if znak in OKLEPAJI:
            sklad.vstavi(znak)
        elif znak in OKLEPAJI.values():
            if sklad.prazen():
                return False
            if not OKLEPAJI[sklad.poberi()] == znak:
                return False
    if not sklad.prazen():
        return False
    return True
예제 #29
0
파일: vlak.py 프로젝트: jakobvalic/RAC-1
def vagoni(prihod, odhod):
    '''Vrne True, če lahko z ustrezno permutacijo pridemo do preureditve.'''
    na_stranskem = ''
    sklad = Sklad()
    print(prihod, odhod)
    for prih, odh in zip(prihod, odhod):
        if prih != odh:
            na_stranskem += odh
            sklad.vstavi(prih)
    for odh in na_stranskem:
        if sklad.vrh != odh or sklad.prazen():
            return False
        sklad.odstrani()
    return True
예제 #30
0
    def odstrani_najstarejsega_najvecjega(self):
        ''''iz sklada odstrani najstarejsi najvecji element'''
        najvecji = 0
        sklad = Sklad()
        while not self.prazen():
            vrh = self.vrh()
            self.odstrani()
            if vrh > najvecji:
                najvecji = vrh
            sklad.vstavi(vrh)

        while not sklad.prazen():
            vrh = sklad.vrh()
            if vrh == najvecji:
                najvecji = ''
            else:
                self.vstavi(vrh)
            sklad.odstrani()