quick golf round 1

This commit is contained in:
Adam Jeniski 2024-12-04 00:56:06 -05:00
parent 025e25f11f
commit fabea05fdf

View File

@ -1,77 +1,33 @@
(ns day04
(:require [core :as c]
[input-manager :refer [get-input]]
[clojure.string :as str]))
(:require [input-manager :refer [get-input]]))
(do
(def input
(->>
(get-input 4)
; "MMMSXXMASM
; MSAMXMSMSA
; AMXSXMAAMM
; MSAMASMSMX
; XMASAMXAMM
; XXAMMXXAMA
; SMSMSASXSS
; SAXAMASAAA
; MAMMMXMMMM
; MXMXAXMASX"
; (str/split-lines)
))
input)
(def input (get-input 4))
(defn get-char [row col]
(get (get input row) col))
(defn get-count [row col]
(->> [(for [offset (range 4)]
(get-char row (+ col offset))) ;right
(for [offset (range 4)]
(get-char row (- col offset))) ;left
(for [offset (range 4)]
(get-char (+ row offset) col)) ;down
(for [offset (range 4)]
(get-char (- row offset) col)) ;up
(for [offset (range 4)]
(get-char (- row offset) (- col offset)))
(for [offset (range 4)]
(get-char (- row offset) (+ col offset)))
(for [offset (range 4)]
(get-char (+ row offset) (- col offset)))
(for [offset (range 4)]
(get-char (+ row offset) (+ col offset)))]
(filter #(= % (seq "XMAS")))
count))
;; part 1
(->> input
(map (partial map-indexed vector))
(map-indexed vector)
(reduce (fn [acc [row s]]
(reduce (fn [acc2 [col _c]]
(+ acc2 (get-count row col)))
(+ acc2 (->> (for [offset (range 4)]
(map #(apply get-char %)
[[row (+ col offset)]
[row (- col offset)]
[(+ row offset) col]
[(- row offset) col]
[(- row offset) (- col offset)]
[(- row offset) (+ col offset)]
[(+ row offset) (- col offset)]
[(+ row offset) (+ col offset)]]))
(apply map vector)
(filter #(= % (seq "XMAS")))
count)))
acc
s))
0)
;
)
(defn get-count-2 [row col]
(if (= (get-char row col) \A)
(let [corners [[(dec row) (dec col)]
[(inc row) (dec col)]
[(dec row) (inc col)]
[(inc row) (inc col)]]
chars (mapv #(apply get-char %) corners)]
(if (and (= 2
(count (filter #(= % \S) chars))
(count (filter #(= % \M) chars)))
(not= (get chars 0)
(get chars 3)))
1
0))
0))
0))
;; part 2
(->> input
@ -80,7 +36,20 @@
(map-indexed vector)
(reduce (fn [acc [row s]]
(reduce (fn [acc2 [col _c]]
(+ acc2 (get-count-2 row col)))
(+ acc2 (if (= (get-char row col) \A)
(let [corners [[(dec row) (dec col)]
[(inc row) (dec col)]
[(dec row) (inc col)]
[(inc row) (inc col)]]
chars (mapv #(apply get-char %) corners)]
(if (and (= 2
(count (filter #(= % \S) chars))
(count (filter #(= % \M) chars)))
(not= (get chars 0)
(get chars 3)))
1
0))
0)))
acc
s))
0)