This commit is contained in:
pingu 2024-12-09 13:06:59 +01:00
parent 88e595e5f9
commit 73eec14746

View File

@ -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)