summaryrefslogtreecommitdiffstats
path: root/solutions
diff options
context:
space:
mode:
Diffstat (limited to 'solutions')
-rw-r--r--solutions/c/02-2.cpp66
-rw-r--r--solutions/c/02.in1
-rw-r--r--solutions/py/02-2.py9
3 files changed, 74 insertions, 2 deletions
diff --git a/solutions/c/02-2.cpp b/solutions/c/02-2.cpp
new file mode 100644
index 0000000..aab95a8
--- /dev/null
+++ b/solutions/c/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;
+}
diff --git a/solutions/c/02.in b/solutions/c/02.in
new file mode 100644
index 0000000..0d5c091
--- /dev/null
+++ b/solutions/c/02.in
@@ -0,0 +1 @@
+1 0 0 3 1 1 2 3 1 3 4 3 1 5 0 3 2 6 1 19 2 19 9 23 1 23 5 27 2 6 27 31 1 31 5 35 1 35 5 39 2 39 6 43 2 43 10 47 1 47 6 51 1 51 6 55 2 55 6 59 1 10 59 63 1 5 63 67 2 10 67 71 1 6 71 75 1 5 75 79 1 10 79 83 2 83 10 87 1 87 9 91 1 91 10 95 2 6 95 99 1 5 99 103 1 103 13 107 1 107 10 111 2 9 111 115 1 115 6 119 2 13 119 123 1 123 6 127 1 5 127 131 2 6 131 135 2 6 135 139 1 139 5 143 1 143 10 147 1 147 2 151 1 151 13 0 99 2 0 14 0
diff --git a/solutions/py/02-2.py b/solutions/py/02-2.py
index 2949629..cc6402e 100644
--- a/solutions/py/02-2.py
+++ b/solutions/py/02-2.py
@@ -1,6 +1,9 @@
import sys
+import time
-program = [int(x) for x in input().split(",")]
+program = [int(x) for x in input().split(" ")]
+
+start = time.time()
for n in range(100):
for v in range(100):
@@ -17,7 +20,9 @@ for n in range(100):
elif memory[pointer] == 2:
memory[memory[pointer+3]] = memory[memory[pointer+1]] * memory[memory[pointer+2]]
pointer += 4
- print(n, v, memory[0])
+ # print(n, v, memory[0])
if memory[0] == 19690720:
+ print(n, v)
+ print("took " + str(time.time() - start))
sys.exit()