Day 25: Code Chronicle
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://topaz.github.io/paste/ if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/6637268
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
Haskell
Have a nice christmas if you’re still celebrating today, otherwise hope you had a nice evening yesterday.
import Control.Arrow import Control.Monad (join) import Data.Bifunctor (bimap) import qualified Data.List as List heights = List.transpose >>> List.map (pred . List.length . List.takeWhile (== '#')) parse = lines >>> init >>> List.groupBy (curry (snd >>> (/= ""))) >>> List.map (List.filter (/= "")) >>> List.partition ((== "#####") . head) >>> second (List.map List.reverse) >>> join bimap (List.map heights) cartesianProduct xs ys = [(x, y) | x <- xs, y <- ys] part1 = uncurry cartesianProduct >>> List.map (uncurry (List.zipWith (+))) >>> List.filter (List.all (<6)) >>> List.length part2 = const 0 main = getContents >>= print . (part1 &&& part2) . parse