X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=17a.c;h=903978e3172f96fd01025d56648edc36a0a085f0;hb=HEAD;hp=21400261da332eab806ede057c649667caac6864;hpb=5e45affee88ae30205ab85c5e091a9f07d4565d3;p=advent21.git diff --git a/17a.c b/17a.c index 2140026..903978e 100644 --- a/17a.c +++ b/17a.c @@ -1,21 +1,17 @@ #include -#include #include -#include bool is_in(int dx, int dy, int x1, int x2, int y1, int y2, int *maxy) { int x = 0, y = 0, my = 0; - while (y >= y2 && x <= x2) { + while (y >= y1 && x <= x2) { x+=dx; y+=dy; + my = y > my ? y : my; dx = dx == 0 ? 0 : dx-1; dy--; - if (y > my) - my = y; - if (x >= x1 && x <= x2 && y >= y1 && y <= y2) { - if (my > *maxy) - *maxy = my; + if (x >= x1 && x <= x2 && y >= y1 && y <= y2) { + *maxy = my > *maxy ? my : *maxy; return true; } } @@ -24,23 +20,8 @@ bool is_in(int dx, int dy, int x1, int x2, int y1, int y2, int *maxy) int main() { - size_t len; - char *buf = NULL; - if (getline(&buf, &len, stdin) == -1) - return 1; - printf("%s", buf); - - while (*buf++ != '='); - - int x1 = strtol(buf, &buf, 10); - buf+=strlen(".."); - int x2 = strtol(buf, &buf, 10); - buf+=strlen(", y="); - int y1 = strtol(buf, &buf, 10); - buf+=strlen(".."); - int y2 = strtol(buf, &buf, 10); - - int maxy = 0; + int x1, x2, y1, y2, maxy = 0; + scanf("target area: x=%d..%d, y=%d..%d\n", &x1, &x2, &y1, &y2); for (int dy = x2; dy >= 0; dy--) for (int dx = 1; dx <= x2; dx++) if (is_in(dx, dy, x1, x2, y1, y2, &maxy))