generate-mods.clj

Pinchord · pinchord.git · Tickets · Changelog

Branches > v30.1 > b0c4e1a > files / generate-mods.clj

(def numbers {:chord "LRPKFST*"
              :left-numpad {"" ""
                            "R" "1"}})

(def symbols {"P" "."
              "RP" "/"})

{:chord "P"
 :translation "."}

(def mods {"-" ""
           "A" "ctrl"
           "E" "shift"
           "I" "super"
           "U" "alt"})

(def mods {"A" "ctrl"
           "E" "shift"
           "I" "super"
           "U" "alt"})

(defn power-set [coll]
  (let [rest (power-set (rest coll))]
    (concat rest
            (map #(cons (first coll) %) rest))))

(defn power-set [coll]
  (reduce (fn [acc x]
            (into acc (map #(conj % x) acc)))
          #{#{}} coll))

(power-set mods)

(defn apply-mods [x combo]
  (reduce (fn [acc [_ mod]]
            (str mod "(" acc ")"))
          x combo))

(defn generate-all-mods [starter {:keys [chord translation]}]
  (for [mods (power-set mods)]
    (apply-mods translation mods)))

(generate-all-mods "ST" {:chord "SP" :translation "/"})

(comment)