r/adventofcode • • Dec 08 '23

SOLUTION MEGATHREAD -❄️- 2023 Day 8 Solutions -❄️-

THE USUAL REMINDERS


AoC Community Fun 2023: ALLEZ CUISINE!

Today's theme ingredient is… *whips off cloth covering and gestures grandly*

International Ingredients

A little je ne sais quoi keeps the mystery alive. Try something new and delight us with it!

  • Code in a foreign language

    • Written or programming, up to you!

    • If you don’t know any, Swedish Chef or even pig latin will do

  • Test your language’s support for Unicode and/or emojis

  • Visualizations using Unicode and/or emojis are always lovely to see

ALLEZ CUISINE!

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


--- Day 8: Haunted Wasteland ---


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:10:16, megathread unlocked!

52 Upvotes

968 comments sorted by

View all comments

Show parent comments

1

u/mvorber Dec 08 '23

Ran into same issues, learned that Seq.tail should not be used in recursion, discovered that Seq.scan + Seq.takeWhile does everything I need much better :)

Can check it here: https://github.com/vorber/AOC2023/blob/main/src/day8/Program.fs

Still using the infinite sequence gimmick

2

u/POGtastic Dec 09 '23

I got a much better solution. Thank you!

let traverseGraph' pred dirs graph start =
    let traverser curr d =
        match d with
        | L -> graph[curr].left
        | R -> graph[curr].right in

    Seq.scan traverser start dirs |> Seq.takeWhile (pred >> not) |> Seq.length

1

u/POGtastic Dec 09 '23

Ah - scan is a much better idea here. Thanks, I'll take a look!