From 1d40fd0bdc64a6dbfdc2c30a0542f37d682dcb0d Mon Sep 17 00:00:00 2001 From: Felix Valentini <felixvalentini@Felixs-MBP.fritz.box> Date: Tue, 6 Dec 2022 23:24:26 +0100 Subject: [PATCH] generalized takeLeftRight --- 6/solve.hs | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/6/solve.hs b/6/solve.hs index 14656fd..faf8b6d 100644 --- a/6/solve.hs +++ b/6/solve.hs @@ -2,23 +2,13 @@ type EnumeratedChar = (Int, Char) -sample :: String -sample = "mjqjpqmgbljsphdztnvjfqwrcgsmlb" - -sample1 :: String -sample1 = "nppdvjthqldpwncqszvftbrmjlhg" - allDifferent :: (Eq a) => [a] -> Bool allDifferent [] = True allDifferent (x:xs) = x `notElem` xs && allDifferent xs -takeLeftRight :: Int -> [a] -> ([a], [a]) -takeLeftRight n = taking . splitAt n - where taking (left, right) = (take 4 $ reverse left, take 4 right) - -takeLeftRight' :: Int -> [a] -> ([a], [a]) -takeLeftRight' n = taking . splitAt n - where taking (left, right) = (take 14 $ reverse left, take 14 right) +takeLeftRight :: Int -> Int -> [a] -> ([a], [a]) +takeLeftRight splitIndex takeN = taking . splitAt splitIndex + where taking (left, right) = (take takeN $ reverse left, take takeN right) checkForMarker :: [EnumeratedChar] -> Int checkForMarker l = if (length $ getString l) < 4 @@ -38,11 +28,11 @@ getString :: [(Int, Char)] -> String getString = snd . unzip solve1 :: String -> Int -solve1 s = fst $ head $ filter (\(x, _) -> x > 0) $ map (\x -> evalTuple $ takeLeftRight x i) [1..(length s)-1] +solve1 s = fst $ head $ filter (\(x, _) -> x > 0) $ map (\x -> evalTuple $ takeLeftRight x 4 i) [1..(length s)-1] where i = zip [1..] s solve2 :: String -> Int -solve2 s = fst $ head $ filter (\(x, _) -> x > 0) $ map (\x -> evalTuple $ takeLeftRight' x i) [1..(length s)-1] +solve2 s = fst $ head $ filter (\(x, _) -> x > 0) $ map (\x -> evalTuple $ takeLeftRight x 14 i) [1..(length s)-1] where i = zip [1..] s main :: IO () -- GitLab