aboutsummaryrefslogtreecommitdiffstats
path: root/day02
diff options
context:
space:
mode:
Diffstat (limited to 'day02')
-rw-r--r--day02/input.txt1000
-rw-r--r--day02/main.hs35
-rw-r--r--day02/test.txt6
3 files changed, 1041 insertions, 0 deletions
diff --git a/day02/input.txt b/day02/input.txt
new file mode 100644
index 0000000..feeceec
--- /dev/null
+++ b/day02/input.txt
@@ -0,0 +1,1000 @@
+forward 2
+down 7
+down 8
+forward 9
+down 8
+forward 9
+forward 8
+down 3
+forward 8
+forward 5
+up 2
+down 9
+down 4
+forward 4
+forward 3
+down 8
+down 9
+forward 5
+down 1
+up 1
+forward 4
+up 5
+forward 2
+down 6
+forward 9
+forward 3
+forward 7
+down 6
+down 1
+forward 8
+down 3
+forward 1
+up 6
+down 1
+down 2
+forward 9
+down 7
+down 1
+down 7
+down 7
+up 5
+down 8
+forward 6
+up 8
+up 2
+forward 6
+up 1
+down 9
+forward 8
+forward 4
+up 3
+forward 7
+down 2
+down 8
+forward 5
+down 9
+up 4
+forward 7
+forward 5
+down 5
+down 5
+forward 3
+forward 2
+down 2
+up 4
+up 7
+down 8
+up 8
+forward 1
+up 4
+forward 4
+down 2
+forward 5
+forward 7
+down 4
+forward 8
+down 2
+forward 5
+forward 9
+forward 6
+forward 5
+down 5
+forward 4
+forward 3
+down 7
+down 8
+forward 9
+forward 7
+down 3
+down 6
+forward 4
+down 7
+up 9
+down 8
+up 7
+up 3
+forward 6
+forward 9
+down 2
+down 3
+down 1
+down 3
+forward 8
+forward 3
+forward 9
+down 5
+up 1
+up 2
+down 9
+up 9
+down 5
+down 9
+forward 1
+down 3
+down 5
+down 1
+forward 7
+down 6
+forward 7
+forward 4
+up 2
+up 1
+forward 9
+down 2
+down 6
+down 5
+down 6
+forward 8
+down 5
+forward 1
+forward 2
+down 7
+down 5
+down 7
+up 9
+down 9
+up 4
+down 7
+up 8
+down 9
+forward 3
+down 6
+down 2
+forward 9
+down 4
+up 7
+forward 3
+down 5
+forward 8
+forward 9
+down 2
+up 5
+forward 2
+forward 9
+up 5
+down 2
+forward 8
+forward 6
+down 7
+down 3
+forward 4
+forward 3
+forward 9
+up 4
+up 4
+forward 7
+up 3
+forward 6
+down 7
+up 8
+forward 2
+up 1
+down 6
+forward 4
+up 6
+up 6
+up 3
+forward 4
+forward 2
+forward 5
+forward 8
+down 9
+down 4
+down 3
+down 1
+down 6
+down 4
+down 5
+down 7
+down 5
+up 4
+forward 3
+down 4
+down 7
+down 7
+down 2
+forward 2
+forward 9
+up 6
+down 3
+up 9
+forward 8
+down 9
+up 2
+up 2
+up 2
+up 1
+down 6
+forward 9
+forward 2
+forward 2
+forward 2
+forward 5
+up 3
+down 7
+down 6
+down 8
+up 3
+up 9
+down 3
+forward 1
+forward 7
+down 7
+down 1
+forward 3
+down 7
+down 9
+down 7
+down 3
+up 2
+down 6
+up 6
+down 1
+up 2
+forward 7
+up 2
+down 7
+up 2
+down 9
+down 3
+forward 6
+down 5
+down 1
+forward 5
+down 2
+down 6
+down 1
+down 3
+down 3
+down 5
+forward 2
+forward 4
+forward 8
+forward 6
+forward 4
+forward 9
+up 8
+down 5
+forward 1
+down 1
+forward 1
+forward 6
+up 1
+down 6
+down 3
+forward 9
+forward 5
+forward 4
+up 3
+up 7
+down 2
+up 4
+up 2
+down 1
+forward 6
+forward 9
+forward 4
+forward 2
+down 8
+forward 4
+forward 3
+up 5
+down 4
+forward 3
+down 8
+down 5
+down 5
+forward 1
+forward 6
+forward 4
+forward 5
+forward 9
+forward 5
+down 4
+forward 3
+forward 8
+down 8
+down 1
+up 4
+down 4
+up 7
+forward 2
+forward 6
+down 3
+down 5
+down 5
+down 8
+up 3
+down 2
+forward 4
+forward 2
+forward 4
+forward 9
+up 2
+down 7
+up 7
+down 2
+forward 4
+up 7
+forward 4
+down 2
+forward 7
+up 2
+down 3
+forward 5
+down 7
+down 2
+up 2
+up 1
+up 7
+up 9
+down 3
+forward 1
+forward 3
+down 2
+down 3
+forward 6
+down 7
+forward 9
+down 9
+forward 3
+forward 2
+down 1
+up 9
+down 4
+forward 4
+up 4
+forward 7
+up 3
+down 4
+down 9
+down 3
+forward 7
+down 6
+down 7
+down 6
+up 5
+forward 3
+forward 9
+up 2
+up 4
+up 9
+down 2
+forward 5
+up 1
+down 7
+down 5
+up 2
+forward 8
+down 8
+up 3
+forward 4
+down 9
+forward 6
+down 9
+down 5
+forward 6
+down 8
+up 6
+down 3
+forward 6
+forward 3
+down 3
+down 5
+down 7
+down 1
+down 5
+down 7
+down 5
+forward 3
+down 2
+forward 4
+up 4
+up 1
+up 7
+forward 1
+forward 5
+down 4
+down 8
+down 3
+forward 4
+down 3
+up 7
+down 6
+forward 9
+up 8
+forward 2
+forward 5
+down 6
+up 4
+forward 8
+forward 5
+down 6
+forward 2
+down 7
+forward 3
+forward 1
+forward 6
+down 9
+up 6
+down 4
+down 2
+up 8
+forward 4
+down 8
+forward 8
+up 9
+forward 7
+down 6
+up 9
+down 4
+up 6
+down 4
+down 3
+up 7
+up 4
+forward 5
+up 9
+down 9
+up 6
+down 3
+forward 8
+down 9
+forward 7
+up 3
+up 9
+forward 8
+down 3
+forward 3
+forward 5
+down 6
+forward 3
+down 4
+up 6
+forward 3
+forward 7
+down 1
+down 6
+down 4
+forward 6
+up 6
+down 5
+down 6
+down 4
+up 2
+down 7
+down 9
+down 2
+down 6
+forward 3
+forward 4
+down 5
+up 5
+down 5
+forward 3
+forward 6
+down 4
+down 7
+up 2
+forward 7
+down 7
+up 6
+up 3
+forward 9
+forward 8
+up 6
+forward 2
+down 2
+forward 8
+forward 4
+up 6
+forward 6
+down 8
+up 3
+up 5
+forward 6
+up 8
+down 1
+down 4
+up 9
+forward 6
+up 5
+down 6
+down 8
+down 9
+forward 5
+up 3
+down 7
+forward 3
+forward 6
+down 3
+down 1
+down 9
+up 9
+down 4
+down 7
+forward 2
+forward 4
+down 7
+forward 7
+up 5
+down 9
+up 7
+down 4
+forward 6
+down 5
+forward 4
+up 8
+down 4
+down 7
+forward 3
+down 6
+down 1
+forward 3
+down 4
+up 6
+up 5
+up 7
+forward 5
+down 4
+forward 7
+up 1
+down 4
+forward 4
+down 2
+down 6
+forward 1
+up 3
+up 8
+forward 6
+forward 6
+down 5
+forward 7
+down 6
+down 8
+forward 6
+down 6
+forward 3
+forward 5
+down 9
+down 5
+up 4
+down 5
+down 1
+forward 1
+forward 5
+down 2
+forward 5
+forward 2
+forward 5
+up 3
+forward 5
+up 8
+forward 9
+forward 3
+down 2
+up 2
+forward 7
+down 5
+up 1
+down 3
+down 7
+up 2
+forward 8
+forward 6
+forward 1
+forward 6
+forward 6
+down 5
+forward 4
+down 5
+forward 9
+forward 7
+down 7
+down 7
+down 9
+forward 4
+down 4
+forward 3
+down 6
+forward 5
+down 9
+forward 6
+up 7
+down 3
+up 4
+up 4
+down 1
+down 2
+up 5
+forward 6
+forward 2
+down 7
+up 6
+up 3
+down 8
+forward 1
+down 3
+up 9
+down 2
+forward 6
+forward 1
+forward 4
+up 1
+down 8
+down 2
+down 9
+down 5
+forward 3
+down 1
+down 6
+down 5
+down 3
+forward 1
+forward 9
+up 2
+down 3
+down 3
+down 9
+down 7
+forward 6
+forward 8
+forward 4
+up 7
+down 2
+forward 3
+forward 1
+up 4
+forward 8
+up 9
+forward 8
+forward 2
+down 5
+forward 2
+down 6
+down 6
+down 4
+forward 8
+down 6
+forward 2
+forward 8
+down 7
+down 6
+forward 2
+down 1
+down 8
+forward 2
+forward 9
+up 6
+forward 6
+down 3
+down 2
+up 5
+up 6
+down 6
+up 7
+forward 5
+forward 7
+down 1
+forward 7
+forward 9
+down 3
+forward 4
+forward 5
+down 1
+up 3
+forward 2
+up 5
+forward 2
+forward 1
+down 5
+down 4
+down 8
+up 8
+forward 3
+down 3
+forward 4
+down 6
+up 8
+down 5
+up 2
+down 1
+up 3
+forward 8
+up 6
+forward 9
+up 9
+down 5
+forward 2
+forward 9
+up 6
+forward 1
+down 2
+forward 4
+forward 4
+forward 1
+forward 5
+forward 1
+forward 4
+down 5
+down 1
+down 2
+down 2
+forward 7
+down 7
+down 7
+down 4
+down 7
+down 4
+down 3
+up 7
+up 1
+forward 2
+forward 3
+down 4
+down 5
+forward 9
+up 7
+forward 6
+down 1
+forward 6
+forward 6
+forward 8
+down 3
+forward 2
+down 6
+forward 9
+up 6
+up 6
+forward 7
+down 5
+down 6
+up 3
+down 5
+up 4
+forward 3
+down 7
+forward 9
+up 1
+down 1
+up 6
+down 3
+up 2
+down 5
+forward 3
+forward 6
+down 9
+down 4
+forward 7
+down 1
+up 1
+forward 3
+forward 5
+up 7
+down 3
+up 9
+up 9
+down 4
+up 4
+forward 8
+up 9
+down 8
+forward 6
+forward 4
+forward 9
+forward 8
+down 2
+forward 3
+forward 2
+down 3
+up 1
+forward 6
+down 3
+down 7
+down 3
+down 5
+down 9
+up 9
+forward 8
+forward 6
+down 8
+forward 3
+down 4
+down 2
+down 9
+forward 4
+forward 2
+up 4
+forward 1
+up 8
+up 1
+down 4
+up 2
+down 1
+up 7
+down 2
+down 4
+up 4
+forward 2
+down 3
+forward 2
+forward 3
+down 5
+forward 9
+forward 7
+down 1
+up 3
+down 3
+forward 3
+down 6
+forward 5
+up 3
+up 3
+up 1
+forward 7
+forward 1
+forward 2
+forward 2
+down 4
+up 7
+forward 1
+forward 1
+forward 6
+down 8
+up 8
+down 8
+down 4
+down 6
+forward 8
+forward 4
+forward 5
+down 2
+down 3
+forward 7
+down 6
+forward 4
+forward 1
+up 7
+up 5
+up 2
+forward 1
+forward 8
+forward 2
+up 9
+forward 4
+forward 5
+down 2
+forward 5
+forward 7
+down 3
+forward 1
+down 3
+up 5
+up 2
+up 2
+up 2
+forward 4
+forward 4
+forward 8
+forward 2
+down 3
+up 7
+down 4
+down 2
+down 7
+forward 2
+down 2
+forward 7
+up 9
+up 7
+forward 7
+forward 7
+down 3
+down 4
+up 4
+down 2
+down 8
+forward 4
+down 1
+up 6
+forward 4
+down 2
+up 8
+down 1
+down 8
+down 6
+up 9
+forward 4
+up 1
+down 2
+down 9
+down 7
+down 4
+down 8
+down 8
+up 1
+down 5
+up 5
+down 7
+up 7
+forward 5
+down 3
+forward 7
+up 5
+down 3
+forward 9
+up 5
+down 7
+forward 8
+forward 8
+down 2
+forward 7
+forward 8
+down 4
+up 7
+down 2
+up 7
+forward 5
+down 1
+down 3
+forward 9
+up 4
+forward 6
+forward 4
+down 5
+down 7
+forward 2
+forward 4
+down 2
+forward 1
+down 5
+up 2
+down 8
+down 1
+down 4
+down 8
+down 6
+forward 9
+forward 2
+forward 6
+forward 4
+down 1
+forward 8
+up 4
+forward 6
+down 4
+forward 4
+forward 3
+forward 6
+forward 9
+forward 8
+down 1
+forward 5
+down 8
+forward 7
+up 1
+down 3
+up 6
+forward 5
+forward 8
+forward 8
+forward 5
+forward 5
+forward 1
+up 9
+forward 7
+up 3
+down 2
+down 4
+forward 6
+up 2
+forward 5
+up 8
+forward 8
+forward 2
+forward 6
+forward 3
+up 4
+forward 3
+forward 6
diff --git a/day02/main.hs b/day02/main.hs
new file mode 100644
index 0000000..ac740ce
--- /dev/null
+++ b/day02/main.hs
@@ -0,0 +1,35 @@
+module Main where
+
+import Data.Foldable (Foldable (foldl'))
+import Utils
+
+toDelta :: (String, Int) -> (Int, Int)
+toDelta ("up", n) = (0, - n)
+toDelta ("down", n) = (0, n)
+toDelta ("forward", n) = (n, 0)
+toDelta x = error $ "invalid instruction: " ++ show x
+
+e1 :: [(String, Int)] -> Int
+e1 =
+ map toDelta
+ .> foldl' (\(ax, ay) (x, y) -> (ax + x, ay + y)) (0, 0)
+ .> uncurry (*)
+
+e2 :: [(String, Int)] -> Int
+e2 =
+ map toDelta
+ .> foldl' (\(ax, ay, aaim) (x, aim) -> (ax + x, ay + aaim * x, aaim + aim)) (0, 0, 0)
+ .> \(x, y, _) -> x * y
+
+main :: IO ()
+main =
+ do
+ contents <- getContents
+ let input =
+ contents
+ $> lines
+ .> map words
+ .> map (\[x, y] -> (x, read y))
+
+ e1 input $> print
+ e2 input $> print
diff --git a/day02/test.txt b/day02/test.txt
new file mode 100644
index 0000000..b7172ac
--- /dev/null
+++ b/day02/test.txt
@@ -0,0 +1,6 @@
+forward 5
+down 5
+forward 8
+up 3
+down 8
+forward 2