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 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 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 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()
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 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
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 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
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 obrni(v): pomozni = Sklad() while not v.prazna(): pomozni.vstavi(v.zacetek()) v.odstrani() while not pomozni.prazen(): v.vstavi(pomozni.vrh()) pomozni.odstrani()
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
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 vagoni(prihod, odhod): """Vrne true, ce lahko s pomocjo slepega tira spremenimo zaporedje vlakov iz prihoda v odhod""" slepi_tip = Sklad() prihod = prihod[::-1] for vlak in prihod: if not slepi_tip.prazen() and slepi_tip.vrh() == odhod[-1]: slepi_tip.odstrani() odhod = odhod[:-1] if vlak == odhod[-1]: odhod = odhod[:-1] else: slepi_tip.vstavi(vlak) while not slepi_tip.prazen(): if slepi_tip.vrh() == odhod[-1]: odhod = odhod[:-1] slepi_tip.odstrani() else: return False return slepi_tip.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
def max_globina(niz): '''Poišče globino najbolj globoko gnezdenega para oklepajev.''' sklad = Sklad() globina = 0 naj_globina = 0 for znak in niz: if znak in OKLEPAJI: sklad.vstavi(znak) globina += 1 if globina > naj_globina: naj_globina = globina elif znak in OKLEPAJI.values(): if sklad.prazen(): return None if not OKLEPAJI[sklad.poberi()] == znak: return None globina -= 1 if not sklad.prazen(): return None return naj_globina
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 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
def max_globina(niz): '''poisce globino najbolj globoko gnezdenega para oklepajev v izrazu niz''' slovar_oklep = {'(': ')', '{': '}', '[': ']', '<': '>'} sklad = Sklad() globina = 0 naj_globina = 0 for znak in niz: if znak in slovar_oklep: #ce je znak v slovarju, ga doda v sklad sklad.vstavi(znak) globina += 1 if globina > naj_globina: #poiscemo ustreznega kandidata za naj_globino naj_globina = globina 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 sklad.odstrani() globina -= 1 if sklad.prazen(): return naj_globina return False #vsaj en znak ostane v skladu
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 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 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 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()
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
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
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()
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 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
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()
def odstrani_najvecje(self): """ Iz sklada odstrani vse najvecje elemente """ naj = 0 pomozen = Sklad() while not self.prazen(): el = self.vrh() self.odstrani() if el > naj: naj = el pomozen.vstavi(el) while not pomozen.prazen(): el = pomozen.vrh() if el != naj: self.vstavi(el) pomozen.odstrani()