      (reverse (ret_line (reverse (get_column grid_lines line_no)))))
   )
 
+
+; Grab indiviual columns to work on
 (defn get_column
   [grid_lines line_no]
   (map #(nth % line_no) grid_lines)

  ; Read each line ignoring empty ones
  (doseq [line (remove empty? (line-seq rdr))]
    (parseLine line)))

(defn parseLine
  [line]
  (let direction (get_direction line))
  (let grid_size (get_grid_size line))
  (println (do_move direction grid_size line 0)))

(defn get_direction
  [line]
  (nth (split line #";") 1)
  )

(defn get_grid_size
  [line]
  (nth (split line #";") 2))

(defn do_move
  [direction grid_size line movement]
  (let grid_lines (nth (split line #";") 3))

  (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]

