Reorganized project structure
This commit is contained in:
parent
b3b6a43c9e
commit
8f391a3cff
|
@ -0,0 +1,12 @@
|
|||
---
|
||||
Language: Cpp
|
||||
BasedOnStyle: WebKit
|
||||
SpaceAfterTemplateKeyword: false
|
||||
AlignEscapedNewlines: true
|
||||
AlignTrailingComments: true
|
||||
BreakBeforeInheritanceComma: true
|
||||
BreakConstructorInitializers: BeforeComma
|
||||
IndentPPDirectives: AfterHash
|
||||
BreakBeforeBraces: Custom
|
||||
BraceWrapping:
|
||||
AfterFunction: true
|
|
@ -0,0 +1,7 @@
|
|||
cmake_minimum_required(VERSION 3.15)
|
||||
project(aoc2019)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
|
||||
add_executable(aoc2019
|
||||
src/Solution.h src/main.cpp src/Day1Solution.cpp src/Day1Solution.h src/Day2Solution.cpp src/Day2Solution.h)
|
15
Makefile
15
Makefile
|
@ -1,15 +0,0 @@
|
|||
CC=g++
|
||||
CFLAGS=-Wall
|
||||
SRC_DIR=src
|
||||
OUTPUT_DIR=output
|
||||
|
||||
all: day1 day2
|
||||
|
||||
day1:
|
||||
$(CC) $(CFLAGS) $(SRC_DIR)/day1.cpp -o $(OUTPUT_DIR)/$@
|
||||
|
||||
day2:
|
||||
$(CC) $(CFLAGS) $(SRC_DIR)/day2.cpp -o $(OUTPUT_DIR)/$@
|
||||
|
||||
clean:
|
||||
rm $(OUTPUT_DIR)/*
|
|
@ -1,10 +1,10 @@
|
|||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "Day1Solution.h"
|
||||
#include <cmath>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main()
|
||||
void Day1Solution::run()
|
||||
{
|
||||
std::string line;
|
||||
std::ifstream input_file("../input/day1.txt");
|
||||
|
@ -12,16 +12,13 @@ int main()
|
|||
auto part1_sum = 0;
|
||||
auto part2_sum = 0;
|
||||
|
||||
if (input_file.is_open())
|
||||
{
|
||||
while (getline(input_file, line))
|
||||
{
|
||||
if (input_file.is_open()) {
|
||||
while (getline(input_file, line)) {
|
||||
auto val = std::stoi(line);
|
||||
auto calculated_value = std::floor(val / 3) - 2;
|
||||
|
||||
part1_sum += calculated_value;
|
||||
while (calculated_value > 0)
|
||||
{
|
||||
while (calculated_value > 0) {
|
||||
part2_sum += calculated_value;
|
||||
calculated_value = std::floor(calculated_value / 3) - 2;
|
||||
}
|
||||
|
@ -29,8 +26,6 @@ int main()
|
|||
input_file.close();
|
||||
}
|
||||
|
||||
std::cout << "Part 1 Sum: " << part1_sum << std::endl;
|
||||
std::cout << "Part 2 Sum: " << part2_sum << std::endl;
|
||||
|
||||
return 0;
|
||||
std::cout << "Part 1 Answer: " << part1_sum << std::endl;
|
||||
std::cout << "Part 2 Answer: " << part2_sum << std::endl;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef AOC2019_DAY1SOLUTION_H
|
||||
#define AOC2019_DAY1SOLUTION_H
|
||||
|
||||
#include "Solution.h"
|
||||
|
||||
class Day1Solution : public Solution {
|
||||
public:
|
||||
void run() override;
|
||||
};
|
||||
|
||||
#endif //AOC2019_DAY1SOLUTION_H
|
|
@ -1,23 +1,40 @@
|
|||
#include <iostream>
|
||||
#include "Day2Solution.h"
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
|
||||
int run_program(std::vector<int> program, int noun, int verb)
|
||||
void Day2Solution::run()
|
||||
{
|
||||
int program_counter = 0;
|
||||
bool running = true;
|
||||
std::string line;
|
||||
std::ifstream input_file("../input/day2.txt");
|
||||
std::vector<int> program;
|
||||
|
||||
if (input_file.is_open()) {
|
||||
while (getline(input_file, line, ',')) {
|
||||
program.push_back(std::stoi(line));
|
||||
}
|
||||
|
||||
auto result1 = run_program(program, 12, 2);
|
||||
std::cout << "Part 1 Answer: " << result1 << std::endl;
|
||||
|
||||
auto result2 = search_program(program, 19690720);
|
||||
std::cout << "Part 2 Answer: " << result2 << std::endl;
|
||||
|
||||
input_file.close();
|
||||
}
|
||||
}
|
||||
|
||||
int Day2Solution::run_program(std::vector<int> program, int noun, int verb)
|
||||
{
|
||||
auto program_counter = 0;
|
||||
auto running = true;
|
||||
program[1] = noun;
|
||||
program[2] = verb;
|
||||
while (running)
|
||||
{
|
||||
while (running) {
|
||||
auto opcode = program[program_counter++];
|
||||
auto val1 = program[program[program_counter++]];
|
||||
auto val2 = program[program[program_counter++]];
|
||||
|
||||
switch (opcode)
|
||||
{
|
||||
switch (opcode) {
|
||||
case 1: // addition
|
||||
program[program[program_counter++]] = val1 + val2;
|
||||
break;
|
||||
|
@ -33,43 +50,15 @@ int run_program(std::vector<int> program, int noun, int verb)
|
|||
return program[0];
|
||||
}
|
||||
|
||||
int search_program(std::vector<int> program, int expected_value)
|
||||
int Day2Solution::search_program(std::vector<int> program, int expected_value)
|
||||
{
|
||||
for (auto noun = 0; noun < 99; noun++)
|
||||
{
|
||||
for (auto verb = 0; verb < 99; verb++)
|
||||
{
|
||||
for (auto noun = 0; noun < 99; noun++) {
|
||||
for (auto verb = 0; verb < 99; verb++) {
|
||||
auto value = run_program(program, noun, verb);
|
||||
if (value == expected_value)
|
||||
{
|
||||
if (value == expected_value) {
|
||||
return 100 * noun + verb;
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
std::string line;
|
||||
std::ifstream input_file("../input/day2.txt");
|
||||
std::vector<int> program;
|
||||
|
||||
if (input_file.is_open())
|
||||
{
|
||||
while (getline(input_file, line, ','))
|
||||
{
|
||||
program.push_back(std::stoi(line));
|
||||
}
|
||||
|
||||
auto result1 = run_program(program, 12, 2);
|
||||
std::cout << "Part 1 Result: " << result1 << std::endl;
|
||||
|
||||
auto result2 = search_program(program, 19690720);
|
||||
std::cout << "Part 2 Result: " << result2 << std::endl;
|
||||
|
||||
input_file.close();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef AOC2019_DAY2SOLUTION_H
|
||||
#define AOC2019_DAY2SOLUTION_H
|
||||
|
||||
#include "Solution.h"
|
||||
#include <vector>
|
||||
|
||||
class Day2Solution : public Solution {
|
||||
public:
|
||||
void run() override;
|
||||
|
||||
private:
|
||||
int run_program(std::vector<int> program, int noun, int verb);
|
||||
int search_program(std::vector<int> program, int expected_value);
|
||||
};
|
||||
|
||||
#endif //AOC2019_DAY2SOLUTION_H
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef AOC2019_SOLUTION_H
|
||||
#define AOC2019_SOLUTION_H
|
||||
|
||||
#include <string>
|
||||
|
||||
class Solution {
|
||||
public:
|
||||
virtual void run() = 0;
|
||||
};
|
||||
|
||||
#endif //AOC2019_SOLUTION_H
|
|
@ -0,0 +1,21 @@
|
|||
#include "Day1Solution.h"
|
||||
#include "Day2Solution.h"
|
||||
#include "Solution.h"
|
||||
#include <iostream>
|
||||
#include <map>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::map<int, Solution*> solutions = {
|
||||
{ 1, new Day1Solution },
|
||||
{ 2, new Day2Solution }
|
||||
};
|
||||
|
||||
for (const auto& [day, solution] : solutions) {
|
||||
std::cout << "Day " << day << std::endl;
|
||||
solution->run();
|
||||
std::cout << "--------------------------------------------------------------------" << std::endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue