-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution1.java
102 lines (89 loc) · 4.32 KB
/
Solution1.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
// --- Day 3: Toboggan Trajectory ---
// With the toboggan login problems resolved, you set off toward the airport.
// While travel by toboggan might be easy, it's certainly not safe: there's very
// minimal steering and the area is covered in trees. You'll need to see which
// angles will take you near the fewest trees.
// Due to the local geology, trees in this area only grow on exact integer
// coordinates in a grid. You make a map (your puzzle input) of the open squares
// (.) and trees (#) you can see. For example:
// ..##.......
// #...#...#..
// .#....#..#.
// ..#.#...#.#
// .#...##..#.
// ..#.##.....
// .#.#.#....#
// .#........#
// #.##...#...
// #...##....#
// .#..#...#.#
// These aren't the only trees, though; due to something you read about once
// involving arboreal genetics and biome stability, the same pattern repeats to
// the right many times:
// ..##.........##.........##.........##.........##.........##....... --->
// #...#...#..#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..
// .#....#..#..#....#..#..#....#..#..#....#..#..#....#..#..#....#..#.
// ..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#
// .#...##..#..#...##..#..#...##..#..#...##..#..#...##..#..#...##..#.
// ..#.##.......#.##.......#.##.......#.##.......#.##.......#.##..... --->
// .#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#
// .#........#.#........#.#........#.#........#.#........#.#........#
// #.##...#...#.##...#...#.##...#...#.##...#...#.##...#...#.##...#...
// #...##....##...##....##...##....##...##....##...##....##...##....#
// .#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.#.#..#...#.# --->
// You start on the open square (.) in the top-left corner and need to reach the
// bottom (below the bottom-most row on your map).
// The toboggan can only follow a few specific slopes (you opted for a cheaper
// model that prefers rational numbers); start by counting all the trees you
// would encounter for the slope right 3, down 1:
// From your starting position at the top-left, check the position that is right
// 3 and down 1. Then, check the position that is right 3 and down 1 from there,
// and so on until you go past the bottom of the map.
// The locations you'd check in the above example are marked here with O where
// there was an open square and X where there was a tree:
// ..##.........##.........##.........##.........##.........##....... --->
// #..O#...#..#...#...#..#...#...#..#...#...#..#...#...#..#...#...#..
// .#....X..#..#....#..#..#....#..#..#....#..#..#....#..#..#....#..#.
// ..#.#...#O#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#..#.#...#.#
// .#...##..#..X...##..#..#...##..#..#...##..#..#...##..#..#...##..#.
// ..#.##.......#.X#.......#.##.......#.##.......#.##.......#.##..... --->
// .#.#.#....#.#.#.#.O..#.#.#.#....#.#.#.#....#.#.#.#....#.#.#.#....#
// .#........#.#........X.#........#.#........#.#........#.#........#
// #.##...#...#.##...#...#.X#...#...#.##...#...#.##...#...#.##...#...
// #...##....##...##....##...#X....##...##....##...##....##...##....#
// .#..#...#.#.#..#...#.#.#..#...X.#.#..#...#.#.#..#...#.#.#..#...#.# --->
// In this example, traversing the map using this slope would cause you to
// encounter 7 trees.
// Starting at the top-left corner of your map and following a slope of right 3
// and down 1, how many trees would you encounter?
public class Solution1 {
public static void main(String[] args) {
List<String> input = getInput();
System.out.println(checkTrees(input));
}
private static List<String> getInput() {
List<String> input = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) {
br.lines().forEach(line -> input.add(line));
br.close();
} catch (Exception e) {
System.out.println(e);
}
return input;
}
private static Integer checkTrees(List<String> input) {
int trees = 0;
int column = 0;
final int WIDTH = input.get(0).length();
for (int row = 1; row < input.size(); row++) {
column = column + 3 <= WIDTH - 1 ? column + 3 : column + 3 - WIDTH;
if (input.get(row).charAt(column) == '#')
trees++;
}
return trees;
}
}