Skip to content
This repository was archived by the owner on Feb 14, 2020. It is now read-only.

Commit 43f93dd

Browse files
committed
Generalize day 19 solution
1 parent 1aed962 commit 43f93dd

File tree

1 file changed

+12
-49
lines changed

1 file changed

+12
-49
lines changed

2018/day19.c

Lines changed: 12 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -111,57 +111,20 @@ int main(void) {
111111
}
112112
printf("%u\n", cpu.r[0]);
113113

114-
/*
115-
00: addi ip 16 ip goto 17
116-
01: seti 1 _ r5 r5 = 1
117-
02: seti 1 _ r3 r3 = 1
118-
03: mulr r5 r3 r2 r2 = r5 * r3
119-
04: eqrr r2 r4 r2 r2 = (r2 == r4)
120-
05: addr r2 ip ip if r2 goto 7 else goto 6
121-
06: addi ip 1 ip goto 8
122-
07: addr r5 r0 r0 r0 += r5
123-
08: addi r3 1 r3 r3 += 1
124-
09: gtrr r3 r4 r2 r2 = (r3 > r4)
125-
10: addr ip r2 ip if r2 goto 12 else goto 11
126-
11: seti 2 _ ip goto 3
127-
12: addi r5 1 r5 r5 += 1
128-
13: gtrr r5 r4 r2 r2 = (r5 > r4)
129-
14: addr r2 ip ip if r2 goto 16 else goto 15
130-
15: seti 1 _ ip goto 2
131-
16: mulr ip ip ip halt
132-
17: addi r4 2 r4 r4 += 2
133-
18: mulr r4 r4 r4 r4 *= r4
134-
19: mulr ip r4 r4 r4 *= 19
135-
20: muli r4 11 r4 r4 *= 11
136-
21: addi r2 5 r2 r2 += 5
137-
22: mulr r2 ip r2 r2 *= 22
138-
23: addi r2 12 r2 r2 += 12
139-
24: addr r4 r2 r4 r4 += r2
140-
25: addr ip r0 ip if r0 goto 27 else goto 26
141-
26: seti 0 _ ip goto 1
142-
27: setr ip _ r2 r2 = 27
143-
28: mulr r2 ip r2 r2 *= 28
144-
29: addr ip r2 r2 r2 += 29
145-
30: mulr ip r2 r2 r2 *= 30
146-
31: muli r2 14 r2 r2 *= 14
147-
32: mulr r2 ip r2 r2 *= 32
148-
33: addr r4 r2 r4 r4 += r2
149-
34: seti 0 _ r0 r0 = 0
150-
35: seti 0 _ ip goto 1
151-
*/
152-
153-
#if 0
154-
uint sum = 0;
155-
uint big = 10551358;
156-
for (uint a = 1; a <= big; a++) {
157-
for (uint b = 1; b <= big; b++) {
158-
if (a * b == big) sum += a;
159-
}
114+
cpu = (struct CPU) {
115+
.ip = cpu.ip,
116+
.r = { 1, 0, 0, 0, 0, 0 },
117+
};
118+
while (cpu.r[cpu.ip] != 1) {
119+
struct Ins ins = prog[cpu.r[cpu.ip]];
120+
cpu = Ops[ins.op].fn(cpu, ins.a, ins.b, ins.c);
121+
cpu.r[cpu.ip]++;
122+
}
123+
uint big = 0;
124+
for (uint i = 0; i < 6; ++i) {
125+
if (cpu.r[i] > big) big = cpu.r[i];
160126
}
161-
printf("%u\n", r0);
162-
#endif
163127

164-
uint big = 10551358;
165128
uint sum = 1 + big;
166129
for (uint f = 2; big > 1; ++f) {
167130
if (big % f) continue;

0 commit comments

Comments
 (0)