Beispiel #1
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()
Beispiel #2
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
def podvoji_sklad(s):
    podvojen = Sklad()
    pomozen = Sklad()
    while not s.prazen():
        pomozen.vstavi(s.vrh())
        s.odstrani()

    while not pomozen.prazen():
        x = pomozen.vrh()
        s.vstavi(x)
        pomozen.odstrani()
        podvojen.vstavi(x)
        podvojen.vstavi(x)
    return podvojen
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
Beispiel #5
0
def razmnozi_sklad(s, seznam):
    '''vrne nov sklad, v katerem se vsak element prvotnega sklada
    pojavi tolikokrat , kolikor je istolezece st v seznamu'''
    pomozen = Sklad()
    razmnozen = Sklad()
    
    while not s.prazen():
        pomozen.vstavi(s.vrh())
        s.odstrani()
    while not pomozen.prazen():
        s.vstavi(pomozen.vrh())
        for i in range(seznam.pop()):
            razmnozen.vstavi(s.vrh())
        pomozen.odstrani()
    return razmnozen
Beispiel #6
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()
def odstrani_naj_sklad(s):
    '''Odstrani najkrajši niz iz sklada
    če je takih elementov več odstrani le vrhnjega'''
    dolzina = float('inf')
    sk = Sklad()  #pomožni sklad
    prvi = True
    while not s.prazen():
        niz = s.vrh()
        dolzina = min(len(niz), dolzina)
        s.odstrani()
        sk.vstavi(niz)
    while not sk.prazen():
        niz = sk.vrh()
        sk.odstrani()
        s.vstavi(niz)
    while not s.prazen():
        if prvi and len(s.vrh()) == dolzina:
            prvi = False
        else:
            sk.vstavi(s.vrh())
        s.odstrani()
    while not sk.prazen():
        s.vstavi(sk.vrh())
        sk.odstrani()
    return
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
Beispiel #9
0
def uredi_s_skladom(sklad):
    s = Sklad()
    skl = Sklad()
    while not sklad.prazen():
        vrh = sklad.vrh()
        sklad.odstrani()
        while not s.prazen() and s.vrh() > vrh:
            sklad.vstavi(s.vrh())
            s.odstrani()
        s.vstavi(vrh)
    while not s.prazen():
        skl.vstavi(s.vrh())
        s.odstrani()
    while not skl.prazen():
        sklad.vstavi(skl.vrh())
        skl.odstrani()
    return
Beispiel #10
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
Beispiel #11
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()
Beispiel #12
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()
 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
Beispiel #14
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
Beispiel #15
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)
Beispiel #16
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()
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
Beispiel #18
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())
Beispiel #19
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()
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
Beispiel #21
0
def vrednost(izraz):
    '''while there are tokens to be read:
	read a token.
	if the token is a number, then push it to the output queue.
	if the token is an operator, then:
		while there is an operator at the top of the operator stack with
			greater than or equal to precedence and the operator is left associative:
				pop operators from the operator stack, onto the output queue.
		push the read operator onto the operator stack.
	if the token is a left bracket (i.e. "("), then:
		push it onto the operator stack.
	if the token is a right bracket (i.e. ")"), then:
		while the operator at the top of the operator stack is not a left bracket:
			pop operators from the operator stack onto the output queue.
		pop the left bracket from the stack.
		/* if the stack runs out without finding a left bracket, then there are
		mismatched parentheses. */
    if there are no more tokens to read:
	while there are still operator tokens on the stack:
		/* if the operator token on the top of the stack is a bracket, then
		there are mismatched parentheses. */
		pop the operator onto the output queue.
    exit.'''
    sklad_operacij,sklad_vrednosti  = Sklad(),Sklad()
    for znak in cleni_izraza(izraz):
        if znak.isdigit():
            sklad_vrednosti.vstavi(int(znak))
        elif znak in {'+','*','**'}:
            while sklad_ima_prednost(sklad_operacij, znak):
                izvedi_racun(sklad_operacij, sklad_vrednosti)
            sklad_operacij.vstavi(znak)
        elif znak == '(':
            sklad_operacij.vstavi(znak)
        elif znak == ')':
            while sklad_operacij.vrh() != '(':
                izvedi_racun(sklad_operacij, sklad_vrednosti)
            sklad_operacij.odstrani()
    while not sklad_operacij.prazen():
        izvedi_racun(sklad_operacij, sklad_vrednosti)
    return sklad_vrednosti.vrh()
Beispiel #22
0
def stari_macki(niz):
    '''nadomestni upor vezja izracuna po metodi stari macki'''
    sklad = Sklad()
    for znak in niz.split(' '):
        if znak in 'ZV':
            prvi_el = sklad.vrh()
            sklad.odstrani()
            drugi_el = sklad.vrh()
            sklad.odstrani()
            sklad.vstavi(nadomestni_upor_SM(prvi_el, drugi_el, znak))
        else:
            sklad.vstavi(int(znak))
    return sklad.vrh()
def upor_vezja(niz):
    """Izracuna nadomestni upor vezja, ki je podano kot niz operacij npr (3 5 Z 0 V 3 2 Z V)"""
    sklad_uporov = Sklad()
    for znak in niz.split(' '):
        if znak in 'ZV':
            prvi = sklad_uporov.vrh()
            sklad_uporov.odstrani()
            drugi = sklad_uporov.vrh()
            sklad_uporov.odstrani()
            sklad_uporov.vstavi(nadomestni_upor(prvi, drugi, znak))
        else:
            sklad_uporov.vstavi(int(znak))
    return sklad_uporov.vrh()
Beispiel #24
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()
Beispiel #25
0
def obicajni_zapis(niz):
    sklad_stevil = Sklad()
    sez = niz.split()
    for c in sez:
        if c not in '+*':
            sklad_stevil.vstavi(c)
        else:
            st1 = sklad_stevil.vrh()
            sklad_stevil.odstrani()
            st2 = sklad_stevil.vrh()
            sklad_stevil.odstrani()
            sklad_stevil.vstavi("({} {} {})".format(st2, c, st1))
    return sklad_stevil.vrh()
Beispiel #26
0
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
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
Beispiel #28
0
def vrednost_rpn(niz):
    sklad_stevil = Sklad()
    sez = niz.split()
    for c in sez:
        if c not in '+*':
            sklad_stevil.vstavi(c)
        else:
            st1 = sklad_stevil.vrh()
            sklad_stevil.odstrani()
            st2 = sklad_stevil.vrh()
            sklad_stevil.odstrani()
            rez = izracunaj(st1, st2, c)
            sklad_stevil.vstavi(rez)
    return int(sklad_stevil.vrh())
Beispiel #29
0
def upor_vezja(niz):
    '''Izracuna nadomestni upor vezja. Vezje je podano kot niz v
    "RPN" notaciji'''
    skladUporov = Sklad()
    for znak in niz.split(' '):
        if znak in 'ZV':
            prvi_el = skladUporov.vrh()
            skladUporov.odstrani()
            drugi_el = skladUporov.vrh()
            skladUporov.odstrani()
            skladUporov.vstavi(nadomestni_upor(prvi_el, drugi_el, znak))
        else:
            skladUporov.vstavi(int(znak))
    return skladUporov.vrh()
Beispiel #30
0
def stari_macki(niz):
    '''vrne upor po metodi starih mačkov'''
    sklad = Sklad()
    tab = niz.strip().split(' ')
    for el in tab:
        if el in {'V', 'Z'}:
            r1 = sklad.vrh()
            sklad.odstrani()
            r2 = sklad.vrh()
            sklad.odstrani()
            sklad.vstavi(nadomestni_macki_formula(r1, r2, el))
        else:
            sklad.vstavi(int(el))
    return sklad.vrh()