Compare commits

..

2 Commits

Author SHA1 Message Date
Thraix ce9bc29372 Add solution for 2015 Day 18 2026-07-26 00:13:11 +02:00
Thraix 2a7353d702 Add 2015 templates 2026-07-26 00:11:32 +02:00
50 changed files with 864 additions and 0 deletions
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
+6
View File
@@ -0,0 +1,6 @@
.#.#.#
...##.
#....#
..#...
#.#..#
####..
View File
View File
View File
View File
View File
View File
View File
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day01
{
REGISTER_DAY(2015, Day01, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day01, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day01, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day01, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day01, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day02
{
REGISTER_DAY(2015, Day02, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day02, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day02, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day02, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day02, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day03
{
REGISTER_DAY(2015, Day03, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day03, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day03, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day03, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day03, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day04
{
REGISTER_DAY(2015, Day04, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day04, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day04, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day04, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day04, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day05
{
REGISTER_DAY(2015, Day05, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day05, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day05, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day05, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day05, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day06
{
REGISTER_DAY(2015, Day06, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day06, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day06, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day06, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day06, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day07
{
REGISTER_DAY(2015, Day07, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day07, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day07, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day07, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day07, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day08
{
REGISTER_DAY(2015, Day08, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day08, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day08, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day08, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day08, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day09
{
REGISTER_DAY(2015, Day09, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day09, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day09, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day09, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day09, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day10
{
REGISTER_DAY(2015, Day10, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day10, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day10, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day10, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day10, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day11
{
REGISTER_DAY(2015, Day11, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day11, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day11, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day11, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day11, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day12
{
REGISTER_DAY(2015, Day12, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day12, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day12, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day12, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day12, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day13
{
REGISTER_DAY(2015, Day13, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day13, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day13, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day13, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day13, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day14
{
REGISTER_DAY(2015, Day14, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day14, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day14, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day14, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day14, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day15
{
REGISTER_DAY(2015, Day15, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day15, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day15, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day15, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day15, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day16
{
REGISTER_DAY(2015, Day16, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day16, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day16, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day16, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day16, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day17
{
REGISTER_DAY(2015, Day17, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day17, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day17, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day17, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day17, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+114
View File
@@ -0,0 +1,114 @@
#include "common/aoc.h"
namespace y2015::day18
{
REGISTER_DAY(2015, Day18, Array2D<char>, int);
REGISTER_TEST_EXAMPLE(2015, Day18, ExampleInput, 1, 4);
REGISTER_TEST(2015, Day18, Input, 1, 814);
REGISTER_TEST_EXAMPLE(2015, Day18, ExampleInput, 2, 7);
REGISTER_TEST(2015, Day18, Input, 2, 924);
READ_INPUT(input)
{
return Input::ReadArray2D(input);
}
OUTPUT1(input)
{
Array2D<char> array1 = input;
Array2D<char> array2 = input;
Array2D<char>* current = &array1;
Array2D<char>* other = &array2;
for (int i = 0; i < 100; i++)
{
current->Each(
[&other](const Array2D<char>& array, Index2D index)
{
int neighbors = array.GetNeighbors('#', index.x, index.y, true);
if (array[index] == '#')
{
if (neighbors < 2 || neighbors > 3)
{
(*other)[index] = '.';
}
else
{
(*other)[index] = '#';
}
}
else if (array[index] == '.')
{
if (neighbors == 3)
{
(*other)[index] = '#';
}
else
{
(*other)[index] = '.';
}
}
});
std::swap(current, other);
}
return current->Count('#');
}
OUTPUT2(input)
{
Array2D<char> array1 = input;
Array2D<char> array2 = input;
Array2D<char>* current = &array1;
Array2D<char>* other = &array2;
array1[Index2D{0, 0}] = '#';
array2[Index2D{0, 0}] = '#';
array1[Index2D{0, array1.height - 1}] = '#';
array2[Index2D{0, array1.height - 1}] = '#';
array1[Index2D{array1.width - 1, 0}] = '#';
array2[Index2D{array1.width - 1, 0}] = '#';
array1[Index2D{array1.width - 1, array1.height - 1}] = '#';
array2[Index2D{array1.width - 1, array1.height - 1}] = '#';
for (int i = 0; i < 100; i++)
{
current->Each(
[&other](const Array2D<char>& array, Index2D index)
{
if (index.x == 0 && index.y == 0)
return;
if (index.x == 0 && index.y == array.height - 1)
return;
if (index.x == array.width - 1 && index.y == 0)
return;
if (index.x == array.width - 1 && index.y == array.height - 1)
return;
int neighbors = array.GetNeighbors('#', index.x, index.y, true);
if (array[index] == '#')
{
if (neighbors < 2 || neighbors > 3)
{
(*other)[index] = '.';
}
else
{
(*other)[index] = '#';
}
}
else if (array[index] == '.')
{
if (neighbors == 3)
{
(*other)[index] = '#';
}
else
{
(*other)[index] = '.';
}
}
});
std::swap(current, other);
}
return current->Count('#');
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day19
{
REGISTER_DAY(2015, Day19, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day19, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day19, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day19, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day19, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day20
{
REGISTER_DAY(2015, Day20, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day20, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day20, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day20, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day20, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day21
{
REGISTER_DAY(2015, Day21, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day21, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day21, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day21, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day21, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day22
{
REGISTER_DAY(2015, Day22, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day22, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day22, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day22, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day22, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day23
{
REGISTER_DAY(2015, Day23, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day23, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day23, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day23, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day23, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day24
{
REGISTER_DAY(2015, Day24, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day24, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day24, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day24, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day24, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}
+31
View File
@@ -0,0 +1,31 @@
#include "common/aoc.h"
namespace y2015::day25
{
REGISTER_DAY(2015, Day25, std::vector<int>, int);
REGISTER_TEST_EXAMPLE(2015, Day25, ExampleInput, 1, 0);
REGISTER_TEST(2015, Day25, Input, 1, 0);
REGISTER_TEST_EXAMPLE(2015, Day25, ExampleInput, 2, 0);
REGISTER_TEST(2015, Day25, Input, 2, 0);
READ_INPUT(input)
{
std::vector<int> vec;
std::string str;
while (getline(input, str))
{
}
return vec;
}
OUTPUT1(input)
{
return 0;
}
OUTPUT2(input)
{
return 0;
}
}