mirror of
https://github.com/mx42/adventofcode.git
synced 2026-01-14 13:59:51 +01:00
Add days 10, 11, and 13p1
This commit is contained in:
38
y2019/src/Day11.hs
Normal file
38
y2019/src/Day11.hs
Normal file
@@ -0,0 +1,38 @@
|
||||
module Day11 (day11) where
|
||||
|
||||
import qualified Data.Map as M
|
||||
import Data.List
|
||||
import Intcode
|
||||
|
||||
getCoords :: ([Int] -> Int) -> [((Int, Int), Int)] -> (Int, Int)
|
||||
getCoords fn (((x, y),_):xs) = getCoords' x y xs
|
||||
where getCoords' ax ay (((bx, by), _):xs') = getCoords' (fn [ax, bx]) (fn [ay, by]) xs'
|
||||
getCoords' ax ay [] = (ax, ay)
|
||||
|
||||
drawLine :: Int -> (Int, Int) -> Int -> M.Map (Int, Int) Int -> String
|
||||
drawLine curY (minX, maxX) curX paint
|
||||
| curX == maxX = [color, '\n']
|
||||
| otherwise = [color] ++ drawLine curY (minX, maxX) (curX + 1) paint
|
||||
where color = if (M.findWithDefault 0 (curX, curY) paint) == 0 then '.' else '#'
|
||||
|
||||
draw :: M.Map (Int, Int) Int -> String
|
||||
draw painting = draw' minCoords maxCoords (snd minCoords)
|
||||
where minCoords = getCoords minimum $ M.toList painting
|
||||
maxCoords = getCoords maximum $ M.toList painting
|
||||
draw' (minX, _) (maxX, maxY) curY
|
||||
| curY == maxY = drawLine curY (minX, maxX) minX painting
|
||||
| otherwise = (drawLine curY (minX, maxX) minX painting) ++
|
||||
(draw' minCoords maxCoords (curY + 1))
|
||||
|
||||
day11 :: IO ()
|
||||
day11 = do
|
||||
putStrLn "AoC 2019 day 11"
|
||||
input <- getLine
|
||||
let memory = parseProgram input
|
||||
let painting = runProgramPaint memory 0
|
||||
let registration = runProgramPaint memory 1
|
||||
|
||||
putStrLn $ "Part 1: " ++ (show $ length $ painting)
|
||||
|
||||
putStrLn $ "Part 2:"
|
||||
putStrLn $ draw registration
|
||||
Reference in New Issue
Block a user