Day 07 - part 1.
This commit is contained in:
parent
4858769427
commit
dc664e3b16
|
@ -30,4 +30,4 @@ import qualified Day24
|
||||||
import qualified Day25
|
import qualified Day25
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = Day06.main
|
main = Day07.main
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
Step G must be finished before step M can begin.
|
||||||
|
Step T must be finished before step E can begin.
|
||||||
|
Step P must be finished before step M can begin.
|
||||||
|
Step V must be finished before step L can begin.
|
||||||
|
Step Y must be finished before step B can begin.
|
||||||
|
Step K must be finished before step Z can begin.
|
||||||
|
Step H must be finished before step I can begin.
|
||||||
|
Step D must be finished before step U can begin.
|
||||||
|
Step C must be finished before step L can begin.
|
||||||
|
Step R must be finished before step Z can begin.
|
||||||
|
Step U must be finished before step B can begin.
|
||||||
|
Step J must be finished before step M can begin.
|
||||||
|
Step M must be finished before step E can begin.
|
||||||
|
Step I must be finished before step X can begin.
|
||||||
|
Step N must be finished before step O can begin.
|
||||||
|
Step S must be finished before step F can begin.
|
||||||
|
Step X must be finished before step A can begin.
|
||||||
|
Step F must be finished before step Q can begin.
|
||||||
|
Step B must be finished before step Z can begin.
|
||||||
|
Step Q must be finished before step W can begin.
|
||||||
|
Step L must be finished before step W can begin.
|
||||||
|
Step O must be finished before step Z can begin.
|
||||||
|
Step A must be finished before step Z can begin.
|
||||||
|
Step E must be finished before step W can begin.
|
||||||
|
Step W must be finished before step Z can begin.
|
||||||
|
Step G must be finished before step R can begin.
|
||||||
|
Step H must be finished before step A can begin.
|
||||||
|
Step A must be finished before step W can begin.
|
||||||
|
Step Y must be finished before step D can begin.
|
||||||
|
Step O must be finished before step A can begin.
|
||||||
|
Step V must be finished before step U can begin.
|
||||||
|
Step H must be finished before step W can begin.
|
||||||
|
Step K must be finished before step F can begin.
|
||||||
|
Step J must be finished before step X can begin.
|
||||||
|
Step V must be finished before step R can begin.
|
||||||
|
Step Q must be finished before step A can begin.
|
||||||
|
Step F must be finished before step B can begin.
|
||||||
|
Step G must be finished before step P can begin.
|
||||||
|
Step L must be finished before step A can begin.
|
||||||
|
Step B must be finished before step Q can begin.
|
||||||
|
Step H must be finished before step J can begin.
|
||||||
|
Step J must be finished before step L can begin.
|
||||||
|
Step F must be finished before step E can begin.
|
||||||
|
Step U must be finished before step A can begin.
|
||||||
|
Step G must be finished before step Q can begin.
|
||||||
|
Step G must be finished before step S can begin.
|
||||||
|
Step K must be finished before step J can begin.
|
||||||
|
Step N must be finished before step B can begin.
|
||||||
|
Step F must be finished before step O can begin.
|
||||||
|
Step C must be finished before step Z can begin.
|
||||||
|
Step B must be finished before step E can begin.
|
||||||
|
Step M must be finished before step S can begin.
|
||||||
|
Step A must be finished before step E can begin.
|
||||||
|
Step E must be finished before step Z can begin.
|
||||||
|
Step K must be finished before step I can begin.
|
||||||
|
Step P must be finished before step A can begin.
|
||||||
|
Step Y must be finished before step L can begin.
|
||||||
|
Step Y must be finished before step J can begin.
|
||||||
|
Step G must be finished before step N can begin.
|
||||||
|
Step Q must be finished before step L can begin.
|
||||||
|
Step D must be finished before step X can begin.
|
||||||
|
Step C must be finished before step I can begin.
|
||||||
|
Step K must be finished before step B can begin.
|
||||||
|
Step N must be finished before step F can begin.
|
||||||
|
Step D must be finished before step M can begin.
|
||||||
|
Step B must be finished before step A can begin.
|
||||||
|
Step U must be finished before step J can begin.
|
||||||
|
Step Q must be finished before step Z can begin.
|
||||||
|
Step X must be finished before step F can begin.
|
||||||
|
Step K must be finished before step X can begin.
|
||||||
|
Step U must be finished before step E can begin.
|
||||||
|
Step X must be finished before step W can begin.
|
||||||
|
Step K must be finished before step Q can begin.
|
||||||
|
Step I must be finished before step E can begin.
|
||||||
|
Step D must be finished before step J can begin.
|
||||||
|
Step P must be finished before step I can begin.
|
||||||
|
Step K must be finished before step D can begin.
|
||||||
|
Step S must be finished before step X can begin.
|
||||||
|
Step C must be finished before step R can begin.
|
||||||
|
Step P must be finished before step W can begin.
|
||||||
|
Step I must be finished before step O can begin.
|
||||||
|
Step S must be finished before step O can begin.
|
||||||
|
Step K must be finished before step C can begin.
|
||||||
|
Step N must be finished before step Q can begin.
|
||||||
|
Step L must be finished before step E can begin.
|
||||||
|
Step L must be finished before step Z can begin.
|
||||||
|
Step K must be finished before step W can begin.
|
||||||
|
Step Y must be finished before step A can begin.
|
||||||
|
Step L must be finished before step O can begin.
|
||||||
|
Step N must be finished before step W can begin.
|
||||||
|
Step R must be finished before step W can begin.
|
||||||
|
Step C must be finished before step O can begin.
|
||||||
|
Step H must be finished before step X can begin.
|
||||||
|
Step V must be finished before step Y can begin.
|
||||||
|
Step S must be finished before step W can begin.
|
||||||
|
Step V must be finished before step E can begin.
|
||||||
|
Step Q must be finished before step E can begin.
|
||||||
|
Step P must be finished before step H can begin.
|
||||||
|
Step V must be finished before step H can begin.
|
||||||
|
Step N must be finished before step Z can begin.
|
||||||
|
Step C must be finished before step A can begin.
|
|
@ -23,6 +23,7 @@ dependencies:
|
||||||
- base >= 4.7 && < 5
|
- base >= 4.7 && < 5
|
||||||
- containers
|
- containers
|
||||||
- text
|
- text
|
||||||
|
- extra
|
||||||
|
|
||||||
library:
|
library:
|
||||||
source-dirs: src
|
source-dirs: src
|
||||||
|
|
26
src/Day07.hs
26
src/Day07.hs
|
@ -1,6 +1,28 @@
|
||||||
module Day07 (main) where
|
module Day07 (main) where
|
||||||
|
|
||||||
|
import Data.Map (Map, fromListWith, fromList, findMin)
|
||||||
|
import qualified Data.Map as M (union, null, filter, delete)
|
||||||
|
import Data.Set (Set, singleton, empty)
|
||||||
|
import qualified Data.Set as S (union, null, delete)
|
||||||
|
import Data.Tuple.Extra (second)
|
||||||
|
|
||||||
|
parse :: String -> (Char, Char)
|
||||||
|
parse str = (str !! 36, str !! 5)
|
||||||
|
|
||||||
|
dependencies :: [(Char, Char)] -> Map Char (Set Char)
|
||||||
|
dependencies ds =
|
||||||
|
let dependents = fromListWith S.union . map (second singleton) $ ds
|
||||||
|
independents = fromList . (flip zip) (repeat empty) . snd . unzip $ ds
|
||||||
|
in M.union dependents independents
|
||||||
|
|
||||||
|
part1 :: Map Char (Set Char) -> String -> String
|
||||||
|
part1 deps str
|
||||||
|
| M.null deps = reverse str
|
||||||
|
| otherwise =
|
||||||
|
let available = fst . findMin . M.filter S.null $ deps
|
||||||
|
in part1 (fmap (S.delete available) (M.delete available deps)) (available:str)
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
input <- readFile "input/07.txt"
|
input <- map parse . lines <$> readFile "input/07.txt"
|
||||||
print input
|
putStrLn $ part1 (dependencies input) ""
|
Loading…
Reference in New Issue