Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun hippo (long-side short-side &key (directions '(:f :b :r :l)))
- (cond
- ;; degenerate cases
- ((< long-side short-side) (hippo short-side long-side :directions directions :jump-distance jump-distance))
- ((= long-side short-side) (diagonal-jump :directions directions :jump-distance long-side))
- ((zerop short-side) (orthogonal-jump :directions directions :jump-distance long-side))
- ;; the real thing
- (t (flet ((decode-hippogonals (dir) ;keyword shorthand expansion
- (loop for i in dir
- append (case i
- (:f (list :ffr :ffl :fsr :fsl))
- (:b (list :bbr :bbl :bsr :bsl))
- (:r (list :ffr :fsr :bsr :bbr))
- (:l (list :ffl :fsl :bsl :bbl))
- (:fr (list :ffr :fsr))
- (:fl (list :ffl :fsl))
- (:br (list :bbr :bsr))
- (:bl (list :bbl :bsl))
- (:ff (list :ffr :ffl))
- (:fs (list :fsr :fsl))
- (:bb (list :bbr :bbl))
- (:bs (list :bsr :bsl))
- (:ll (list :bsl :fsl))
- (:lv (list :bbl :ffl))
- (:rr (list :bsr :fsr))
- (:rv (list :bbr :ffr))
- (:fb (list :ffl :ffr :bbl :bbr))
- (:rl (list :fsl :fsr :bsl :bsr))
- (:ffr (list :ffr))
- (:fsr (list :fsr))
- (:bsr (list :bsr))
- (:bbr (list :bbr))
- (:bbl (list :bll))
- (:bsl (list :bsl))
- (:fsl (list :fsl))
- (:ffl (list :ffl))))))
- (let ((vectors (list :ffr (dest (+ short-side) (+ long-side) )
- :fsr (dest (+ long-side) (+ short-side))
- :bsr (dest (+ long-side) (- short-side))
- :bbr (dest (+ short-side) (- long-side) )
- :bbl (dest (- short-side) (- long-side) )
- :bsl (dest (- long-side) (- short-side))
- :fsl (dest (- long-side) (+ short-side))
- :ffl (dest (- short-side) (+ long-side)))))
- (remove-duplicates (mapcar #'(lambda (x) (getf vectors x)) (expand-hippogonals directions))))))))
Advertisement
Add Comment
Please, Sign In to add comment