Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- to podniz :r :s :e
- ; vracamo podniz od zadane rijeci, npr. (podniz "abcd 2 3) vraca "bc
- localmake "x "
- foreach :r [
- if and (# >= :s) (# <= :e) [make "x word :x ?]
- ]
- op :x
- end
- to usporedba :a :b
- ; radimo usporedbu segemenata :: ovo nam sluzi za sortiranje segmenata
- ;;; prvo po dubini silazno
- if (first :a ) > ( first :b ) [ op "true ]
- ;;; zatim po poziciji segmenta u nizu
- if and ((first :a ) = ( first :b )) ((item 2 :a ) < (item 2 :b)) [ op "true]
- op "false
- end
- to zadaca :r
- (local "dubina "e "s "segment "segmenti "stog)
- make "dubina 0
- make "stog []
- make "segmenti []
- foreach :r [
- ;;; ako smo naisli na otvorenu zagradu, stavljamo njenu poziciju na stog
- ;;; povecavamo trenutnu dubinu zagrada
- if ? = "|(| [
- make "stog lput # :stog
- make "dubina :dubina + 1
- ]
- ;;; ako smo naisli na zatvorenu zagradu, smanjujemo dubinu,
- ;;; na vrhu stoga nam je pocetak podniza, a trenutna pozicija je kraj podniza
- ;;; trazeni segment se izvlaci pomocu funkcije podniz
- ;;; na listu segmenata stavljamo tročlanu podlistu [dubina pozicija_u_nizu vrijednost_segmenta]
- if ? = "|)| [
- make "dubina :dubina - 1
- make "s last :stog
- make "stog bl :stog
- make "e #
- make "segment podniz :r :s :e
- make "segmenti lput (list :dubina # :segment) :segmenti
- ]
- ]
- ;;; sortiramo sve tročlane podliste (segmente) po kriteriju: dubina silazno, pozicija_u_nizu uzlazno
- make "segmenti (sort :segmenti "usporedba)
- ;;; ispisi samo vrijednost_segmenta po redu
- foreach :segmenti [ pr last ? ]
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement