1 DEC
This commit is contained in:
79
D1/main.janet
Normal file
79
D1/main.janet
Normal 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
59
D1/prompt.md
Normal 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
4
D1/retrospect.md
Normal 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.
|
||||||
Reference in New Issue
Block a user