Added day 1 and 2
This commit is contained in:
commit
a3ae16a66e
8 changed files with 3087 additions and 0 deletions
10
1/example.txt
Normal file
10
1/example.txt
Normal file
|
@ -0,0 +1,10 @@
|
|||
199
|
||||
200
|
||||
208
|
||||
210
|
||||
200
|
||||
207
|
||||
240
|
||||
269
|
||||
260
|
||||
263
|
2000
1/input.txt
Normal file
2000
1/input.txt
Normal file
File diff suppressed because it is too large
Load diff
22
1/solution.hs
Normal file
22
1/solution.hs
Normal file
|
@ -0,0 +1,22 @@
|
|||
import Data.List
|
||||
|
||||
main :: IO ()
|
||||
main = readFile "1/input.txt" >>= print . solve . parse . lines
|
||||
|
||||
parse :: [String] -> [Int]
|
||||
parse = map read
|
||||
|
||||
solve :: [Int] -> (Int, Int)
|
||||
solve input = (f input, g input)
|
||||
where f = countInc
|
||||
g = countInc . map sum . slide 3
|
||||
|
||||
countInc :: [Int] -> Int
|
||||
countInc (a : rest @ (b : _))
|
||||
| a < b = countInc rest + 1
|
||||
| otherwise = countInc rest
|
||||
countInc _ = 0
|
||||
|
||||
slide :: Int -> [Int] -> [[Int]]
|
||||
slide _ [] = []
|
||||
slide n list = take n list : slide n (tail list)
|
6
2/example.txt
Normal file
6
2/example.txt
Normal file
|
@ -0,0 +1,6 @@
|
|||
forward 5
|
||||
down 5
|
||||
forward 8
|
||||
up 3
|
||||
down 8
|
||||
forward 2
|
1000
2/input.txt
Normal file
1000
2/input.txt
Normal file
File diff suppressed because it is too large
Load diff
41
2/solution.hs
Normal file
41
2/solution.hs
Normal file
|
@ -0,0 +1,41 @@
|
|||
main :: IO ()
|
||||
main = readFile "2/input.txt" >>= print . solve . parse . lines
|
||||
|
||||
parse :: [String] -> [Instruction]
|
||||
parse = map (parseLine . words)
|
||||
|
||||
solve :: [Instruction] -> (Int,Int)
|
||||
solve input = (f input, g input)
|
||||
where f = uncurry (*) . simulate Abs
|
||||
g = uncurry (*) . simulate (Aim 0)
|
||||
|
||||
data Nav = Aim Int
|
||||
| Abs
|
||||
|
||||
data Instruction = Forward Int
|
||||
| Down Int
|
||||
| Up Int
|
||||
|
||||
parseLine :: [String] -> Instruction
|
||||
parseLine [ s, x ]
|
||||
| s == "forward" = Forward n
|
||||
| s == "down" = Down n
|
||||
| s == "up" = Up n
|
||||
where
|
||||
n = read x
|
||||
|
||||
simulate :: Nav -> [Instruction] -> (Int,Int)
|
||||
simulate nav = iter nav (0,0)
|
||||
|
||||
iter :: Nav -> (Int,Int) -> [Instruction] -> (Int,Int)
|
||||
iter _ r [] = r
|
||||
iter Abs (x,y) (i:is) = case i of
|
||||
Forward n -> iter Abs (x+n,y)
|
||||
Down n -> iter Abs (x,y+n)
|
||||
Up n -> iter Abs (x,y-n)
|
||||
$ is
|
||||
iter (Aim a) (x,y) (i:is) = case i of
|
||||
Forward n -> iter (Aim a) (x+n,y+(a*n))
|
||||
Down n -> iter (Aim (a+n)) (x,y)
|
||||
Up n -> iter (Aim (a-n)) (x,y)
|
||||
$ is
|
1
README.md
Normal file
1
README.md
Normal file
|
@ -0,0 +1 @@
|
|||
# Advent of Code 2021
|
7
shell.nix
Normal file
7
shell.nix
Normal file
|
@ -0,0 +1,7 @@
|
|||
{ pkgs ? import <nixpkgs> {} }: pkgs.mkShell {
|
||||
nativeBuildInputs = with pkgs; [
|
||||
haskell-language-server
|
||||
cabal-install
|
||||
ghc
|
||||
];
|
||||
}
|
Loading…
Reference in a new issue