AoC 2022, day 9

Run Settings
LanguageRaku
Language Version
Run Command
sub is-touching(@H, @T --> Bool:D) { so (@H[0] - @T[0]) & (@H[1] - @T[1]) == -1|0|1 } sub simulate(@movements, UInt:D \knot-num--> UInt:D) { my @knots = [0, 0] xx knot-num; my %trail is SetHash; for @movements -> \drt, \dst { for 1 .. dst.Int { given drt { when 'U' { ++@knots[0;1] } when 'D' { --@knots[0;1] } when 'L' { --@knots[0;0] } when 'R' { ++@knots[0;0] } } for 1 ..^ knot-num -> \k { unless is-touching(@knots[k-1], @knots[k]) { @knots[k;0] += (@knots[k-1;0] - @knots[k;0]).sign; @knots[k;1] += (@knots[k-1;1] - @knots[k;1]).sign; } } %trail.set("{ @knots[knot-num - 1; 0] }:{ @knots[knot-num - 1;1] }"); } } +%trail } with $*IN.words -> @movements { put 'part 1: ', simulate(@movements, 2); put 'part 2: ', simulate(@movements, 10); }
Editor Settings
Theme
Key bindings
Full width
Lines