AoC/2015/days/05/nice.lisp

52 lines
1.3 KiB
Common Lisp

(defvar c)
(defvar counter)
(defun threevowels? (string)
(setq counter 0)
(loop for i from 0 to (- (length string) 1)
do (setq c (char string i))
(setq counter (+ counter (if (or
(equal c #\a)
(equal c #\e)
(equal c #\i)
(equal c #\o)
(equal c #\u))
1
0)))
(if (>= counter 3)
(return-from threevowels? t)))
nil)
(defvar c1)
(defvar c2)
(defun twice? (string)
(loop for i from 0 to (- (length string) 2)
do (setq c1 (char string i))
(setq c2 (char string (+ i 1)))
(if (equal c1 c2)
(return-from twice? t))
)
nil)
(defun redflag? (string)
(or (search "ab" string)
(search "cd" string)
(search "pq" string)
(search "xy" string)))
(defun nice? (string)
(and (threevowels? string)
(twice? string)
(not (redflag? string))))
(defvar my-count 0)
(with-open-file (in "./data/input")
(do ((line (read-line in nil)
(read-line in nil)))
((null line))
(if (nice? line)
(setq my-count (+ my-count 1)))
))
(print my-count)