Done, but buggy
This commit is contained in:
parent
40858ab68e
commit
fff23228a4
1 changed files with 42 additions and 3 deletions
45
day3/main.hs
45
day3/main.hs
|
@ -43,11 +43,12 @@ line a b = Position 0 0 : [ Position (x*a) (x*b) | x <- [1..] ]
|
||||||
-- SquareSortEmpty or SquareSortTree
|
-- SquareSortEmpty or SquareSortTree
|
||||||
|
|
||||||
data SquareSort = SquareSortTree | SquareSortEmpty
|
data SquareSort = SquareSortTree | SquareSortEmpty
|
||||||
|
deriving Eq
|
||||||
|
|
||||||
instance Show SquareSort
|
instance Show SquareSort
|
||||||
where
|
where
|
||||||
show SquareSortTree = "#"
|
show SquareSortTree = "#"
|
||||||
show SquareSortEmpty = "."
|
show SquareSortEmpty = "_"
|
||||||
|
|
||||||
char2ss :: Char -> Maybe SquareSort
|
char2ss :: Char -> Maybe SquareSort
|
||||||
char2ss '#' = Just SquareSortTree
|
char2ss '#' = Just SquareSortTree
|
||||||
|
@ -61,7 +62,7 @@ newtype Grid = Grid [[SquareSort]]
|
||||||
|
|
||||||
instance Show (Grid)
|
instance Show (Grid)
|
||||||
where
|
where
|
||||||
show (Grid x) = intersperse '\n' $ map show x
|
show (Grid x) = concat $ intersperse "\n" $ map show x
|
||||||
|
|
||||||
parseInput :: [String] -> Maybe Grid
|
parseInput :: [String] -> Maybe Grid
|
||||||
parseInput x = Grid <$> sequence ( (map str2sss) x )
|
parseInput x = Grid <$> sequence ( (map str2sss) x )
|
||||||
|
@ -72,10 +73,48 @@ getSquareSortAtPosition (Grid grid) (Position x y) =
|
||||||
where
|
where
|
||||||
n = length (grid !! 0)
|
n = length (grid !! 0)
|
||||||
|
|
||||||
|
solveDay3Part1 :: Grid -> (Int,Int) -> Int
|
||||||
|
solveDay3Part1 grid@(Grid lx) (x',y')=
|
||||||
|
length $ filter (== SquareSortTree) $ map (getSquareSortAtPosition grid) px
|
||||||
|
where
|
||||||
|
px = take n $ line x' y'
|
||||||
|
n = (length lx) `div` y'
|
||||||
|
|
||||||
|
-- Determine the number of trees you would encounter if, for each of the
|
||||||
|
-- following slopes, you start at the top-left corner and traverse the map all
|
||||||
|
-- the way to the bottom:
|
||||||
|
--
|
||||||
|
-- - Right 1, down 1.
|
||||||
|
-- - Right 3, down 1. (This is the slope you already checked.)
|
||||||
|
-- - Right 5, down 1.
|
||||||
|
-- - Right 7, down 1.
|
||||||
|
-- - Right 1, down 2.
|
||||||
|
--
|
||||||
|
-- What do you get if you multiply together the number of trees encountered on
|
||||||
|
-- each of the listed slopes?
|
||||||
|
|
||||||
|
solveDay3Part2 :: Grid -> Int
|
||||||
|
solveDay3Part2 grid =
|
||||||
|
foldl (*) 1 [ solveDay3Part1 grid (1,1)
|
||||||
|
, solveDay3Part1 grid (3,1)
|
||||||
|
, solveDay3Part1 grid (5,1)
|
||||||
|
, solveDay3Part1 grid (7,1)
|
||||||
|
, solveDay3Part1 grid (1,2)
|
||||||
|
]
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
putStrLn "Day 3 - Part 1"
|
putStrLn "Day 3 - Part 1"
|
||||||
|
inputData <- readFile "day3/input"
|
||||||
print $ take 5 $ line 3 1
|
print $ take 5 $ line 3 1
|
||||||
|
print $ take 5 $ line 7 1
|
||||||
let (Just parsedTestData) = parseInput testData
|
let (Just parsedTestData) = parseInput testData
|
||||||
print parsedTestData
|
print parsedTestData
|
||||||
print $ getSquareSortAtPosition parsedTestData (Position 3 0)
|
print $ getSquareSortAtPosition parsedTestData (Position 10 10)
|
||||||
|
let (Just parsedInputData) = parseInput (lines inputData)
|
||||||
|
putStrLn "Part 1:"
|
||||||
|
print $ solveDay3Part1 parsedTestData (3,1)
|
||||||
|
print $ solveDay3Part1 parsedInputData (3,1)
|
||||||
|
putStrLn "Part 2:"
|
||||||
|
print $ solveDay3Part2 parsedTestData -- This gives the right answer, but
|
||||||
|
print $ solveDay3Part2 parsedInputData -- This gives the wrong answer :s
|
||||||
|
|
Loading…
Reference in a new issue