Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 1st, 2012  |  syntax: None  |  size: 0.82 KB  |  hits: 19  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. ;; t2ru's solution to Word Chains
  2. ;; https://4clojure.com/problem/82
  3.  
  4. (letfn [(diff1? [xs ys]
  5.             (let [xs (seq xs) [x & rxs] xs ys (seq ys) [y & rys] ys]
  6.               (cond (and (nil? xs) (nil? ys)) false
  7.                     (= x y) (diff1? rxs rys)
  8.                     true (or (= rxs rys) (= rxs ys) (= xs rys)))))
  9.           (candidates [difflist words]
  10.             (map #(vector (conj difflist %) (disj words %))
  11.                  (if (empty? difflist) words
  12.                    (filter #(diff1? % (first difflist)) words))))
  13.           (chains? [difflist words]
  14.             (if (empty? words) true
  15.               (let [next-cands (candidates difflist words)]
  16.                 (if (empty? next-cands) false
  17.                   (some #(apply chains? %) next-cands)))))]
  18.     (fn word-chains? [words]
  19.       (boolean (chains? nil words))))