Skip to content

Instantly share code, notes, and snippets.

@fversnel
Last active April 2, 2019 08:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fversnel/a868fa07fe9f1cbcce0fe4e4efeb5e57 to your computer and use it in GitHub Desktop.
Save fversnel/a868fa07fe9f1cbcce0fe4e4efeb5e57 to your computer and use it in GitHub Desktop.
Baba is you spec
(ns babaisyou.spec
(:require [clojure.spec.alpha :as s]))
(s/def ::subject
#{:word/baba :word/wall :word/flag :word/grass})
(s/def ::verb
#{:word/is})
(s/def ::object
#{:word/you :word/push :word/stop :word/win})
(s/def ::sentence
(s/cat
:subject ::subject
:verb ::verb
:object ::object))
(s/def ::game-object
#{:baba :wall :flag :grass})
(s/def ::cell
(s/or
:word
(s/or
:subject ::subject
:verb ::verb
:object ::object)
:empty #{:empty}
:game-object ::game-object))
(s/def ::row
(s/*
(s/alt
:sentence ::sentence
:cell ::cell)))
(s/def ::level
(s/coll-of ::row))
(defn rules [level]
(let [filter-sentences
(filter
(fn [[type & _]]
(= type :sentence)))
map-rules (map second)]
(into
#{}
(comp cat filter-sentences map-rules)
level)))
(def example-level
[[:word/flag :empty :word/baba :word/is :word/you :empty :wall]
[:wall :empty :empty :baba :empty :empty :wall]
[:wall :wall :wall :wall :wall :empty :wall]
[:empty :word/flag :word/is :word/win :grass :grass :empty]])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment