9th day
This commit is contained in:
		
							
								
								
									
										25
									
								
								app/9.hs
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								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) | ||||
|  | ||||
		Reference in New Issue
	
	Block a user