diff options
| author | Gustav Sörnäs <gusso230@student.liu.se> | 2019-12-17 20:54:35 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gusso230@student.liu.se> | 2019-12-17 20:54:35 +0100 |
| commit | ee96aa7c6ab8f0148e814630e77a726bf61530c0 (patch) | |
| tree | 444376bc3ecfc235118558cace0de96f3aafd790 /19/cpp | |
| parent | ca4d3b189da7793ce8744246617c793c8640ce71 (diff) | |
| download | aoc-ee96aa7c6ab8f0148e814630e77a726bf61530c0.tar.gz | |
Rename 2019
Diffstat (limited to '19/cpp')
| -rw-r--r-- | 19/cpp/01-1.cpp | 8 | ||||
| -rw-r--r-- | 19/cpp/01-2.cpp | 14 | ||||
| -rw-r--r-- | 19/cpp/02-1.cpp | 47 | ||||
| -rw-r--r-- | 19/cpp/02-2.cpp | 66 |
4 files changed, 135 insertions, 0 deletions
diff --git a/19/cpp/01-1.cpp b/19/cpp/01-1.cpp new file mode 100644 index 0000000..fcb593a --- /dev/null +++ b/19/cpp/01-1.cpp @@ -0,0 +1,8 @@ +#include<iostream> + +int main() { + int mass, sum = 0; + while (std::cin >> mass) sum += (mass / 3) - 2; + std::cout << sum << std::endl; +} + diff --git a/19/cpp/01-2.cpp b/19/cpp/01-2.cpp new file mode 100644 index 0000000..7ce1a82 --- /dev/null +++ b/19/cpp/01-2.cpp @@ -0,0 +1,14 @@ +#include<iostream> + +int getFuel(int mass) { + int fuel = (mass / 3) - 2; + if (fuel <= 0) return 0; + return fuel + getFuel(fuel); +} + +int main() { + int mass, sum = 0; + while (std::cin >> mass) sum += getFuel(mass); + std::cout << sum << std::endl; +} + diff --git a/19/cpp/02-1.cpp b/19/cpp/02-1.cpp new file mode 100644 index 0000000..b6db056 --- /dev/null +++ b/19/cpp/02-1.cpp @@ -0,0 +1,47 @@ +#include<fstream> +#include<iostream> +#include<vector> +using namespace std; + +int main() { + ifstream inFile; + inFile.open("02.in"); + + vector<int> program; + int noun, verb; + // enter noun, verb + cin >> noun; + cin >> verb; + + // read program + int n; + while (inFile >> n) program.push_back(n); + program[1] = noun; + program[2] = verb; + //cout << "Program: " << endl; + //dump(program); + + // copy program to mem + vector<int> mem(program); + + // calculate + int pointer = 0; + int op; + do { + //cout << "Pointer: " << pointer << endl; + //cout << "Memory: " << endl; + //dump(mem); + op = mem[pointer]; + switch (op) { + case 1: + mem[mem[pointer+3]] = mem[mem[pointer+1]] + mem[mem[pointer+2]]; + pointer += 4; + break; + case 2: + mem[mem[pointer+3]] = mem[mem[pointer+1]] * mem[mem[pointer+2]]; + pointer += 4; + break; + } + } while (mem[pointer] != 99); + cout << mem[0] << endl; +} diff --git a/19/cpp/02-2.cpp b/19/cpp/02-2.cpp new file mode 100644 index 0000000..aab95a8 --- /dev/null +++ b/19/cpp/02-2.cpp @@ -0,0 +1,66 @@ +#include<fstream> +#include<iostream> +#include<vector> +#include <chrono> +using namespace std; + +int run(vector<int> prog, int noun, int verb, int pointer, int op) { + vector<int> mem(prog); + mem[1] = noun; + mem[2] = verb; + + // calculate + pointer = 0; + do { + //cout << "Pointer: " << pointer << endl; + //cout << "Memory: " << endl; + //dump(mem); + op = mem[pointer]; + switch (op) { + case 1: + mem[mem[pointer+3]] = mem[mem[pointer+1]] + mem[mem[pointer+2]]; + pointer += 4; + break; + case 2: + mem[mem[pointer+3]] = mem[mem[pointer+1]] * mem[mem[pointer+2]]; + pointer += 4; + break; + } + } while (mem[pointer] != 99); + return mem[0]; +} + +int main() { + ifstream inFile; + inFile.open("02.in"); + + vector<int> program; + int noun, verb; + int pointer; + int op; + + // read program + int n; + while (inFile >> n) program.push_back(n); + //cout << "Program: " << endl; + //dump(program); + + int res; + + auto t1 = chrono::high_resolution_clock::now(); + + for (int n = 0; n < 100; n++) { + for (int v = 0; v < 100; v++) { + res = run(program, n, v, pointer, op); + //cout << n << " " << v << " " << res << endl; + if (res == 19690720) { + cout << n << " " << v << endl; + auto t2 = chrono::high_resolution_clock::now(); + auto duration = chrono::duration_cast<std::chrono::microseconds>( t2 - t1 ).count(); + cout << duration << endl; + return 0; + } + } + } + return 1; +} |
