summary refs log tree commit diff
path: root/22.10/main.cpp
blob: 942a19eee44251a753927296312bb4363ed2239a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

class VM
{
	int x = 1;
	int cycles = 0;

	void delay(int amt) {
		for (int i = 0; i < amt; i++) {
			cycles++;
			if (cycles % 40 == 20) {
				part1 += cycles * x;
			}

			int sx = (cycles-1) % 40;
			int sy = (cycles-1) / 40;
			if (abs(x - sx) <= 1) cout << "\u2588";
			else cout << ' ';
			if (sx == 39) cout << endl;
		}
	}

public:
	int part1 = 0;

	void parse(string line) {
		istringstream stream(line);
		string cmd;
		stream >> cmd;
		if (cmd == "noop") {
			delay(1);
		} else if (cmd == "addx") {
			int d;
			stream >> d;
			delay(2);
			x += d;
		}
	}
};

int
main()
{
	VM vm;
	for (string line; getline(cin, line); ) {
		vm.parse(line);
	}
	cout << vm.part1 << endl;
}