Skip to content

Instantly share code, notes, and snippets.

@cgrand
Created July 2, 2014 09:30
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 cgrand/9070719c5f1e039cf621 to your computer and use it in GitHub Desktop.
Save cgrand/9070719c5f1e039cf621 to your computer and use it in GitHub Desktop.
Fitting a square peg into a round hole with clojure multimethods
; by lambdanext
(defmulti fits? (fn [hole peg] [(:type hole) (:type peg)]))
(defmethod fits? [:circle :circle] [{hole-diameter :diameter} {peg-diameter :diameter}]
(<= peg-diameter hole-diameter))
(defmethod fits? [:circle :square] [{hole-diameter :diameter} {peg-length :length}]
(<= (* peg-length (Math/sqrt 2)) hole-diameter))
(defmethod fits? [:square :circle] [{hole-length :length} {peg-diameter :diameter}]
(<= peg-diameter (/ hole-length 2)))
(defmethod fits? [:square :square] [{hole-length :length} {peg-length :length}]
(<= peg-length hole-length))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment