Quick actions

cmd+k|ctrl+k

Navigation

Languages

AoC 2022, day 9 (complex number)

Snippet info

Language

Raku

Visibility

public

Author

seaker

Created

2022-12-09T09:42:26.34669Z

Updated

2022-12-09T17:42:52.894353Z

my %delta = <U D L R> Z=> i, -i, -1.Complex, 1.Complex;

sub simulate(@movements, UInt:D \knot-num --> UInt:D) {
    my @knots = 0.Complex xx knot-num;
    my %trail is SetHash;

    for @movements -> \drt, \dst {
        for ^dst.Int {
            @knots[0] += %delta{drt};

            for 1 ..^ knot-num -> \k {
                my (\dx, \dy) = (@knots[k-1] - @knots[k]).reals;
                @knots[k] += dx.sign + (dy.sign)i if dx² + dy² > 2;
            }

            %trail.set(@knots.tail);
        }
    }

    +%trail
}

with $*IN.words -> @movements {
    put 'part 1: ', simulate(@movements, 2);
    put 'part 2: ', simulate(@movements, 10);
}
INFO