summaryrefslogtreecommitdiff
path: root/exercism/emacs-lisp/allergies/allergies.el
diff options
context:
space:
mode:
Diffstat (limited to 'exercism/emacs-lisp/allergies/allergies.el')
-rw-r--r--exercism/emacs-lisp/allergies/allergies.el32
1 files changed, 32 insertions, 0 deletions
diff --git a/exercism/emacs-lisp/allergies/allergies.el b/exercism/emacs-lisp/allergies/allergies.el
new file mode 100644
index 0000000..1279484
--- /dev/null
+++ b/exercism/emacs-lisp/allergies/allergies.el
@@ -0,0 +1,32 @@
+;;; allergies.el --- Allergies Exercise (exercism)
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'seq)
+
+(setq allergens
+ '(eggs
+ peanuts
+ shellfish
+ strawberries
+ tomatoes
+ chocolate
+ pollen
+ cats))
+
+(defun allergen-list (n)
+ (let* ((index 0)
+ (pred (lambda (item)
+ (let ((r (< 0 (logand (ash 1 index) n))))
+ (setq index (1+ index))
+ (when r item)))))
+ (mapcar 'symbol-name
+ (seq-filter pred allergens))))
+
+(defun allergic-to-p (n item)
+ (seq-contains-p (allergen-list n) item))
+
+(provide 'allergies)
+;;; allergies.el ends here