From 4c0b08c857afb6f308e01c19e5df68b994617311 Mon Sep 17 00:00:00 2001 From: Akshay Date: Sat, 5 Dec 2020 11:18:34 +0530 Subject: tidy up --- aoc.cabal | 2 +- execs/Day05.hs | 21 +++++++-------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/aoc.cabal b/aoc.cabal index 7b25a88..a5be71d 100644 --- a/aoc.cabal +++ b/aoc.cabal @@ -42,6 +42,6 @@ executable Day04 executable Day05 main-is: Day05.hs - build-depends: base, parsec + build-depends: base default-language: Haskell2010 hs-source-dirs: execs diff --git a/execs/Day05.hs b/execs/Day05.hs index 4251cd6..c018203 100644 --- a/execs/Day05.hs +++ b/execs/Day05.hs @@ -1,23 +1,16 @@ module Main where -import Text.ParserCombinators.Parsec -import Data.List (sort) -import Control.Monad - data Direction = Upper | Lower -doHalving :: [Direction] -> (Int, Int) -> (Int, Int) -doHalving [] p = p -doHalving (Lower:rest) (l, u) = doHalving rest (l, (u+l) `div` 2) -doHalving (Upper:rest) (l, u) = doHalving rest ((u+l) `div` 2 + 1, u) - -findId :: (Int, Int) -> Int -findId (row, col) = row * 8 + col +doHalf :: [Direction] -> (Int, Int) -> Int +doHalf ls start = fst $ foldl fn start ls + where fn (l, u) Lower = (l, (u+l) `div` 2) + fn (l, u) Upper = ((u+l) `div` 2 + 1, u) doValidate :: String -> Int -doValidate s = findId (row, col) - where row = fst $ flip doHalving (0, 127) $ map readDir (take 7 s) - col = fst $ flip doHalving (0, 7) $ map readDir (drop 7 s) +doValidate s = row * 8 + col + where row = flip doHalf (0, 127) $ map readDir (take 7 s) + col = flip doHalf (0, 7) $ map readDir (drop 7 s) readDir :: Char -> Direction readDir c -- cgit v1.2.3