Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (require '[clojure.set :as set])
- (defrecord Play [word known-letters])
- (defn input
- ([prompt] (do (print prompt) (flush) (read-line)))
- ([] (input "> ")))
- (defn censor-char-list [char-list known-letters]
- (let [first-char (first char-list)]
- (cond
- (empty? char-list) '()
- (contains? known-letters first-char) (conj (censor-char-list (rest char-list) known-letters) first-char)
- :else (concat '(\*) (censor-char-list (rest char-list) known-letters)))))
- (defn censor-word [word known-letters]
- (apply str (censor-char-list (seq word) known-letters)))
- (defn make-turn [play]
- (let [letter (input)]
- (if (= (count letter) 1)
- (assoc play :known-letters (conj (:known-letters play) letter))
- (do (println "Please, enter one character") play))))
- (defn play-with-word [word]
- (loop [play (map->Play {:word word, :known-letters #{}})]
- (if (set/subset? (set (:word play)) (:known-letters play))
- :win
- (do (println (censor-word (:word play) (:known-letters play))) (recur (make-turn play))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement