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)