Quick actions

cmd+k|ctrl+k

Navigation

Languages

AoC 2023, day 8

Snippet info

Language

Raku

Visibility

public

Author

seaker

Created

2023-12-08T06:15:10.783915Z

Updated

2023-12-08T06:23:40.672413Z

sub solve(@ins, %nodes, \from --> UInt:D) {
    my ($nn, $node, $cnt) = +@ins, from, 0;
    $node = %nodes{$node}{@ins[$cnt++ mod $nn]} while $node.substr(2,1) ne 'Z';

    $cnt
}

my ($instruction, $nodes) = $*IN.slurp.split("\n\n");
my @ins = $instruction.comb;
my %nodes = $nodes.lines.map({ my @a = .comb(/\w\w\w/); @a[0] => (:L(@a[1]), :R(@a[2])).Hash });

my @start-nodes = %nodes.keys.grep(/A$/);
put 'part 1: ', solve(@ins, %nodes, 'AAA')                          if 'AAA' (elem) @start-nodes;
put 'part 2: ', [lcm] @start-nodes.map({ solve(@ins, %nodes, $_) }) if +@start-nodes > 1;
INFO