Add day 2 part 2
[?]
Dec 31, 2019, 5:16 AM
Z2RPGTOWKRMA2YKUJGN3OOPJIKHBEHPKOXPYCJ6UFIXRGKIDM7EQCDependencies
- [2]
TCCBGQEU2019 day 1
Change contents
- file addition: day2p2.c[2.7]
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <limits.h>typedef struct ll {int val;struct ll *nxt;} ll;int step(int *prog, int *pc);int* do_read(int *len);int ll_length(ll *head);ll* ll_read(void);void ll_free(ll *head);int* to_a(ll *head, int *len);void main(void) {int proglen = 0;int pc = 0;int *prog = NULL;int *run = NULL;int x = 0, y = 0;prog = do_read(&proglen);run = malloc(proglen * sizeof(int));for(int i = 0; i < INT_MAX; i++) {for(int j = 0; j <= i; j++) {int t = i == j ? 1 : 2;for(int s = 0; s < t; s++) {if(s) {x = j; y = i;} else {x = i; y = j;}memcpy(run, prog, proglen * sizeof(int));run[1] = x;run[2] = y;pc = 0;while(step(run, &pc)) {}if(run[0] == 19690720){printf("%d\n",100 * x + y);goto found;}}}}fprintf(stderr, "Solution not found\n");found:free(prog);free(run);}int step(int *prog, int *pc) {switch(prog[*pc]) {case 1:prog[prog[(*pc) + 3]] = prog[prog[(*pc) + 1]] + prog[prog[(*pc) + 2]];*pc += 4;return 1;case 2:prog[prog[(*pc) + 3]] = prog[prog[(*pc) + 1]] * prog[prog[(*pc) + 2]];*pc += 4;return 1;default:return 0;}}int* do_read(int *len) {ll* as_list = NULL;int *r = NULL;as_list = ll_read();r = to_a(as_list, len);ll_free(as_list);return r;}int* to_a(ll *head, int *len) {int *r = NULL;int i = 0;if(!head)return NULL;*len = ll_length(head);r = malloc(*len * sizeof(int));while(head) {r[i++] = head->val;head = head->nxt;}return r;}ll* ll_read(void) {ll *head = NULL;ll *cur = NULL;ll *tmp = NULL;int x;while(!feof(stdin)) {scanf("%d",&x);scanf(",");tmp = malloc(sizeof(ll));tmp->val = x;if(!head) {head = tmp;}if(cur) {cur->nxt = tmp;}cur = tmp;}return head;}int ll_length(ll *head) {int r = 0;while(head) {r++;head = head->nxt;}return r;}void ll_free(ll *head) {ll *nxt;while(head) {nxt = head->nxt;free(head);head = nxt;}}