From b68d3719040e5d3b7243f36cca1454b2482f351d Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Mon, 14 Dec 2020 00:26:14 -0500 Subject: Solve day 14 part 1 --- 2020/day14.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 2020/day14.c diff --git a/2020/day14.c b/2020/day14.c new file mode 100644 index 0000000..f04e864 --- /dev/null +++ b/2020/day14.c @@ -0,0 +1,50 @@ +#include +#include +typedef unsigned long ul; +static struct { + ul addr; + ul val; +} writes[1024]; +static int len; +static void write(ul addr, ul val) { + for (int i = 0; i < len; ++i) { + if (writes[i].addr == addr) { + writes[i].val = val; + return; + } + } + writes[len].addr = addr; + writes[len++].val = val; +} +int main(void) { + ul mask = 0; + ul bits = 0; + for (;;) { + char str[37]; + int n = scanf("mask = %s\n", str); + if (n < 0) break; + if (n) { + mask = 0; + bits = 0; + for (ul i = 35; i < 36; --i) { + if (str[35-i] == 'X') { + mask |= 1UL << i; + } else if (str[35-i] == '1') { + bits |= 1UL << i; + } + } + } else { + ul addr, val; + n = scanf("em[%lu] = %lu\n", &addr, &val); + if (n < 2) break; + val &= mask; + val |= bits; + write(addr, val); + } + } + ul sum = 0; + for (int i = 0; i < len; ++i) { + sum += writes[i].val; + } + printf("%lu\n", sum); +} -- cgit 1.4.1