(defun twice? (string pattern) (numberp (search pattern string :start2 (+ (search pattern string) (length pattern))))) (defvar pattern) (defun overtwice? (string) (loop for i from 0 to (- (length string) 2) do (setq pattern (subseq string i (+ i 2))) (if (twice? string pattern) (return-from overtwice? t)) ) nil) (defvar c1) (defvar c2) (defvar c3) (defun tandem? (string) (loop for i from 0 to (- (length string) 3) do (setq c1 (char string i)) (setq c2 (char string (+ i 1))) (setq c3 (char string (+ i 2))) (if (and (equal c1 c3) (not (equal c1 c2))) (return-from tandem? t))) nil) (defun nice? (string) (and (overtwice? string) (tandem? 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)