My solution to day 3 in Haskell. AoC is the first thing I have ever written in Haskell and it shows! I am an aerodynamics engineer who uses MATLAB and Python to basically just deal with matrix operations. It's been tricky to adjust to a functional way of thinking & where everything is not just a matrix of doubles!
main = do
input <- fmap lines $ readFile "input_day03.txt"
print $ countLetters (tail $ countTrees (every 1 input) [0,3..]) '#'
print $ product $ countAllTrees input [1,1,1,1,2] [1,3,5,7,1]
countTrees :: [String] -> [Int] -> String
countTrees  _ = 
countTrees (x:xs) (y:ys) = [x !! (y `mod` length x)] ++ countTrees xs ys
countLetters :: String -> Char -> Int
countLetters str c = length $ filter (== c) str
every :: Int -> [String] -> [String]
every n (x:xs) = [x] ++ every n (drop (n-1) xs)
every _  = 
countAllTrees :: [String] -> [Int] -> [Int] -> [Int]
countAllTrees input (x:xs) (y:ys) =
[countLetters (tail $ countTrees (every x input) [0,y..]) '#']
++ countAllTrees input xs ys
countAllTrees _  _ =