From c1293f280fef0eb4fa50393738ef32688682af10 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Fri, 6 Dec 2019 03:16:13 -0500 Subject: Solve day 5 part 2 --- 2019/day05.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/2019/day05.c b/2019/day05.c index 3b38124..ec8c471 100644 --- a/2019/day05.c +++ b/2019/day05.c @@ -1,13 +1,6 @@ #include #include - -static int input(void) { - return 1; -} - -static void output(int x) { - printf("%d\n", x); -} +#include static int ip; static int mem[1024]; @@ -16,7 +9,7 @@ static int *p(int mode, int param) { return (mode ? &mem[ip + param] : &mem[mem[ip + param]]); } -static void run(void) { +static void run(int input) { while (mem[ip] != 99) { int op = mem[ip] % 100; int m1 = mem[ip] / 100 % 10; @@ -25,14 +18,23 @@ static void run(void) { switch (op) { break; case 1: *p(m3, 3) = *p(m1, 1) + *p(m2, 2); ip += 4; break; case 2: *p(m3, 3) = *p(m1, 1) * *p(m2, 2); ip += 4; - break; case 3: *p(m1, 1) = input(); ip += 2; - break; case 4: output(*p(m1, 1)); ip += 2; + break; case 3: *p(m1, 1) = input; ip += 2; + break; case 4: printf("%d\n", *p(m1, 1)); ip += 2; + break; case 5: ip = (*p(m1, 1) ? *p(m2, 2) : ip + 3); + break; case 6: ip = (*p(m1, 1) ? ip + 3 : *p(m2, 2)); + break; case 7: *p(m3, 3) = (*p(m1, 1) < *p(m2, 2)); ip += 4; + break; case 8: *p(m3, 3) = (*p(m1, 1) == *p(m2, 2)); ip += 4; break; default: abort(); } } } int main(void) { - for (int i = 0; EOF != scanf("%d,", &mem[i]); ++i); - run(); + int a[1024]; + for (int i = 0; EOF != scanf("%d,", &a[i]); ++i); + memcpy(mem, a, sizeof(mem)); + run(1); + memcpy(mem, a, sizeof(mem)); + ip = 0; + run(5); } -- cgit 1.4.1 e='1'/>
Commit message (Collapse)Author
2019-06-28Unset iflag when exiting catshJune McEnroe
It saves history! It's usable!
2019-06-24Consolidate catsh history documentationJune McEnroe
2019-06-19Set LESS=FRXJune McEnroe
This is how git invokes less by default. I think I want this everywhere. This allows color, exits if the input fits on one screen, and doesn't clear the screen.
2019-06-16Alias date=ddateJune McEnroe
Will I regret this?
2019-06-15Set sensitivity by slot in TF2June McEnroe
2019-06-15Add AcceptanceJune McEnroe
2019-06-07Add variables to bitJune McEnroe
2019-06-05Add A Closed and Common OrbitJune McEnroe
2019-06-02Add RebornJune McEnroe
2019-05-30Add bit to bin.7June McEnroe
2019-05-30Simplify and build bitJune McEnroe
lex is a waste of time.
2019-05-29Add xx -p optionJune McEnroe
2019-05-27Add FrontierJune McEnroe
2019-05-27Break nicks with ZWNJJune McEnroe
This should prevent bad wrapping.
2019-05-26Add DawnJune McEnroe
2019-05-20Declare vasprintf(3) for GNUJune McEnroe
who the fuck is scraeming "#define _GNU_SOURCE" at my house. show yourself, coward. i will never #define _GNU_SOURCE
2019-05-20Fix comparison warning in ttpreJune McEnroe
2019-05-20Add AuthorityJune McEnroe
2019-05-19Specify precedence of unary versions of operatorsJune McEnroe
2019-05-18Add compound assignment operators to orderJune McEnroe
2019-05-15Support simple assignment in orderJune McEnroe
2019-05-15Implement sizeof in orderJune McEnroe
2019-05-15Add orderJune McEnroe
2019-05-12Add T suffix in bitJune McEnroe
2019-05-10Highlight yacc and lex files as CJune McEnroe
Their %-prefixed directives should probably be highlighted Macro.
2019-05-10Use val instead of suboptargJune McEnroe
suboptarg doesn't exist in GNU. Hopefully BSD getsubopt also sets val on failure?
2019-05-09Add Parable of the SowerJune McEnroe
2019-05-07Add bit without buildJune McEnroe
Need to do some stuff in the Makefile for lex and yacc and generating HTML pages for it.
2019-05-04Fix MANDIR typoJune McEnroe
2019-05-04Move relay to binJune McEnroe