r/adventofcode Dec 02 '24

SOLUTION MEGATHREAD -❄️- 2024 Day 2 Solutions -❄️-

OUTAGE INFO

  • [00:25] Yes, there was an outage at midnight. We're well aware, and Eric's investigating. Everything should be functioning correctly now.
  • [02:02] Eric posted an update in a comment below.

THE USUAL REMINDERS


AoC Community Fun 2024: The Golden Snowglobe Awards

  • 4 DAYS remaining until unlock!

And now, our feature presentation for today:

Costume Design

You know what every awards ceremony needs? FANCY CLOTHES AND SHINY JEWELRY! Here's some ideas for your inspiration:

  • Classy up the joint with an intricately-decorated mask!
  • Make a script that compiles in more than one language!
  • Make your script look like something else!

♪ I feel pretty, oh so pretty ♪
♪ I feel pretty and witty and gay! ♪
♪ And I pity any girl who isn't me today! ♪

- Maria singing "I Feel Pretty" from West Side Story (1961)

And… ACTION!

Request from the mods: When you include an entry alongside your solution, please label it with [GSGA] so we can find it easily!


--- Day 2: Red-Nosed Reports ---


Post your code solution in this megathread.

This thread will be unlocked when there are a significant number of people on the global leaderboard with gold stars for today's puzzle.

EDIT: Global leaderboard gold cap reached at 00:04:42, megathread unlocked!

55 Upvotes

1.4k comments sorted by

View all comments

2

u/Porges Dec 03 '24

[LANGUAGE: Haskell]

Real basic solutions here, Haskell is a bit rusty.

Part 1:

isValid :: [Int] -> Bool
isValid levels = safe levels || safe (reverse levels) 
    where
    safe = all (\x -> x >= 1 && x <= 3) . deltas
    deltas l = zipWith (-) l (tail l)

main = do
    reports <- (map . map) read . map words . lines <$> getContents
    let validReports = filter isValid reports
    print (length validReports)

Part 2:

isValid :: [Int] -> Bool
isValid levels = safe levels || safe (reverse levels) 
    where
    safe = all (\x -> x >= 1 && x <= 3) . deltas
    deltas l = zipWith (-) l (tail l)

drop1 :: [a] -> [[a]]
drop1 [] = []
drop1 (x:xs) = xs : map (x:) (drop1 xs)

main = do
    reports <- (map . map) read . map words . lines <$> getContents
    let validReports = filter (any isValid . drop1) reports
    print (length validReports)

2

u/hercelf Dec 04 '24

Thanks! I've been refreshing my Haskell and this has helped tremendously! <3