Advertisement
Guest User

Untitled

a guest
Jul 1st, 2019
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (require '[clojure.set :as set])
  2.  
  3. (defrecord Play [word known-letters])
  4.  
  5. (defn input
  6.   ([prompt] (do (print prompt) (flush) (read-line)))
  7.   ([] (input "> ")))
  8.  
  9. (defn censor-char-list [char-list known-letters]
  10.   (let [first-char (first char-list)]
  11.     (cond
  12.       (empty? char-list) '()
  13.       (contains? known-letters first-char) (conj (censor-char-list (rest char-list) known-letters) first-char)
  14.       :else (concat '(\*) (censor-char-list (rest char-list) known-letters)))))
  15.  
  16. (defn censor-word [word known-letters]
  17.   (apply str (censor-char-list (seq word) known-letters)))
  18.  
  19. (defn make-turn [play]
  20.   (let [letter (input)]
  21.     (if (= (count letter) 1)
  22.       (assoc play :known-letters (conj (:known-letters play) letter))
  23.       (do (println "Please, enter one character") play))))
  24.  
  25. (defn play-with-word [word]
  26.   (loop [play (map->Play {:word word, :known-letters #{}})]
  27.     (if (set/subset? (set (:word play)) (:known-letters play))
  28.       :win
  29.       (do (println (censor-word (:word play) (:known-letters play))) (recur (make-turn play))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement