Reorganize imports
This commit is contained in:
@@ -1,9 +1,8 @@
|
||||
module Days.D01 where
|
||||
|
||||
import Lib (Day, Parser, definitive, parsecDay)
|
||||
import Parse (number, someLines)
|
||||
|
||||
import Common
|
||||
import Data.List (sortBy)
|
||||
import Parse
|
||||
|
||||
type Intermediate = [[Int]]
|
||||
|
||||
|
||||
@@ -3,10 +3,9 @@
|
||||
|
||||
module Days.D02 where
|
||||
|
||||
import Lib
|
||||
import Parse
|
||||
|
||||
import Common
|
||||
import Data.Functor ((<&>))
|
||||
import Parse
|
||||
import Text.Megaparsec (oneOf)
|
||||
import Text.Megaparsec.Char (space)
|
||||
|
||||
@@ -18,23 +17,23 @@ type Intermediate = [(Play, Guide)]
|
||||
|
||||
parser :: Parser Intermediate
|
||||
parser = someLines line
|
||||
where
|
||||
line :: Parser (Play, Guide)
|
||||
line = (,) <$> elf <* space <*> guide
|
||||
where
|
||||
line :: Parser (Play, Guide)
|
||||
line = (,) <$> elf <* space <*> guide
|
||||
|
||||
elf :: Parser Play
|
||||
elf =
|
||||
oneOf "ABC" <&> \case
|
||||
'A' -> Rock
|
||||
'B' -> Paper
|
||||
'C' -> Scissors
|
||||
elf :: Parser Play
|
||||
elf =
|
||||
oneOf "ABC" <&> \case
|
||||
'A' -> Rock
|
||||
'B' -> Paper
|
||||
'C' -> Scissors
|
||||
|
||||
guide :: Parser Guide
|
||||
guide =
|
||||
oneOf "XYZ" <&> \case
|
||||
'X' -> X
|
||||
'Y' -> Y
|
||||
'Z' -> Z
|
||||
guide :: Parser Guide
|
||||
guide =
|
||||
oneOf "XYZ" <&> \case
|
||||
'X' -> X
|
||||
'Y' -> Y
|
||||
'Z' -> Z
|
||||
|
||||
playScore :: Play -> Int
|
||||
playScore = (1 +) . fromEnum
|
||||
@@ -47,33 +46,33 @@ convert = toEnum . fromEnum
|
||||
|
||||
part1 :: Intermediate -> Int
|
||||
part1 = sum . map f
|
||||
where
|
||||
f (elf, guide) = let us = convert guide in playScore us + winScore (outcome elf us)
|
||||
where
|
||||
f (elf, guide) = let us = convert guide in playScore us + winScore (outcome elf us)
|
||||
|
||||
outcome :: Play -> Play -> Outcome
|
||||
outcome Rock Rock = Draw
|
||||
outcome Rock Paper = Win
|
||||
outcome Rock Scissors = Loss
|
||||
outcome Paper Rock = Loss
|
||||
outcome Paper Paper = Draw
|
||||
outcome Paper Scissors = Win
|
||||
outcome Scissors Rock = Win
|
||||
outcome Scissors Paper = Loss
|
||||
outcome Scissors Scissors = Draw
|
||||
outcome :: Play -> Play -> Outcome
|
||||
outcome Rock Rock = Draw
|
||||
outcome Rock Paper = Win
|
||||
outcome Rock Scissors = Loss
|
||||
outcome Paper Rock = Loss
|
||||
outcome Paper Paper = Draw
|
||||
outcome Paper Scissors = Win
|
||||
outcome Scissors Rock = Win
|
||||
outcome Scissors Paper = Loss
|
||||
outcome Scissors Scissors = Draw
|
||||
|
||||
part2 :: Intermediate -> Int
|
||||
part2 = sum . map f
|
||||
where
|
||||
f (elf, guide) = let us = convert guide in winScore us + playScore (counter us elf)
|
||||
where
|
||||
f (elf, guide) = let us = convert guide in winScore us + playScore (counter us elf)
|
||||
|
||||
counter :: Outcome -> Play -> Play
|
||||
counter Draw e = e
|
||||
counter Win Rock = Paper
|
||||
counter Win Paper = Scissors
|
||||
counter Win Scissors = Rock
|
||||
counter Loss Rock = Scissors
|
||||
counter Loss Paper = Rock
|
||||
counter Loss Scissors = Paper
|
||||
counter :: Outcome -> Play -> Play
|
||||
counter Draw e = e
|
||||
counter Win Rock = Paper
|
||||
counter Win Paper = Scissors
|
||||
counter Win Scissors = Rock
|
||||
counter Loss Rock = Scissors
|
||||
counter Loss Paper = Rock
|
||||
counter Loss Scissors = Paper
|
||||
|
||||
day :: Day
|
||||
day = parsecDay parser (definitive . part1, definitive . part2)
|
||||
@@ -1,11 +1,10 @@
|
||||
{-# LANGUAGE ImportQualifiedPost #-}
|
||||
|
||||
module Days.D03 where
|
||||
|
||||
import Common
|
||||
|
||||
import Data.Char (ord)
|
||||
import Data.List (intersect)
|
||||
import Data.List.Extra (chunksOf)
|
||||
import Lib (Day (StringDay), definitive)
|
||||
|
||||
type Intermediate = [String]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user