     word-array          (to-word-array  curr-words)
       _ (assert (= word-array
                    [[\a \b \c \d] [\x \b \c \d] [\x \x \c \d] [\x \x \x \d]] ))
-
-    col-char-freqs      (to-freqs-by-col word-array)
-      _ (assert (= col-char-freqs [{\a 1, \x 3} {\b 2, \x 2} {\c 3, \x 1} {\d 4}] ))
-    all-char-freqs      (apply merge-with + col-char-freqs)
-      _ (assert (= all-char-freqs { \a 1, \b 2, \c 3, \d 4, \x 6} )) 
-    max-freq-val        (apply max-key all-char-freqs (keys all-char-freqs) )
-      _ (assert (= max-freq-val \x ))
 
     tgt-word            [ \x  \b  \c  \d  ]
     clue                [ nil \b  nil nil ]

  { :pre  [ (integer? row-idx) ]
    :post [] }
  (nth word-array row-idx) )

(defn to-freqs-by-col
  "For each column of a 2D array (seq of seqs), computes an element frequency map. Returns
  as a vector indexed by column."
  [word-array]
  { :pre  [ (< 0 (num-rows word-array) )
            (< 0 (num-cols word-array) ) ] 
    :post [] }
  (vec (for [idx (range 0 (num-cols word-array)) ]
         (frequencies (get-array-col word-array idx)) )))

(defn filter-with-idx
  "Returns values from data-seq where corresponding pred-seq elements are truthy.

      _ (assert (= keep-words ["abcd" "xbcd"] ))
    guessed-chars       #{ \b }
      _ (assert (= guessed-chars #{\b} ))
  ] )
)

