Day 7: Bridge Repair
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
I’m not very proud, I copied my code for part two.
import Control.Arrow hiding (first, second) import qualified Data.List as List import qualified Data.Char as Char parseLine l = (n, os) where n = read . takeWhile (Char.isDigit) $ l os = map read . drop 1 . words $ l parse :: String -> [(Int, [Int])] parse s = map parseLine . takeWhile (/= "") . lines $ s insertOperators target (r:rs) = any (target ==) (insertOperators' r rs) insertOperators' :: Int -> [Int] -> [Int] insertOperators' acc [] = [acc] insertOperators' acc (r:rs) = insertOperators' (acc+r) rs ++ insertOperators' (acc*r) rs insertOperators2 target (r:rs) = any (target ==) (insertOperators2' r rs) insertOperators2' :: Int -> [Int] -> [Int] insertOperators2' acc [] = [acc] insertOperators2' acc (r:rs) = insertOperators2' (acc+r) rs ++ insertOperators2' (acc*r) rs ++ insertOperators2' concatN rs where concatN = read (show acc ++ show r) part1 ls = filter (uncurry insertOperators) >>> map fst >>> sum $ ls part2 ls = filter (uncurry insertOperators2) >>> map fst >>> sum $ ls main = getContents >>= print . (part1 &&& part2) . parse
If you get the right answer, it’s ok 👍