Clojure - Parèntesis amb Backtracking S28790


Statement
 

pdf   zip

thehtml

Implementeu una funcions solucions que ens doni totes les permutacions correctes de n parells de parèntesis tot seguint l’esquema backtracking descrit als apunts de l’assignatura.

Recordeu afegir al vostre codi solució el següent:

(defn bTck [succ obj]   ;; ja coneixeu flip i foldr, les fem servir aquí
  (letfn [(bTck' [v]
            (cond
              (empty? v)     []
              (obj (peek v)) (conj (bTck' (pop v)) (peek v))
              :else          (let [x (peek v)]
                               (recur (foldr (flip conj) (pop v) (succ x))))))]
    (fn [inicial]
      (bTck' [inicial]))))
Public test cases
  • Input

    (solucions 3)
    

    Output

    (()()() ()(()) (())() (()()) ((())))
    
  • Information
    Author
    Gerard Escudero
    Language
    Catalan
    Official solutions
    Clojure
    User solutions
    Clojure