From 8c6b7ffc7e0e27ddfa1c6ee51a69dbfbd752d8dd Mon Sep 17 00:00:00 2001 From: Matias Linares Date: Sun, 6 Dec 2020 17:17:08 -0300 Subject: Add day3 --- 2020/day3.raku | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 2020/day3.raku (limited to '2020/day3.raku') diff --git a/2020/day3.raku b/2020/day3.raku new file mode 100644 index 0000000..9189a4e --- /dev/null +++ b/2020/day3.raku @@ -0,0 +1,57 @@ +#!/usr/bin/env raku + +use v6; + +constant \EXAMPLE = q:to/END/; +..##....... +#...#...#.. +.#....#..#. +..#.#...#.# +.#...##..#. +..#.##..... +.#.#.#....# +.#........# +#.##...#... +#...##....# +.#..#...#.# +END + +sub solve($input, Int $step-right, Int $step-down --> Int) { + # Parse it + my @m = $input.split("\n").grep(*.chars > 0).map(*.comb.Array); + my $x = 0; + my $y = 0; + my $trees = 0; + my $width = @m[0].elems; + + while $y < @m.elems { + $trees++ if @m[$y][$x] eq '#'; + + $y += $step-down; + $x = ($x + $step-right) % $width; + } + $trees +} + +multi sub MAIN('part1', $file) { + say solve(slurp($file), 3, 1); +} + +multi sub MAIN('part2', $file) { + my $input = slurp $file; + my &f = &solve.assuming($input); + say ( + f(1, 1), + f(3, 1), + f(5, 1), + f(7, 1), + f(1, 2) + ).reduce: &[*] +} + +multi sub MAIN('test') { + use Test; + subtest 'Part 1', { + is solve(EXAMPLE, 3, 1), 7, 'Example'; + } +} -- cgit v1.2.3-70-g09d2