   ; Read each line ignoring empty ones
   (doseq [line (remove empty? (line-seq rdr))]
     (parseLine line)))
-
+; First in the function cascade
+; Parses a line of the game board
 (defn parseLine
   [line]
   (let direction (get_direction line))
   (let grid_size (get_grid_size line))
   (println (do_move direction grid_size line 0)))
 
+; Get the direction of the game move
 (defn get_direction
   [line]
   (nth (split line #";") 1)
   )
 
+; Get the size of the grid
 (defn get_grid_size
   [line]
   (nth (split line #";") 2))
 
+
+; Starts the move
 (defn do_move
   [direction grid_size line movement]
   (let grid_lines (nth (split line #";") 3))

     (reverse (ret_line (reverse (get_column grid_lines line_no)))))
  )

(defn get_column
  [grid_lines line_no]
  (map #(nth % line_no) grid_lines)

  (for [i (range (count non_zero_vals))] (combine_indexes non_zero_vals i (+ i 1)))
  )

; Basic Utilities functions below here



; Filter out certain the passed in index passed in
; used to skip zero's
(defn index-exclude
  [r ex]
  (filter #(not (ex %)) (range r)))

; dissociate indexes of nonzero values
(defn dissoc-idx
  [v & ds]
  (map v (index-exclude (count v) (into #{} ds))))

; So this crazy thing is poorly named but basically it returns a 0, the static value
; or the Combined values, basically aggegrating all the info together
(defn combine_indexes
  [line current_index next_index]

