Piotr Czajkowski 3 years ago
parent
commit
e4aff01de3
3 changed files with 487 additions and 0 deletions
  1. 74 0
      day3/challenge.txt
  2. 90 0
      day3/day3.c
  3. 323 0
      day3/input.txt

+ 74 - 0
day3/challenge.txt

@@ -0,0 +1,74 @@
+--- 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?
+
+Your puzzle answer was 200.
+--- Part Two ---
+
+Time to check the rest of the slopes - you need to minimize the probability of a sudden arboreal stop, after all.
+
+Determine the number of trees you would encounter if, for each of the following slopes, you start at the top-left corner and traverse the map all the way to the bottom:
+
+    Right 1, down 1.
+    Right 3, down 1. (This is the slope you already checked.)
+    Right 5, down 1.
+    Right 7, down 1.
+    Right 1, down 2.
+
+In the above example, these slopes would find 2, 7, 3, 4, and 2 tree(s) respectively; multiplied together, these produce the answer 336.
+
+What do you get if you multiply together the number of trees encountered on each of the listed slopes?
+
+Your puzzle answer was 3737923200.

+ 90 - 0
day3/day3.c

@@ -0,0 +1,90 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define LINE_MAX 50
+
+int arraySize = 0;
+
+char **readInput(FILE *fp) {
+	char **array = NULL;
+	int index = 0;
+
+	while (1) {
+		if (feof(fp)) break;
+
+		char *p = malloc(LINE_MAX);
+		if (!p) return NULL;
+
+		if (1 != fscanf(fp, "%s\n", p))
+			return NULL;
+
+		arraySize++;
+		char **newArray = realloc(array, sizeof(char*)*arraySize);
+		if (!newArray) return NULL;
+		array = newArray;
+		array[index] = p;
+		index++;
+	}
+
+	return array;
+}
+
+void freeArray(char **array) {
+	for (int i = 0; i < arraySize; i++)
+		free(array[i]);
+
+	free(array);
+}
+
+long int traverse(int right, int down, char **array) {
+	long int trees = 0;
+
+	size_t x = right;
+	size_t xMax = strlen(array[0]) - 1;
+	int y = down;
+
+	while (y < arraySize) {
+		if (x > xMax) x = x - xMax - 1;
+
+		if (array[y][x] == '#') trees++;
+
+		x += right;
+		y += down;
+	}
+
+	return trees;
+}
+
+int main(int argc, char **argv)
+{
+	if (argc < 2) {
+		puts("You need to specify path to file!");
+		return -1;
+	}
+
+	FILE *fp = fopen(argv[1], "r");
+	if (!fp) {
+		puts("Can't read");
+		return -1;
+	}
+
+	char **array = readInput(fp);
+	if (!array) {
+		puts("Can't read array!");
+		return -1;
+	}
+
+	long int part1 = traverse(3, 1, array);
+	printf("Part1: %ld\n", part1);
+
+	long int x1 = traverse(1, 1, array);
+	long int x2 = traverse(5, 1, array);
+	long int x3 = traverse(7, 1, array);
+	long int x4 = traverse(1, 2, array);
+
+	printf("Part2: %ld\n", part1*x1*x2*x3*x4);
+
+	fclose(fp);
+	freeArray(array);
+}

+ 323 - 0
day3/input.txt

@@ -0,0 +1,323 @@
+.#......##..#.....#....#.#.#...
+.#.#...#.##.#..........#...##..
+.........#.....#.####........#.
+.......#.#...#.#...............
+..#....#...#.#...#.#...#.#.....
+...#...........#..#.........#.#
+....#..#....#..#..#.#...#..##..
+#...........#..#.....#.......#.
+#..#...#...#.###...#...#.#...#.
+#...#.#.......#...#...#...##.##
+..#..................#.#.#....#
+..#.##....#........##..........
+.....#....#....#.#.......#.....
+##.#..##.#.....###.......#.....
+......#...###....#..#.#...#....
+..............#.........#.##...
+#......#.............#....#...#
+.#..#......#.###....#...#.....#
+..#........#.....#.....#...#..#
+.......#...#..............#..#.
+..#...#........#...##........#.
+.#........#....#......#......#.
+....#..#.###.......##....#.#..#
+..#..###..#....................
+......#...#....#.........#.#...
+....#.##................#..#...
+....#......######.....#........
+.#......##.......#....#..##.###
+..#...##.###..#.......#....#...
+....#.###...#.#.#........#.....
+...###...#.......#..........#.#
+..........#...#..........##.#..
+..#....#........#.....#....#..#
+..#...#.#....##..#...##....#...
+........##...#..##.....#.......
+###.......#.#...#...#.......#.#
+....#.#....##.###........#.....
+.....#..............#....##..##
+#......#.#....#.#......#.....##
+.....#....#..#......#...#......
+..#.##..#.....#..#....#......#.
+.....#.#.#..........##....#....
+.........#..#..........#.#.....
+.##..#...#......#.#..#....#....
+#.#..##.......#.#......##......
+..#.#....#.#.....#.............
+.#.........#.......#..#.#......
+##.........#..##.#......#......
+#..#.....#...#.....#.........#.
+..........#..##..##.#..##...###
+..##.....#...#..##...##.#.#....
+..#..........#.#.....##.#....#.
+.##..#..#.........###.......#..
+......##....#...##....##.......
+.....#.#.##...............#....
+#..#......#.....#..#..#.#.....#
+.....##.#....#.#.....#.#.#.....
+....#..#.#..##....#.....#....#.
+#...#.....#....#....#.#.#......
+.....#................#.......#
+.......#..#.#...#.#......#..#.#
+...........#....#....###...#.#.
+#.##....##..###.#.#......#.##.#
+..##...#.#..#..#...#.....#.#.#.
+#.....###.#..#.#...#.#......#.#
+..##.#...#...#.#.....#.#.......
+#....#...#.##......#.#......#..
+..#.....##.....#...............
+.....###...##.#...........#....
+...#..##.....##....#...........
+.....#..#......#..........#....
+....##..##.#...#...#.#.....#.##
+.#.....###..###.#...#.#..#....#
+.#..........#...#..#.#.#..#...#
+.##.##..#..#....#....####......
+....#..#.#..........#..........
+###...#.#..#..#...#..###.......
+####.#...#....#..#...#..#......
+.....##....#.#...#....##....##.
+....#.#.##....#.##..#....#.#.#.
+#......#..#.###....#####.##....
+..##..#.#.#..#........##.##..##
+#.#...#..#..#......#..#.....#..
+.###.....#.#....#.#..##.....#.#
+....#......#.#...#...#.#....#.#
+.....#.###.##..................
+.#..........#........#.#...##.#
+.##......#.#.#..#....##.###..#.
+..#.##....#....#.........#.#..#
+........#..#..#.#.####.....##..
+#..#.##.#......#.#..##.#...#..#
+..#.#.##..#.##..........#......
+##.#.....#.#.##..#..##.....##.#
+.##........#..#.....#...#.##.##
+...#....#.#.#.........##.....#.
+...#....#.#....#...#..#........
+.....#...#..#...#.##......##...
+##.........#......#..........##
+.#......#.....##....#.#.#.....#
+..#.###......#..#.#....#.....#.
+.#.......#...#...#.#.#.#..##...
+...#..............#...###.....#
+...##......#.#..#.#........#.#.
+..##.#....#..........##...#.#..
+..#...#.....#.######...##...#..
+#...#...#............#.....#...
+.###..###.##..#.........#......
+.#........##..#....#...#.#..##.
+#.#.##.#.#...###...............
+..#.#.#......#.#.#....#.....#.#
+.#...........#.##.#..#.###.....
+.###.#....#...........##.#.#...
+.#...#...........#..##.........
+.#...#.#...........#..###....#.
+.##.......#.....#.....##....#..
+#.......#........#...##.##..#.#
+....#..###..#.....##.......#...
+......###.#...#..#....#.#...#..
+..#..#.......##...#.#.#...#....
+......#..#.......#.......##.#..
+#.#....###.....#...#..#...#....
+#...#.##.#........#..........##
+.....#.#.##.#.#..#..##.......##
+.#.#.......##....#.#...........
+#..##.............##...#.#..#..
+#...........#.#......#.##.##..#
+...#...#...........#....###.#.#
+.##..#.#.#....#....#####.......
+..#...#.....#.#....#...........
+.#..#........#.....#.#......#..
+.#.........#...#...#.#.#..#....
+.##.##......#.#...#.......#...#
+.##...#..#..........#...#.....#
+#..........#..#...#.#......#...
+....##......#...##..##..#....#.
+.##.......#...#.#..##..#..#....
+.#.#................#....#.....
+..#..#..###.......#............
+...##.....#..#......#....#.....
+....#...###...#....#..##...#.#.
+#.........#.......#...#....#...
+.#.#...#.#....##....#.#..##.#..
+...#..#..#....#..#.#..##.....##
+..#..#.#.#....#...#....#..#....
+......###.....#...##.#..#.#...#
+.#.#.#..#.##........#.#....#...
+.#..........#....#.#.......#...
+#.....#........#........#....#.
+.#.#..#...#...................#
+....####..#..#..#..#....#..#.#.
+..##.#..........#.##..#.....##.
+..................##..........#
+....##....###.....#..#...#.#...
+.##.........#..#...............
+....##..###....#.##............
+#.#...###.#..##...#...........#
+.....#..#......#.....#.........
+..#..##...#.....#.....#.#......
+......#....###.#..#.#.#....#..#
+#...#.......#.##.....#.........
+.#.#..#...#.............##.....
+......#..............#.....#..#
+......#......###....#...#......
+.....#.....#...#.......###.....
+#..........##......##.#.#.....#
+....#.......#..#......#.......#
+..#...#.###...........#..#.###.
+.....#...#.#...........#.#...##
+........#.#.#........#.#.....#.
+....##..##.#.#..#.#....#.#.##..
+..#.#.#......##.....#...#.#...#
+##...#..#......#.#.#..#...#....
+....#..##...........#..#..#..#.
+.#..##...#...#...##.#..#.#....#
+.#.....####.#..#..#....##..#.#.
+.#....#..#......#.....#.#.#....
+....#..#.....#......#..........
+..#.#..###.....#...#...#.....##
+..#.#...##..#...........####...
+.#.##....##.#......#.....##.#..
+#.##..#....#.###..........##...
+.###...#......#.#....##........
+...................#..#.....#..
+#.#...#.#..#.....#...#..####.##
+....#.##..##...##.##.....#.....
+.#...#.##...........#.......##.
+###..#.....##...#.........##...
+.###....##...###...............
+.#....#####........#.#.#.##....
+.#.#....####.##........#.......
+.....#......#..................
+......###.....##......#..##.#..
+....#.#...........##.#....##.#.
+...................#.#.#.......
+#.#.#........#..#.......##.....
+..#...#...#....#......#....##.#
+#..#..............#......#....#
+......#.........##.............
+.....#.#....##..#.......#......
+......#.......#...........#....
+....#....#.#..##.#....#...#....
+#.#.#..#..#.#.#.#...#....#....#
+.#.#....#...#.#..#......#.....#
+.#...........#.#....##.....#...
+........#...#....#....##.....##
+#..#..........#..#..#.....#....
+#.#.###..........#.##....#...##
+..#................#.##.##.....
+..#...#.##...##...#.........#..
+#....#......#......#.........#.
+##...#...##.#.........#......#.
+.......#.....#.................
+...#...#.....##.........#.#..#.
+..#......#...#.......#......#.#
+#.......#...#.##.#..##..#......
+.#.#............#...###..#.....
+...#.......##.......#....#..#..
+.....#..#.#....#.#.............
+#....#...##.##....#....##......
+........#......#.......#....#..
+..#..#..##......##.#..#.#..##..
+....##......#.##.##......#.....
+........##.#...#.....#.......#.
+..##.#....#..#......#.##.......
+..##.####.#...#.#....#.........
+.#........#.....#..#....#...#.#
+###....##......#..#..#.##..#...
+..........###.#..#..#....#.....
+..#.........#....#.....#....#.#
+.#...#.#.....##.#...#...#.#..#.
+....##......##.##.#.....#..#...
+....#.##...##.......#..##......
+#..........#..#....#.......#.#.
+..#.....#.................#....
+..........#.#.#.....#.#....#..#
+.......#..........#.##....#....
+#..#.....#.......#........#....
+#.....##..#.........##..#..#.#.
+.##.#...#..........#....#......
+....#..#.#......#.##..#..#.##..
+...##.####....#.....#.#...##...
+..#.#....#.#........#..........
+#...#.#.##.##....##..#...#...#.
+...#.#.......#..#...#..#..##..#
+.....#....#........###.....#...
+.......#..#.##....#.#.....#....
+....##....#....#.......#.....#.
+.........#........###...##.....
+#.#..#...##.........#.#..#....#
+...##...........#.........#...#
+......#.#.#.........#..#.#.#...
+........##.###....#..#.......#.
+....#.#...#......#..#........##
+.#....##....#...#.##.........#.
+####.#..#...........##.#.#.....
+...#....#..#.....#..##.####.#..
+.##...#...........#.#.........#
+#.#..#..#...#.#.#.........#..#.
+#......###............#...#....
+..#.......#....#...#...#..#...#
+#.#.#...##..#...#...#.......##.
+......#.#.......#..........#.#.
+...............#...#..#...#.#..
+.#.#...##.####..##.##....#..##.
+#..####.......##.#........#...#
+......###....##...#.#..#.##....
+.##.....###..#...#.###.###.....
+..#...#.....#...#..#..##..#....
+...#...##.....##........#.#.##.
+.#...#..#....#....#..###....#.#
+..#.#.#.#.#..........#.#..#..##
+.......###.....................
+##.#......#.##.....#.........#.
+......................#.#.....#
+#..#........##.......#..##..#.#
+#.#.#.....##.#.##.##.#....##...
+.#...#.....#.........#.....#...
+..#.........#.##.#.###.#......#
+.........#..#.##...#.......###.
+.....##........#......#........
+...#.#...##...#........#.##....
+.........##............#.####..
+#....#...#...#..#....#..#.#.#.#
+..#.........#......#.##........
+....#.....#........#........#.#
+.##.#..#.#..#..###......###....
+#.###.....#.#.#.##........#..##
+#.#..#...##.....#....#...#.#...
+......#....#.....#...#.........
+...#........##.......#.##..####
+..#..#....#....#..#..#...#.##..
+.##.....#............#...#.....
+......#.......#.....#...#.#.#..
+.........#.....#...##..........
+.....#........##...........#...
+#.#..##.#...#....#....#........
+#.##..#.#.......#...#......#...
+...........#.#..#..#.....##.#..
+#....#.##.......#......#.##..#.
+.....#........#.##.#...#.....#.
+.....###..#.......##...........
+.........#.#.#.....#.##.......#
+.......#....#......#.#.....#...
+##........#...#..#.#.........#.
+##...........#.##...##......#..
+..#.###.#.#.#...####..#....###.
+.........#...#.....##....#.#.##
+.###..###.#.#.....#.##.........
+#..#...#.#.................##.#
+##.........#.#....#.#...#.###..
+#.#....#..............#.##.#...
+...#..#....##.#..#.......#..##.
+.#..#.###......##..........#..#
+.##....#.#....#....#.#..#......
+.......#.....#..#....#.##...#..
+#.#.#.........###..#..#.....#..
+...##..##...##....#..#......#..
+..........#....#..........#....
+#..##..#...#......#.....#.#....
+#..##..#....#.#.#...#..........
+......##..#.........#........#.
+.##..#..#......###.....#..#....
+.....#..#.##..........#.#..#...