summaryrefslogtreecommitdiff
path: root/2019/19.hs
diff options
context:
space:
mode:
authortomsmeding <tom.smeding@gmail.com>2019-12-20 16:57:03 +0100
committertomsmeding <tom.smeding@gmail.com>2019-12-20 16:57:03 +0100
commit3b25c8cffe76f69d01c5c88edb56e0cc5193074a (patch)
tree66c5db65e9777139c6e54be92a8f950cabe969cf /2019/19.hs
parent42183868949b61403b6bd4d5cce728a395b22ebe (diff)
Day 19
Diffstat (limited to '2019/19.hs')
-rw-r--r--2019/19.hs32
1 files changed, 32 insertions, 0 deletions
diff --git a/2019/19.hs b/2019/19.hs
new file mode 100644
index 0000000..17598b2
--- /dev/null
+++ b/2019/19.hs
@@ -0,0 +1,32 @@
+module Main where
+
+import Data.List
+import Data.Maybe
+
+import Input
+import IntCode
+
+
+main :: IO ()
+main = do
+ program <- parse . head <$> getInput 19
+
+ let samplePoint x y = head (snd (run program [x, y]))
+
+ print (sum [samplePoint x y | y <- [0..49], x <- [0..49]])
+
+ let pollDist = 1000
+ hitsAt d = let d' = fromIntegral d in [(x, y) | x <- [0..d'], let y = d' - x, samplePoint x y == 1]
+ pollHits = hitsAt pollDist
+
+ guessDist = 100 * pollDist `div` length pollHits
+ (minDist, maxDist) = (995 * guessDist `div` 1000, 1005 * guessDist `div` 1000)
+
+ hitsList = map hitsAt [minDist..maxDist]
+ dist = fromJust (findIndex ((>= 100) . length) hitsList) + minDist
+ finalHits = hitsList !! (dist - minDist)
+
+ (lbX, lbY) = head finalHits
+ ltY = lbY - 99
+
+ print (10000 * lbX + ltY)