Created
November 5, 2019 14:48
-
-
Save ynonp/701cbadca2ed513b7f39ab0b7e37c934 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns aoc2018.day4 | |
(:require [clojure.math.combinatorics :as combo])) | |
(defn add-guard-sleep-time | |
[guards-map current-guard last-sleep-time line] | |
(let [ | |
wake-up-time (first (drop 1 (re-find #"\d+-\d+-\d+ \d+:(\d+)" line))) | |
nwake-up-time (Integer/parseInt wake-up-time) | |
nsleep-time (Integer/parseInt last-sleep-time)] | |
(assoc | |
guards-map | |
current-guard | |
(concat (get guards-map current-guard []) (vec (for [x (range nsleep-time nwake-up-time)] x)))))) | |
(defn create-data | |
[[guards-map current-guard last-sleep-time] line] | |
(cond | |
(re-find #"begins shift" line) [guards-map (first (drop 1 (re-find #"Guard #(\d+)" line))) 0] | |
(re-find #"falls asleep" line) [guards-map current-guard (first (drop 1 (re-find #"\d+-\d+-\d+ \d+:(\d+)" line)))] | |
(re-find #"wakes up" line) [(add-guard-sleep-time guards-map current-guard last-sleep-time line) current-guard 0])) | |
(defn most-sleepy-guard | |
[guardsmap] | |
(apply max-key #(count (get guardsmap %)) (keys guardsmap))) | |
(defn most-slept-minute | |
[guardsmap guard] | |
(first (last (sort-by val (frequencies (get guardsmap guard)))))) | |
(defn most-slept-minute2 | |
[guardsmap guard] | |
(last (last (sort-by val (frequencies (get guardsmap guard)))))) | |
(defn part1 | |
[] | |
(with-open [rdr (clojure.java.io/reader "./inputs/day4.txt")] | |
(let [lines (line-seq rdr) | |
data (reduce | |
create-data | |
[{} 0 0] | |
(sort lines)) | |
[guardsmap _ _] data | |
guard (most-sleepy-guard guardsmap) | |
minute (most-slept-minute guardsmap guard)] | |
(println guard) | |
(println minute) | |
(println (* (Integer/parseInt guard) minute))))) | |
(defn most-frequent | |
[v] | |
(first (sort-by val (frequencies v)))) | |
(defn part2 | |
[] | |
(with-open [rdr (clojure.java.io/reader "./inputs/day4.txt")] | |
(let [lines (line-seq rdr) | |
data (reduce | |
create-data | |
[{} 0 0] | |
(sort lines)) | |
[guardsmap _ _] data | |
guard-ids (keys guardsmap) | |
guard (apply max-key (partial most-slept-minute2 guardsmap) guard-ids) | |
minute (most-slept-minute guardsmap guard) | |
] | |
(println (* minute (Integer/parseInt guard)))))) | |
(part2) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment