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
|
||||
|
||||
data SquareSort = SquareSortTree | SquareSortEmpty
|
||||
deriving Eq
|
||||
|
||||
instance Show SquareSort
|
||||
where
|
||||
show SquareSortTree = "#"
|
||||
show SquareSortEmpty = "."
|
||||
show SquareSortEmpty = "_"
|
||||
|
||||
char2ss :: Char -> Maybe SquareSort
|
||||
char2ss '#' = Just SquareSortTree
|
||||
|
@ -61,7 +62,7 @@ newtype Grid = Grid [[SquareSort]]
|
|||
|
||||
instance Show (Grid)
|
||||
where
|
||||
show (Grid x) = intersperse '\n' $ map show x
|
||||
show (Grid x) = concat $ intersperse "\n" $ map show x
|
||||
|
||||
parseInput :: [String] -> Maybe Grid
|
||||
parseInput x = Grid <$> sequence ( (map str2sss) x )
|
||||
|
@ -72,10 +73,48 @@ getSquareSortAtPosition (Grid grid) (Position x y) =
|
|||
where
|
||||
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 = do
|
||||
putStrLn "Day 3 - Part 1"
|
||||
inputData <- readFile "day3/input"
|
||||
print $ take 5 $ line 3 1
|
||||
print $ take 5 $ line 7 1
|
||||
let (Just parsedTestData) = parseInput testData
|
||||
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