From c247628752164745087eca075d0994e2025a793e Mon Sep 17 00:00:00 2001 From: Adam Jeniski Date: Fri, 1 Dec 2023 00:56:43 -0500 Subject: [PATCH] its beginning to look a lot like christmas 2023 --- 2023/.gitignore | 6 ++++++ 2023/README.md | 4 ++++ 2023/bb.edn | 3 +++ 2023/deps.edn | 11 +++++++++++ 2023/src/core.clj | 18 ++++++++++++++++++ 2023/src/day01.clj | 38 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 80 insertions(+) create mode 100644 2023/.gitignore create mode 100644 2023/README.md create mode 100644 2023/bb.edn create mode 100644 2023/deps.edn create mode 100644 2023/src/core.clj create mode 100644 2023/src/day01.clj diff --git a/2023/.gitignore b/2023/.gitignore new file mode 100644 index 0000000..b2dbf08 --- /dev/null +++ b/2023/.gitignore @@ -0,0 +1,6 @@ +.clj-kondo +.cpcache +.lsp +.nrepl-port +session + diff --git a/2023/README.md b/2023/README.md new file mode 100644 index 0000000..180403f --- /dev/null +++ b/2023/README.md @@ -0,0 +1,4 @@ +## Clojure Project Template + +a quickstart project to get going using cider/nrepl & babashka tasks + diff --git a/2023/bb.edn b/2023/bb.edn new file mode 100644 index 0000000..1fd8376 --- /dev/null +++ b/2023/bb.edn @@ -0,0 +1,3 @@ +{:paths ["script"] + :min-bb-version "0.4.0" + :tasks {nrepl (shell "clj -M:repl --port 5555")}} diff --git a/2023/deps.edn b/2023/deps.edn new file mode 100644 index 0000000..dfe9d8b --- /dev/null +++ b/2023/deps.edn @@ -0,0 +1,11 @@ +{:paths ["src" "resources"] + :deps {org.clojure/clojure {:mvn/version "1.11.1"} + org.clojure/core.match {:mvn/version "1.0.1"} + clj-http/clj-http {:mvn/version "3.12.3"}} + :aliases + {:repl + {:extra-deps {nrepl/nrepl {:mvn/version "0.9.0"} + cider/cider-nrepl {:mvn/version "0.28.4"}} + :main-opts ["-m" "nrepl.cmdline" + "--middleware" "[cider.nrepl/cider-middleware]" + "--interactive"]}}} diff --git a/2023/src/core.clj b/2023/src/core.clj new file mode 100644 index 0000000..6bebc2a --- /dev/null +++ b/2023/src/core.clj @@ -0,0 +1,18 @@ +(ns core + (:require [clj-http.client :as client] + [clojure.string :as string])) + +(def input-cache (atom {})) +(def cookie (str "session=" (slurp "session"))) + +(defn get-puzzle-input [day] + (or (@input-cache day) + (swap! input-cache assoc day + (-> (str "https://adventofcode.com/2023/day/" day "/input") + (client/get {:throw-entire-message? true + :headers {"Cookie" cookie}}) + :body + string/split-lines)))) + +(comment + input-cache) diff --git a/2023/src/day01.clj b/2023/src/day01.clj new file mode 100644 index 0000000..18a8452 --- /dev/null +++ b/2023/src/day01.clj @@ -0,0 +1,38 @@ +(ns ^{:doc "Day 1" + :author "Adam Jeniski"} + day01 (:require [core :refer [get-puzzle-input]] + [clojure.string :as string])) + +(def input (get-puzzle-input 1)) + +(def numeric-value-map {"one" 1 + "two" 2 + "three" 3 + "four" 4 + "five" 5 + "six" 6 + "seven" 7 + "eight" 8 + "nine" 9}) + +(defn numeric-value [s] + (or (numeric-value-map s) s)) + +;; part 1 +(->> input + (map (fn [line] + {:first (re-find #"\d" line) + :last (re-find #"\d" (string/reverse line))})) + (map #(str (:first %) (:last %))) + (map #(Integer/parseInt %)) + (reduce +)) + +;; part 2 +(->> input + (map (fn [line] + (let [f (re-find #"one|two|three|four|five|six|seven|eight|nine|\d" line) + l (string/reverse (re-find #"eno|owt|eerht|ruof|evif|xis|neves|thgie|enin|\d" (string/reverse line)))] + (str (numeric-value f) (numeric-value l))))) + (map #(Integer/parseInt %)) + (reduce +)) +