diff --git a/day3/main.hs b/day3/main.hs
index e05950f..29c35da 100755
--- a/day3/main.hs
+++ b/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