Day 6: Trash Compactor

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

  • Amy@piefed.blahaj.zone
    link
    fedilink
    English
    arrow-up
    5
    ·
    4 days ago

    Haskell

    There’s probably a really clever way of abstracting just the difference between the two layouts.

    import Data.Char (isSpace)  
    import Data.List (transpose)  
    import Data.List.Split (splitWhen)  
    
    op '+' = sum  
    op '*' = product  
    
    part1 =  
      sum  
        . map ((op . head . last) <*> (map read . init))  
        . (transpose . map words . lines)  
    
    part2 =  
      sum  
        . map ((op . last . last) <*> map (read . init))  
        . (splitWhen (all isSpace) . reverse . transpose . lines)  
    
    main = do  
      input <- readFile "input06"  
      print $ part1 input  
      print $ part2 input