day 21 part 1, fun
This commit is contained in:
35
day21.lisp
Normal file
35
day21.lisp
Normal file
@@ -0,0 +1,35 @@
|
||||
;; // https://adventofcode.com/2022/day/21
|
||||
(defpackage :day-21
|
||||
(:use :cl))
|
||||
(in-package :day-21)
|
||||
|
||||
(ql:quickload 'cl-ppcre)
|
||||
|
||||
(defun parse-integer-or-symbol (str)
|
||||
(let ((maybe-int (parse-integer str :junk-allowed t)))
|
||||
(if maybe-int
|
||||
maybe-int
|
||||
(intern (string-upcase str)))))
|
||||
|
||||
|
||||
(defun line-to-quoted-operation (line)
|
||||
(let* ((words (ppcre:split " " (ppcre:regex-replace ":" line "")))
|
||||
(symbols (mapcar #'parse-integer-or-symbol words)))
|
||||
(cond
|
||||
((= 4 (length symbols))
|
||||
;; with operation
|
||||
(destructuring-bind (name operand1 op operand2)
|
||||
symbols
|
||||
`(defparameter ,name '(,op (eval ,operand1) (eval ,operand2)))))
|
||||
|
||||
((= 2 (length symbols))
|
||||
;; just number
|
||||
(destructuring-bind (name value)
|
||||
symbols
|
||||
`(defparameter ,name ,value))))))
|
||||
|
||||
(defun load-file-defs (filename)
|
||||
(loop
|
||||
for line in (uiop:read-file-lines filename)
|
||||
for definition = (line-to-quoted-operation line)
|
||||
do (eval definition)))
|
||||
Reference in New Issue
Block a user