   of all words of that length.  Keys are absent if no words of that length are present."
   [word-list]
   (group-by count word-list) )
-
-(defn to-word-array 
-  "Returns all words of the specified length as a 2D array (vector of vectors).
-  First index selects a given word, 2nd index selects chars from that word."
-  [word-list]
-  (vec
-    (map vec word-list) ))
 
 (defn num-cols
   "Given a list of words (seq of seqs), return the number of columns (2nd dimension)."

    (def words-map        (to-words-by-length word-seq) )
    (def curr-len         (count tgt-word) )
    (def curr-words       (words-map curr-len) )
    (def word-array       (to-word-array  curr-words) )
    (def max-word-len     (apply max (keys words-map)) )

    (println)
    (println "************************************************************")
    (println "word-array" (take 20 (map str/join word-array)) )
    (loop [ guessed-chars  #{}
            clue           (make-clue tgt-word guessed-chars) 
          ]
      (println )
      (let [
        keep-flag       (map #(guess-matches? % clue ) word-array )
        keep-words      (filter-with keep-flag word-array) ]
          (println "clue: " (format-clue clue) 
                    "  keep-words(" (count keep-words) "):" 
                    (take 10 (map str/join keep-words)) "..." )

    curr-len            4
    curr-words          (words-map curr-len)
      _ (assert (= curr-words     ["abcd" "xbcd" "xxcd" "xxxd"]  ))

    tgt-word            [ \x  \b  \c  \d  ]
    clue                [ nil \b  nil nil ]
    keep-flag           (map #(guess-matches? % clue ) curr-words )
      _ (assert (= keep-flag [true true false false]))
    keep-words          (filter-with keep-flag curr-words)
      _ (assert (= keep-words ["abcd" "xbcd"] ))
