From 73eec14746ea00db1f08f57da27742d0e970a841 Mon Sep 17 00:00:00 2001 From: pingu Date: Mon, 9 Dec 2024 13:06:59 +0100 Subject: [PATCH] 9th day --- app/9.hs | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/app/9.hs b/app/9.hs index 84ddde8..d68cab9 100644 --- a/app/9.hs +++ b/app/9.hs @@ -2,10 +2,7 @@ module Main where import Data.Functor -import Data.List -import Data.List.Split import Data.List.Extra hiding (split) -import Debug.Trace data ℜ where None :: ℜ @@ -34,18 +31,18 @@ fit :: [[ℜ]] -> [ℜ] -> [ℜ] fit s t = let (p,a) = break (elem None) s (n,a') = span (elem None) a in if null n then concat s ++ t else - concat p ++ if length (head n) >= length t then t ++ replicate (length n) None ++ concat a' else concat n ++ fit a' t + concat p ++ if length (head n) >= length t then t ++ replicate (length (head n) - length t) None ++ concat a' ++ replicate (length t) None else concat n ++ fit a' t sort2 :: [ℜ] -> [ℜ] -sort2 s = let c = chunks s in - if notElem None $ last c - then let fitted = fit (init c) (last c) in - if s == fitted then head c ++ case c of - [] -> [] - [c] -> c - c@[_,_] -> concat c - c -> sort2 (concat . tail $ init c) ++ last c else sort2 fitted - else sort2 (concat $ init c) ++ last c +sort2 s = let c = chunks s + fitted = fit (init c) (last c) + c' = chunks fitted + in + case length c' of + 0 -> concat c' + 1 -> concat c' + 2 -> concat c' + _ -> (sort2 . concat $ init c') ++ last c' solve :: ([ℜ] -> [ℜ]) -> [ℜ] -> Int solve f s = let fixed = (\case @@ -54,6 +51,6 @@ solve f s = let fixed = (\case sum $ zipWith (*) fixed [0..] main :: IO () -main = readFile "inputs/9.example" <&> parse >>= \i -> +main = readFile "inputs/9" <&> parse >>= \i -> print (solve sort1 i) >> print (solve sort2 i)