summaryrefslogtreecommitdiffstats
path: root/19/cpp
diff options
context:
space:
mode:
authorGustav Sörnäs <gusso230@student.liu.se>2019-12-17 20:54:35 +0100
committerGustav Sörnäs <gusso230@student.liu.se>2019-12-17 20:54:35 +0100
commitee96aa7c6ab8f0148e814630e77a726bf61530c0 (patch)
tree444376bc3ecfc235118558cace0de96f3aafd790 /19/cpp
parentca4d3b189da7793ce8744246617c793c8640ce71 (diff)
downloadaoc-ee96aa7c6ab8f0148e814630e77a726bf61530c0.tar.gz
Rename 2019
Diffstat (limited to '19/cpp')
-rw-r--r--19/cpp/01-1.cpp8
-rw-r--r--19/cpp/01-2.cpp14
-rw-r--r--19/cpp/02-1.cpp47
-rw-r--r--19/cpp/02-2.cpp66
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;
+}