This commit is contained in:
2024-12-01 17:16:03 -05:00
commit 3449bfb935
4 changed files with 1142 additions and 0 deletions

1000
D1/input Normal file

File diff suppressed because it is too large Load Diff

79
D1/main.janet Normal file
View File

@@ -0,0 +1,79 @@
# (import math)
# The smallest number in the left list is 1, and the smallest number in the
# right list is 3. The distance between them is 2.
(def test-input
[[3 4]
[4 3]
[2 5]
[1 3]
[3 9]
[3 3]])
(defn unzip [lst]
(def left @[])
(def right @[])
(each [fst snd] lst
(array/push left fst)
(array/push right snd))
[(sorted left) (sorted right)])
(def test-input-unzipped (unzip test-input))
# The second-smallest number in the left list is 2, and the second-smallest
# number in the right list is another 3. The distance between them is 1.
# The third-smallest number in both lists is 3, so the distance between them is
# 0.
# The next numbers to pair up are 3 and 4, a distance of 1.
# The fifth-smallest numbers in each list are 3 and 5, a distance of 2.
# Finally, the largest number in the left list is 4, while the largest number in
# the right list is 9; these are a distance 5 apart. To find the total distance
# between the left list and the right list, add up the distances between all of
# the pairs you found.
# In the example above, this is 2 + 1 + 0 + 1 + 2 + 5, a total distance of 11!
(defn distances [lst]
(def max-idx (min (length (lst 0))
(length (lst 1))))
(def results @[])
(for idx 0 max-idx
(def dist (math/abs (- ((lst 0) idx)
((lst 1) idx))))
(array/push results dist))
(+ ;results))
(def line-grammar
'{:main (sequence (capture :d+) :s+ (capture :d+)) })
(def handle (file/open "input"))
(def buffer @"")
(def pairs @[])
(while true
(def line (file/read handle :line))
(when (not line)
(break))
(def captures (peg/match line-grammar line))
(when captures
(def [fst snd] captures)
(array/push pairs [(scan-number fst) (scan-number snd)])))
(print
(distances (unzip pairs)))
(def [left right] (unzip pairs))
(print
(+ ;(map (fn [entry]
(def equal-to-entry?
(fn [rval]
(= rval entry)))
(* entry (count equal-to-entry? right)))
left)))
# ----

59
D1/prompt.md Normal file
View File

@@ -0,0 +1,59 @@
You haven't even left yet and the group of Elvish Senior Historians has already
hit a problem: their list of locations to check is currently empty. Eventually,
someone decides that the best place to check first would be the Chief
Historian's office.
Upon pouring into the office, everyone confirms that the Chief Historian is
indeed nowhere to be found. Instead, the Elves discover an assortment of notes
and lists of historically significant locations! This seems to be the planning
the Chief Historian was doing before he left. Perhaps these notes can be used
to determine which locations to search?
Throughout the Chief's office, the historically significant locations are listed
not by name but by a unique number called the location ID. To make sure they
don't miss anything, The Historians split into two groups, each searching the
office and trying to create their own complete list of location IDs.
There's just one problem: by holding the two lists up side by side (your puzzle
input), it quickly becomes clear that the lists aren't very similar. Maybe you
can help The Historians reconcile their lists?
For example:
```
3 4
4 3
2 5
1 3
3 9
3 3
```
Maybe the lists are only off by a small
amount! To find out, pair up the numbers and measure how far apart they are.
Pair up the smallest number in the left list with the smallest number in the
right list, then the second-smallest left number with the second-smallest right
number, and so on.
Within each pair, figure out how far apart the two numbers are; you'll need to
add up all of those distances. For example, if you pair up a 3 from the left
list with a 7 from the right list, the distance apart is 4; if you pair up a 9
with a 3, the distance apart is 6.
In the example list above, the pairs and distances would be as follows:
The smallest number in the left list is 1, and the smallest number in the right
list is 3. The distance between them is 2. The second-smallest number in the
left list is 2, and the second-smallest number in the right list is another 3.
The distance between them is 1. The third-smallest number in both lists is 3,
so the distance between them is 0. The next numbers to pair up are 3 and 4, a
distance of 1. The fifth-smallest numbers in each list are 3 and 5, a distance
of 2. Finally, the largest number in the left list is 4, while the largest
number in the right list is 9; these are a distance 5 apart. To find the total
distance between the left list and the right list, add up the distances between
all of the pairs you found. In the example above, this is 2 + 1 + 0 + 1 + 2 +
5, a total distance of 11!
Your actual left and right lists contain many location IDs. What is the total
distance between your lists?

4
D1/retrospect.md Normal file
View File

@@ -0,0 +1,4 @@
1. Read the documentation !!!
2. Actually seriously though, read it, don't just skim it.
3. Use the best tool for the job.
5. Debugging feels really hard; none of the debugging feel standard. I need to read the manual on how to do debugging.