diff options
| -rw-r--r-- | solutions/c/02-2.cpp | 66 | ||||
| -rw-r--r-- | solutions/c/02.in | 1 | ||||
| -rw-r--r-- | solutions/py/02-2.py | 9 |
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() |
