Isoraqathedh

Cases galore

Mar 4th, 2014
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.89 KB | None | 0 0
  1. (defun hippo (long-side short-side &key (directions '(:f :b :r :l)))
  2.   (cond
  3.     ;; degenerate cases
  4.     ((< long-side short-side) (hippo short-side long-side :directions directions :jump-distance jump-distance))
  5.     ((= long-side short-side) (diagonal-jump :directions directions :jump-distance long-side))
  6.     ((zerop short-side)     (orthogonal-jump :directions directions :jump-distance long-side))
  7.     ;; the real thing
  8.     (t (flet ((decode-hippogonals (dir) ;keyword shorthand expansion
  9.         (loop for i in dir
  10.            append (case i
  11.                 (:f   (list :ffr :ffl :fsr :fsl))
  12.                 (:b   (list :bbr :bbl :bsr :bsl))
  13.                 (:r   (list :ffr :fsr :bsr :bbr))
  14.                 (:l   (list :ffl :fsl :bsl :bbl))
  15.                 (:fr  (list :ffr :fsr))
  16.                 (:fl  (list :ffl :fsl))
  17.                 (:br  (list :bbr :bsr))
  18.                 (:bl  (list :bbl :bsl))
  19.                 (:ff  (list :ffr :ffl))
  20.                 (:fs  (list :fsr :fsl))
  21.                 (:bb  (list :bbr :bbl))
  22.                 (:bs  (list :bsr :bsl))
  23.                 (:ll  (list :bsl :fsl))
  24.                 (:lv  (list :bbl :ffl))
  25.                 (:rr  (list :bsr :fsr))
  26.                 (:rv  (list :bbr :ffr))
  27.                 (:fb  (list :ffl :ffr :bbl :bbr))
  28.                 (:rl  (list :fsl :fsr :bsl :bsr))
  29.                 (:ffr (list :ffr))
  30.                 (:fsr (list :fsr))
  31.                 (:bsr (list :bsr))
  32.                 (:bbr (list :bbr))
  33.                 (:bbl (list :bll))
  34.                 (:bsl (list :bsl))
  35.                 (:fsl (list :fsl))
  36.                 (:ffl (list :ffl))))))
  37.      (let ((vectors (list :ffr (dest (+ short-side) (+ long-side) )
  38.                   :fsr (dest (+ long-side)  (+ short-side))
  39.                   :bsr (dest (+ long-side)  (- short-side))
  40.                   :bbr (dest (+ short-side) (- long-side) )
  41.                   :bbl (dest (- short-side) (- long-side) )
  42.                   :bsl (dest (- long-side)  (- short-side))
  43.                   :fsl (dest (- long-side)  (+ short-side))
  44.                   :ffl (dest (- short-side) (+ long-side)))))
  45.        (remove-duplicates (mapcar #'(lambda (x) (getf vectors x)) (expand-hippogonals directions))))))))
Advertisement
Add Comment
Please, Sign In to add comment