   "Apply cmd to text. Return text as is if cmd isn't this cmd"
   [cmd text]
   (if-let [[_ fr] (re-find (re-matcher #"^rotate right (\d+) steps?$" cmd))]
-    (rotate-right text fr)))
+    (rotate-right text (parse-int fr))))
 
 ;; rotate left/right X steps means that the whole string should be
 ;; rotated; for example, one right rotation would turn abcd into
 ;; dabc.
 (defn rotate-left
   [text fr]
-  text)
+  (let [arr (vec (seq text))
+        fr (mod fr (count arr))]
+    (str/join (concat (nthrest arr fr)(take fr arr)))))
 
 
 ;; rotate right 4 steps

   spyscope.core
   adventofcode1.spec-test-instrument-debug))

(defn catvec
  [a b]
  (vec (concat a b)))

  "Apply cmd to text. Return text as is if cmd isn't this cmd"
  [cmd text]
  (if-let [[_ fr to] (re-find (re-matcher #"^move position (\d+) to position (\d+)$" cmd))]
    (move-position text (parse-int fr) (parse-int to))))

;; swap position X with position Y means that the letters at indexes X
;; and Y (counting from 0) should be swapped.
