diff options
-rw-r--r-- | 2018/day03.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/2018/day03.c b/2018/day03.c index b4544c1..0778440 100644 --- a/2018/day03.c +++ b/2018/day03.c @@ -7,15 +7,23 @@ typedef unsigned uint; enum { Len = 1000 }; static byte fabric[Len][Len]; +static struct { + uint x, y, w, h; +} claims[2 * Len]; + int main() { + uint n = 0; while (!feof(stdin)) { - uint d, x, y, w, h; - scanf("#%u @ %u,%u: %ux%u\n", &d, &x, &y, &w, &h); - for (uint i = 0; i < w; ++i) { - for (uint j = 0; j < h; ++j) { - fabric[x + i][y + j]++; + scanf( + "#%*u @ %u,%u: %ux%u\n", + &claims[n].x, &claims[n].y, &claims[n].w, &claims[n].h + ); + for (uint x = 0; x < claims[n].w; ++x) { + for (uint y = 0; y < claims[n].h; ++y) { + fabric[claims[n].x + x][claims[n].y + y]++; } } + n++; } uint count = 0; for (uint x = 0; x < Len; ++x) { @@ -24,4 +32,15 @@ int main() { } } printf("%u\n", count); + uint i; + for (i = 0; i < n; ++i) { + uint overlap = 0; + for (uint x = 0; x < claims[i].w; ++x) { + for (uint y = 0; y < claims[i].h; ++y) { + if (fabric[claims[i].x + x][claims[i].y + y] > 1) overlap = 1; + } + } + if (!overlap) break; + } + printf("%u\n", 1 + i); } |