mirror of
https://github.com/HenkKalkwater/aoc-2020
synced 2024-11-22 11:05:18 +00:00
Day 3, part 2
This commit is contained in:
parent
52629702c8
commit
2072fc3ed8
323
in/3.txt
Normal file
323
in/3.txt
Normal file
|
@ -0,0 +1,323 @@
|
||||||
|
..#..#......#..#.......#...#.#.
|
||||||
|
...##.....##..#..#....#.##.##.#
|
||||||
|
...#...#.##...##.....#.....#.#.
|
||||||
|
..#....#.....#...##.##.###.#...
|
||||||
|
.#.....#......#..#.##.#...###..
|
||||||
|
#..#..#.#......#...........###.
|
||||||
|
#......####.#....##........##..
|
||||||
|
.#.......#.....#......#...#....
|
||||||
|
...#...#.....#.......##.....##.
|
||||||
|
#...##.........#.#..##..#..#.##
|
||||||
|
#.#.##.........#.#..#.#.....###
|
||||||
|
.##..##...#....##.....#..#.....
|
||||||
|
........#.......###.#.#.....#.#
|
||||||
|
...#.#....#.##..#...##..##..#..
|
||||||
|
......#....#........######.#...
|
||||||
|
.##...#.#...###......#.#.#..#.#
|
||||||
|
........#.##...##.#...#..#...##
|
||||||
|
.#..#.#..##....###..#.#.......#
|
||||||
|
..#..##..#.#...#.##......#.....
|
||||||
|
##.....#..##.#.#..#......##...#
|
||||||
|
......................#..#..#..
|
||||||
|
..#.##....####.........###.##..
|
||||||
|
##..###..#...#....#..#.#...#...
|
||||||
|
.##.#......#..#....#........#..
|
||||||
|
.#.....#..#..#.#.#....#.....##.
|
||||||
|
..........#..#....#..##...#..##
|
||||||
|
.#...#.#....#.##..#.....#....#.
|
||||||
|
#..............#.#.#..#..#....#
|
||||||
|
...#.#...............##........
|
||||||
|
#.#.##...#.##..##.....#........
|
||||||
|
...#.......###..###..#...#..#..
|
||||||
|
####..#.#..##.....##.#.#......#
|
||||||
|
.#.#.......#..##.......#.......
|
||||||
|
#....#...#.##.#.......#..#.....
|
||||||
|
.#...##..#..#..##.......##...#.
|
||||||
|
.#..#......#.........#.........
|
||||||
|
#.##.#.....#....#..##..#.....#.
|
||||||
|
#.#....#.#....#...#.#..#....#..
|
||||||
|
#..#.....#.##..#.....#...##...#
|
||||||
|
#....#...##.#.........#.#....##
|
||||||
|
.......##.##......##.......##..
|
||||||
|
#.....#..#........#........#...
|
||||||
|
#....#.#..#.#........##.#...#..
|
||||||
|
#.......#.#.#.#....#.......##.#
|
||||||
|
...#..###..........#...#.#.###.
|
||||||
|
....#..#....#...#....##.#.....#
|
||||||
|
.#..##.....#..#....##..##...#.#
|
||||||
|
#.........#....#.#..###...##...
|
||||||
|
.#.#.........#.#.......#.#.#..#
|
||||||
|
..........#........##..#.......
|
||||||
|
.....#.......#...#.....#..##.##
|
||||||
|
...#.........#.............####
|
||||||
|
##..#...#..#.#......#...#......
|
||||||
|
.#..###...#.#.#.#...#...#......
|
||||||
|
....#..##.#....#..#.#..##..##.#
|
||||||
|
..#.......#......#..#.......#..
|
||||||
|
....###......#...##...#....#...
|
||||||
|
..#..#.....#...#..###....#.#..#
|
||||||
|
.........##..#.##....#..##..#..
|
||||||
|
##...#...#.#.........##......#.
|
||||||
|
###..#.#....#......##..##.#...#
|
||||||
|
.##...##..#.#.#.#......#..#....
|
||||||
|
###......#..#..#.....#..#....#.
|
||||||
|
.#.#..##....##........##..#.#..
|
||||||
|
###...####.#....#.......###....
|
||||||
|
..#....###..#.#.#..#.......##..
|
||||||
|
.......#.#...#.....#.#....##.#.
|
||||||
|
......#......#.#....#..##..###.
|
||||||
|
....####..........#.....#......
|
||||||
|
.###.....#...#..#...##.#...###.
|
||||||
|
...##....##....###....#.#..#.#.
|
||||||
|
##.#..........##.........#.##..
|
||||||
|
..#..#.#.###..##..#....##.....#
|
||||||
|
..#....##.....#...##....###..##
|
||||||
|
....#.......##..#..#..........#
|
||||||
|
............#..#.###..#.#......
|
||||||
|
...........##......#.#.#...#..#
|
||||||
|
...##.##....#...##.##.....#.#..
|
||||||
|
.####...#....###...#.....#....#
|
||||||
|
.##........#..##..#.#.....#....
|
||||||
|
..................#.....#..##..
|
||||||
|
..###.....#.##..#..#....##...#.
|
||||||
|
...#.##.#.####.#.###.#....#..##
|
||||||
|
.#....##..##......####.#####...
|
||||||
|
#...#.#....##.........##....#..
|
||||||
|
..#.##.....##.............#.##.
|
||||||
|
###.....#.#..#..#......#.##.#..
|
||||||
|
...#..##.....#...##...#......#.
|
||||||
|
.##.#...#......##.#..##....#...
|
||||||
|
.....##.....#......#.#.........
|
||||||
|
#.....#.....#........##........
|
||||||
|
.#......##...#..#.#....###.#..#
|
||||||
|
#.####...#....#.........#..#...
|
||||||
|
#..##.#.....#.##.##.#....#...#.
|
||||||
|
#########..#....#..#...#......#
|
||||||
|
..##..##...###.######...##.##..
|
||||||
|
##.......#.......#.#....###..#.
|
||||||
|
.....#...#.######..#.....#.....
|
||||||
|
.#......#..#.............#.##.#
|
||||||
|
..###.#.#......##...###........
|
||||||
|
.......####.#..##....#........#
|
||||||
|
..#......#.##....##.##....#....
|
||||||
|
....#......#.#....#..#.#.....##
|
||||||
|
####.....#....#.#......#.#.#.##
|
||||||
|
#...##....#.#.##.........#....#
|
||||||
|
....#..###......#......#...#...
|
||||||
|
.....##.#..#..#...#..#.#.#.....
|
||||||
|
.##............#.....#.........
|
||||||
|
##...#..#.....##.#..#..........
|
||||||
|
#.....#####.......#..#....#.#..
|
||||||
|
.........#..#.....###........#.
|
||||||
|
#....#..#...###........#..#.#..
|
||||||
|
...##...#..#...#.##..#.........
|
||||||
|
.........#.#.....#.......#...#.
|
||||||
|
.#.....#..####....#.##.......##
|
||||||
|
...............##....##.##..##.
|
||||||
|
............#....#....#...##.#.
|
||||||
|
..#...#........#.......#..#....
|
||||||
|
##....####....#.##...#..##..#.#
|
||||||
|
.#.#.....#......#.#........#.#.
|
||||||
|
....#......#.#....##..##.......
|
||||||
|
.#..#.#..#..##.....#...........
|
||||||
|
..#........#.##..#......##..#..
|
||||||
|
...##.#...#...#..#........#....
|
||||||
|
##..##....#......#...#..#.#.#.#
|
||||||
|
......#.....#..#..#....#.......
|
||||||
|
.....##......#..#.#.##...#.....
|
||||||
|
...#.....#.#..........#..##...#
|
||||||
|
.####.##....#...........#.....#
|
||||||
|
.....###..##...#....##..#...#..
|
||||||
|
..##...#.#...#..........#..#.#.
|
||||||
|
...#..#..............#.##.#....
|
||||||
|
##.#....#...#..#....#..........
|
||||||
|
.##..........#..#........#.....
|
||||||
|
#...#.#......#...#.....##..#...
|
||||||
|
.##...#.#.#....###.####..#....#
|
||||||
|
.#......#.#...#.#....#.#...#...
|
||||||
|
#....##.###.............#.#....
|
||||||
|
....#.###..##..##.##...##......
|
||||||
|
##....#..###.##.##.....#......#
|
||||||
|
..#..#..#......#..#..#.........
|
||||||
|
#.##......#.#....#..#..#.......
|
||||||
|
....#.#...#..###......##.......
|
||||||
|
.###.......##.......#....###...
|
||||||
|
..#..#.##..#.#....#..#.#.....#.
|
||||||
|
.#..##.##..............#....#..
|
||||||
|
#...#.#...#..#.##..##.#.#......
|
||||||
|
#...#..#..##..##.###......#....
|
||||||
|
.#..#.....#...#....#.....#...#.
|
||||||
|
.....#....#..#.....###...#.####
|
||||||
|
.#.....#......#...##...#..#....
|
||||||
|
.#......#............#.#.......
|
||||||
|
....##....#.#..#..#...#..#.#...
|
||||||
|
#...#.....###...##...#.##.....#
|
||||||
|
.......#.....#....#.......#...#
|
||||||
|
#.......###.......#.#..........
|
||||||
|
...#.#.###.#........#.###...#..
|
||||||
|
....#............#....#..#.....
|
||||||
|
#......#.##.#...##.......#..#.#
|
||||||
|
.....#....#....#.#.#...###..#..
|
||||||
|
.....#.#...#...#.#..#....#.#..#
|
||||||
|
.#.......#.#..#...###.......##.
|
||||||
|
.......#..#.##.........#.......
|
||||||
|
.##.#........#.##...##....#....
|
||||||
|
.#....#..#...#......####...#..#
|
||||||
|
...#.....#..##.#..#.#....#....#
|
||||||
|
...##....#........#.#........#.
|
||||||
|
.....#....##..#.##..........#..
|
||||||
|
#.....#.#.#......##....##.#..#.
|
||||||
|
.#.#.##..#.#....##.#....##.....
|
||||||
|
.....#.....#..#.#....#..#....##
|
||||||
|
...#........#....#......###.#..
|
||||||
|
.....##...#.....##.##.#.#.##...
|
||||||
|
...#.....#####....##.#.#.###.#.
|
||||||
|
.#..#.#..##...###.........#.#.#
|
||||||
|
#...#...#.#..#...#...........#.
|
||||||
|
.##..............#...#..#....#.
|
||||||
|
....###.........#.#.#....#.....
|
||||||
|
..#...##.#.#....##.#..#...#..#.
|
||||||
|
..#.....#.#......#....#......#.
|
||||||
|
.......##....#.#.##....#...#..#
|
||||||
|
##.#.#...#..#......#..#..#....#
|
||||||
|
...#.#......#............###.##
|
||||||
|
..###..#..##..#...##........#..
|
||||||
|
.#...#...##...#....#....##.#..#
|
||||||
|
..##...####....#....#..#....#.#
|
||||||
|
...#......##....#.........##.#.
|
||||||
|
##.#.......#..#..#.............
|
||||||
|
..#.#.#.#......#...#.#..##.....
|
||||||
|
.#..##.....###...##.#..#......#
|
||||||
|
##...#..........#.####....##...
|
||||||
|
#..........#...#..##....#......
|
||||||
|
....##...#....#..####...#.##.##
|
||||||
|
.#.######...##...#..##.........
|
||||||
|
....##.........#.......##.##...
|
||||||
|
.#.....#.#..........##......#..
|
||||||
|
...#..#.#.###..#........#.....#
|
||||||
|
..##..#............##.......#..
|
||||||
|
......##....##..#.##..#.......#
|
||||||
|
.......##....#.......#..#...#.#
|
||||||
|
#.#......#.###.....#.##........
|
||||||
|
.#..##..........#..#.....#.##..
|
||||||
|
..#.#...#....#.........#..##..#
|
||||||
|
.#......#.......#...#..#..###..
|
||||||
|
......#.##.....#.#......#....#.
|
||||||
|
....#....#...#.......#...##.##.
|
||||||
|
#....#...##...#..##........###.
|
||||||
|
##......#.#..#.......#.......#.
|
||||||
|
...##.##..#......#.###..#.#.##.
|
||||||
|
.............#..#.............#
|
||||||
|
..#.......##..#..#....##...#...
|
||||||
|
...............##..##........#.
|
||||||
|
##...#.##.......#....#.......##
|
||||||
|
....##.##.#.#.....##.....##.##.
|
||||||
|
#.#......#.......#..#.#..#.....
|
||||||
|
....##....#.##........##.##.#..
|
||||||
|
......##....#..##..#..##....##.
|
||||||
|
.............#.....#.......#...
|
||||||
|
.......###.......#..........#..
|
||||||
|
......##.#..#.....#.#...#.#...#
|
||||||
|
.#...#..#..###.###...#....##...
|
||||||
|
#......#..#.#...#...#.....#..##
|
||||||
|
.###.....#..#.#......##..#.##..
|
||||||
|
.##.#.....#..#.#..#....##......
|
||||||
|
#......#..............#.....#.#
|
||||||
|
...#..#....#.....#.....##.#...#
|
||||||
|
......#..##..##.....#...#......
|
||||||
|
.....####..#..#.##.......#..#.#
|
||||||
|
###.#.#........#.......#.....##
|
||||||
|
..#.#.#.#...#...#........#....#
|
||||||
|
....##.#.#..#...##.....#......#
|
||||||
|
#..#.##....#..#.##..####.......
|
||||||
|
...####.#...#......#......##..#
|
||||||
|
#....#.#..###......#..#..##..#.
|
||||||
|
...........#....#...#......#...
|
||||||
|
......###.#.....#.#....#.#...#.
|
||||||
|
.......#.##..............#..##.
|
||||||
|
..##...........#..#.#...#.....#
|
||||||
|
#..#............##.........#.#.
|
||||||
|
.......###.#...#.#...#.#.#...#.
|
||||||
|
..#...##.......#..#......#.#.##
|
||||||
|
#.#...#.....#...##.#.#.......##
|
||||||
|
.#.#.##...#..##.#......#.......
|
||||||
|
#.......#.......#.#....#.....#.
|
||||||
|
.....#..#..#.......#..#........
|
||||||
|
##...##...##......#..##.###....
|
||||||
|
..#...#.###.#.###..#.....###...
|
||||||
|
.....####.......#.#.....##....#
|
||||||
|
....#....#.#....#...#..#.#..#..
|
||||||
|
..##.....#....#.#.#.###...#....
|
||||||
|
......#.#....#.#..#....#.#..#..
|
||||||
|
#...#...#....#.......#......#.#
|
||||||
|
#..#.#......#..#...........#.##
|
||||||
|
...............#....#.....#...#
|
||||||
|
.#.#.#...#.##...#.#.#..#....#..
|
||||||
|
...#.#.####..##.#...##.........
|
||||||
|
##.........##.##.....##....#...
|
||||||
|
................#...#.##.#.#..#
|
||||||
|
.#..#....#...#..#..#..###.#..#.
|
||||||
|
...#..#.##.#.####..........#..#
|
||||||
|
........#....##......#..#.#....
|
||||||
|
........##.........#..#..#..#.#
|
||||||
|
#......#.#...#...#...##.....#..
|
||||||
|
#...#.....#..#..##.#...#.#.#...
|
||||||
|
....#..##...##.....#...#.#.....
|
||||||
|
..#..##....#....#...#....#.....
|
||||||
|
.#..#...##.......###...#...#...
|
||||||
|
.#......#......#..##..#..##....
|
||||||
|
....##....#..#.#....#.#..##....
|
||||||
|
###......#...........#.....###.
|
||||||
|
.....#...#..##.#..#..#.....#..#
|
||||||
|
#.#....#...........#.##..#..###
|
||||||
|
#....#...###.#...#..##..#.....#
|
||||||
|
.#....#......##.#..#....#.#....
|
||||||
|
....#.#....#..#.#....#..#..#...
|
||||||
|
..#......#..#.#.#....#.........
|
||||||
|
.#...#.#.....#........#.#...###
|
||||||
|
....#..##.......#.###....##....
|
||||||
|
#.#.......#......#.###........#
|
||||||
|
#.........#.....####.##..#..#..
|
||||||
|
.#.#..##...#.#.....##.#.#..#...
|
||||||
|
.#..#..#..#.##..#...###.#...#..
|
||||||
|
.....##..##..##..#.#.#.....###.
|
||||||
|
.#..#...#..#......##.#.........
|
||||||
|
....#..##....#.##.........#...#
|
||||||
|
........#...#...###.........##.
|
||||||
|
#.........#..##....#.#...#.....
|
||||||
|
.......#.......#..#.......#....
|
||||||
|
#......##......#.#.##..........
|
||||||
|
.#..##..####...#.....####.....#
|
||||||
|
........#.#....#..##..###.#...#
|
||||||
|
.#...#...#.........###..#...#.#
|
||||||
|
#.........#....##...#..........
|
||||||
|
.#.#....#..........#...........
|
||||||
|
.#.#..........#.##.....#.##....
|
||||||
|
..#....#...##..###..........##.
|
||||||
|
.#.#..#.##..#..#.##.##..##.....
|
||||||
|
........#...#....#...#.#..##...
|
||||||
|
......#......##..#..#.....#..#.
|
||||||
|
.##.#....#...#....#...#..##..##
|
||||||
|
##............#..........###...
|
||||||
|
....#.......#.#..#.#####.....#.
|
||||||
|
#......#.....#...#........#....
|
||||||
|
..##.....###..#.#.#.#....#....#
|
||||||
|
#...#...#.#..#..#....#..#......
|
||||||
|
......#....#...#..#....#####...
|
||||||
|
....#.......##....#....##......
|
||||||
|
.....##...#.##.#.....##....#...
|
||||||
|
.#....###.#..##...##.##.......#
|
||||||
|
....#.#.#.##.............#..##.
|
||||||
|
...........##......#...#.#.##..
|
||||||
|
....##......#....#....##..##.#.
|
||||||
|
.#.#...#.....##.....#.........#
|
||||||
|
#.#..........#.......#.##...#..
|
||||||
|
....#.##..#.#....#.....#...#...
|
||||||
|
##.............##.......#.##.#.
|
||||||
|
....#...#.....##...#..........#
|
||||||
|
##..#...#...#.#.##...#.......##
|
||||||
|
..#........#.....###...##..##.#
|
||||||
|
.....#...##.#.#.##.....#...#...
|
||||||
|
####.###...##..##...#..#..#..##
|
||||||
|
......#..#..#.........#...#.#..
|
||||||
|
....###.....##.##....#.##.....#
|
|
@ -1,31 +1,73 @@
|
||||||
import std.algorithm;
|
import std.algorithm;
|
||||||
|
import std.array;
|
||||||
import std.format;
|
import std.format;
|
||||||
import std.range;
|
import std.range;
|
||||||
import std.stdio;
|
import std.stdio;
|
||||||
|
import std.traits;
|
||||||
import std.uni;
|
import std.uni;
|
||||||
|
|
||||||
|
import dayutil;
|
||||||
|
|
||||||
void run(string[] args) {
|
void run(string[] args) {
|
||||||
ulong count = stdin.byLine.countTrees;
|
auto input = stdin.byLineCopy.array;
|
||||||
|
ulong count = parts!ulong(args,
|
||||||
|
() => input.countTrees1,
|
||||||
|
() => [[1,1], [3,1], [5,1], [7,1], [1,2]]
|
||||||
|
.map!(x => input.save.enumerate.countTrees2(x[0], x[1]))
|
||||||
|
.fold!((x, y) => x * y));
|
||||||
|
|
||||||
writeln(count);
|
writeln(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
ulong countTrees(Range)(Range lines) if (isInputRange!Range) {
|
ulong countTrees1(Range)(Range lines) if (isInputRange!Range && isSomeString!(ElementType!Range)) {
|
||||||
return lines.enumerate.filter!(x => (x.value[x.index * 3 % x.value.length] == '#')).count;
|
return lines.enumerate.filter!(x => (x.value[x.index * 3 % x.value.length] == '#')).count;
|
||||||
}
|
}
|
||||||
|
|
||||||
unittest {
|
unittest {
|
||||||
string[] field = [
|
string[] field = [
|
||||||
"..##.........##.........##.........##.........##.........##.......",
|
"..##.......",
|
||||||
"#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..",
|
"#...#...#..",
|
||||||
".#....#..#..#....#..#..#....#..#..#....#..#..#....#..#..#....#..#.",
|
".#....#..#.",
|
||||||
"..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#",
|
"..#.#...#.#",
|
||||||
".#...##..#..#...##..#..#...##..#..#...##..#..#...##..#..#...##..#.",
|
".#...##..#.",
|
||||||
"..#.##.......#.##.......#.##.......#.##.......#.##.......#.##.....",
|
"..#.##.....",
|
||||||
".#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#",
|
".#.#.#....#",
|
||||||
".#........#.#........#.#........#.#........#.#........#.#........#",
|
".#........#",
|
||||||
"#.##...#...#.##...#...#.##...#...#.##...#...#.##...#...#.##...#...",
|
"#.##...#...",
|
||||||
"#...##....##...##....##...##....##...##....##...##....##...##....#",
|
"#...##....#",
|
||||||
".#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#"
|
".#..#...#.#"
|
||||||
];
|
];
|
||||||
assert(field.countTrees == 7);
|
assert(field.countTrees1 == 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Screw proper template type checking, ain't got time for that.
|
||||||
|
ulong countTrees2(Range)(Range lines, int advanceX, int advanceY) if (isInputRange!Range)
|
||||||
|
in (advanceX > 0)
|
||||||
|
in (advanceY > 0)
|
||||||
|
out (r; r >= 0) {
|
||||||
|
return lines.enumerate.filter!(x => {
|
||||||
|
char c = x.value.value[(x.value.index * advanceX) / advanceY % x.value.value.length];
|
||||||
|
return (x.index % advanceY) == 0 && c == '#';
|
||||||
|
}()).count;
|
||||||
|
}
|
||||||
|
|
||||||
|
unittest {
|
||||||
|
string[] field = [
|
||||||
|
"..##.......",
|
||||||
|
"#...#...#..",
|
||||||
|
".#....#..#.",
|
||||||
|
"..#.#...#.#",
|
||||||
|
".#...##..#.",
|
||||||
|
"..#.##.....",
|
||||||
|
".#.#.#....#",
|
||||||
|
".#........#",
|
||||||
|
"#.##...#...",
|
||||||
|
"#...##....#",
|
||||||
|
".#..#...#.#"
|
||||||
|
];
|
||||||
|
assert(field.enumerate.countTrees2(1, 1) == 2);
|
||||||
|
assert(field.enumerate.countTrees2(3, 1) == 7);
|
||||||
|
assert(field.enumerate.countTrees2(5, 1) == 3);
|
||||||
|
assert(field.enumerate.countTrees2(7, 1) == 4);
|
||||||
|
assert(field.enumerate.countTrees2(1, 2) == 2, "Expected 2, got %d".format(field.enumerate.countTrees2(1,2)));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue