@@ -111,57 +111,20 @@ int main(void) {
111
111
}
112
112
printf ("%u\n" , cpu .r [0 ]);
113
113
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 ];
160
126
}
161
- printf ("%u\n" , r0 );
162
- #endif
163
127
164
- uint big = 10551358 ;
165
128
uint sum = 1 + big ;
166
129
for (uint f = 2 ; big > 1 ; ++ f ) {
167
130
if (big % f ) continue ;
0 commit comments