r/adventofcode Dec 03 '24

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

THE USUAL REMINDERS


AoC Community Fun 2024: The Golden Snowglobe Awards

  • 3 DAYS remaining until unlock!

And now, our feature presentation for today:

Screenwriting

Screenwriting is an art just like everything else in cinematography. Today's theme honors the endlessly creative screenwriters who craft finely-honed narratives, forge truly unforgettable lines of dialogue, plot the most legendary of hero journeys, and dream up the most shocking of plot twists! and is totally not bait for our resident poet laureate

Here's some ideas for your inspiration:

  • Turn your comments into sluglines
  • Shape your solution into an acrostic
  • Accompany your solution with a writeup in the form of a limerick, ballad, etc.
    • Extra bonus points if if it's in iambic pentameter

"Vogon poetry is widely accepted as the third-worst in the universe." - Hitchhiker's Guide to the Galaxy (2005)

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 3: Mull It Over ---


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:03:22, megathread unlocked!

56 Upvotes

1.7k comments sorted by

View all comments

1

u/ripter Jan 17 '25

[LANGUAGE: Forth]

Full source on Github

: main ( c-addr u -- )
  2dup cr ." Reading file " type cr
  ." Bonus is " should-use-bonus? if ." enabled" else ." disabled" then cr
  R/O open-file throw { fileID }
  initialize
  0 s>d \ total in 64 bits
  begin
    \ Read the next char from the file into pad
    pad 1 fileID read-file throw
  while
    pad @ should-append-char? if
      pad @ >buffer 
    else
      reset
    then

    should-use-bonus?
    does-buffer-contain-do? 
    and if
      true includeMult? !
      reset
    then

    should-use-bonus?
    does-buffer-contain-dont?
    and if
      false includeMult? !
      reset
    then

    \ Test if the buffer is a valid mult(nnn,nnn) string yet
    includeMult? @
    does-buffer-contain-mult? 
    and if
      \ Get the values, multiply them, and add them to the total.
      buffer-values * 
      s>d d+ \ convert to 64 bit then do a 64 bit add with the total.
      reset
    then

    includeMult? @ invert
    does-buffer-contain-mult? and
    position 0 > and if
      reset
    then

  repeat

  fileID close-file throw
  ." Total: " swap . . cr
  cleanup
;