2024-11-17 22:32:08 +01:00
|
|
|
(defpackage aoc
|
2024-11-18 14:08:48 +01:00
|
|
|
(:use :cl)
|
|
|
|
(:export
|
|
|
|
#:test-input))
|
|
|
|
|
2024-11-17 22:32:08 +01:00
|
|
|
(in-package :aoc)
|
|
|
|
|
|
|
|
(defun load-ql-dependencies ()
|
|
|
|
())
|
|
|
|
|
|
|
|
|
|
|
|
(defvar *aoc-url* "https://adventofcode.com")
|
|
|
|
|
|
|
|
|
|
|
|
(defvar *cookie-jar*
|
|
|
|
(cl-cookie:make-cookie-jar
|
|
|
|
:cookies (list
|
|
|
|
(cl-cookie:make-cookie
|
|
|
|
:name "session"
|
|
|
|
:value (uiop:getenv "AOC_SESSION")
|
|
|
|
:origin-host "adventofcode.com"
|
|
|
|
:path "/"
|
|
|
|
:domain ".adventofcode.com"
|
|
|
|
:secure-p t))))
|
|
|
|
|
|
|
|
(setf *cookie-jar*
|
|
|
|
(cl-cookie:make-cookie-jar
|
|
|
|
:cookies (list
|
|
|
|
(cl-cookie:make-cookie
|
|
|
|
:name "session"
|
|
|
|
:value (uiop:getenv "AOC_SESSION")
|
|
|
|
:origin-host "adventofcode.com"
|
|
|
|
:path "/"
|
|
|
|
:domain ".adventofcode.com"
|
|
|
|
:secure-p t))))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-23 14:30:40 +01:00
|
|
|
(defun fetch-input-data (year day)
|
2024-11-17 22:32:08 +01:00
|
|
|
(let ((url (format nil "~A/~D/day/~D/input" *aoc-url* year day)))
|
|
|
|
(multiple-value-bind
|
2024-11-23 14:30:40 +01:00
|
|
|
(body)
|
|
|
|
(dex:get url :cookie-jar *cookie-jar* :verbose t)
|
2024-11-17 22:32:08 +01:00
|
|
|
body)))
|
|
|
|
|
|
|
|
|
2024-11-23 14:30:40 +01:00
|
|
|
(defvar *input-data-cache* (make-hash-table))
|
|
|
|
|
|
|
|
(defun test-input (year day)
|
|
|
|
"Return input data for the given challenge. Use a cached value if already fetched"
|
|
|
|
(let* ((key (+ (* year 100) day))
|
|
|
|
(val (gethash key *input-data-cache*)))
|
|
|
|
(if val
|
|
|
|
val
|
|
|
|
(setf (gethash key *input-data-cache*) (fetch-input-data year day)))))
|