From 5d7469b73106d10526fd34298122b3faa58a8deb Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Fri, 21 Dec 2018 14:57:36 -0500 Subject: "Solve" day 17 part 1 --- 2018/day17.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 2018/day17.c (limited to '2018') diff --git a/2018/day17.c b/2018/day17.c new file mode 100644 index 0000000..d2fd02c --- /dev/null +++ b/2018/day17.c @@ -0,0 +1,87 @@ +#include +#include +#include +#include + +typedef unsigned uint; + +static char map[2048][2048]; + +static void draw(void) { + for (uint y = 0; y < 14; ++y) { + for (uint x = 494; x < 508; ++x) { + printf("%c", map[y][x]); + } + printf("\n"); + } + printf("\n"); +} + +int main(void) { + memset(map, '.', sizeof(map)); + uint minY = 2048, maxY = 0; + while (!feof(stdin)) { + char a, b; + uint fixed, start, end; + scanf("%c=%u, %c=%u..%u\n", &a, &fixed, &b, &start, &end); + for (uint i = start; i <= end; ++i) { + if (a == 'y') { + map[fixed][i] = '#'; + } else { + map[i][fixed] = '#'; + } + } + if (a == 'y') { + if (fixed < minY) minY = fixed; + if (fixed > maxY) maxY = fixed; + } else { + if (start < minY) minY = start; + if (end > maxY) maxY = end; + } + } + map[0][500] = '|'; + + bool hot; + do { + hot = false; + for (uint y = 0; y < 2047; ++y) { + for (uint x = 0; x < 2048; ++x) { + char *self = &map[y][x]; + char *below = &map[y + 1][x]; + char *left = &map[y][x - 1]; + char *right = &map[y][x + 1]; + if (*self != '|' && *self != '*') continue; + if (*below == '.') { + *below = '|'; + hot = true; + } + if (*below != '#' && *below != '~') continue; + if (*left == '.') { + *left = '|'; + hot = true; + } + if (*right == '.') { + *right = '|'; + hot = true; + } + if (*self == '|' && (*left == '#' || *left == '*')) { + *self = '*'; + hot = true; + } + if (*self == '*' && (*right == '#' || *right == '~')) { + *self = '~'; + hot = true; + } + } + } + } while (hot); + draw(); + + uint count = 0; + for (uint y = minY; y <= maxY; ++y) { + for (uint x = 0; x < 2048; ++x) { + if (map[y][x] != '.' && map[y][x] != '#') count++; + } + } + printf("%u\n", count); +} -- cgit 1.4.1 amp;ofs=50'>unfollow)
Commit message (Expand)Author
2015-08-13ui-shared: show full date in tooltip if longer ago than max_relativeJohn Keeping
2015-08-13ui-shared: use common function in print_rel_date()John Keeping
2015-08-13ui-shared: extract date formatting to a functionJohn Keeping
2015-08-13filter: don't use dlsym unnecessarilyJohn Keeping
2015-08-13ui-tree: use "sane" isgraph()John Keeping
2015-08-13cgit.h: move stdbool.h from ui-shared.hJohn Keeping
2015-08-13cache.c: fix header orderJohn Keeping
2015-08-13configfile.c: don't include system headers directlyJohn Keeping
2015-08-13Remove redundant includesJohn Keeping
2015-08-13Makefile: include Git's config.mak.unameJohn Keeping
2015-08-13tests: allow shell to be overriddenJohn Keeping
2015-08-13redirect: cleanlinessJason A. Donenfeld
2015-08-13redirect: be more careful for different cgi setupsJason A. Donenfeld
2015-08-12ui-log: fix double countingJohn Keeping
2015-08-12log: allow users to follow a fileJohn Keeping
2015-08-12shared: make cgit_diff_tree_cb publicJohn Keeping
2015-08-12t0110: Chain together using &&Jason A. Donenfeld
2015-08-12about: always ensure page has a trailing slashJason A. Donenfeld
2015-08-12filters: apply HTML escapingLazaros Koromilas
2015-08-12git: update to v2.5.0Christian Hesse
2015-08-12Fix processing of repo.hide and repo.ignoreDaniel Reichelt