| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #define IMP
- #include "../file.h"
- #include "../str.h"
- struct rect {
- long l;
- long w;
- long h;
- };
- #define BL_MIN(v1, v2) ((((v1) >= (v2)) * (v2)) + (((v1) < (v2)) * (v1)))
- int
- main(int argc, char *argv[])
- {
- enum file_err ferr;
- long res = 0;
- size_t i = 0;
- struct rect r = {0};
- struct str str_input = {0};
- size_t num_lines = 0;
- struct rect *rects = NULL;
- size_t rects_size = 0;
- char *raw_input = NULL;
- size_t raw_input_size = 0;
- raw_input = (char *) file_read_all("./input.txt",
- &raw_input_size,
- &ferr);
- if ( ferr != FILE_ERR_OK ) {
- fprintf(stderr, "Failed to open file: %s\n",
- file_err_to_cstr(ferr));
- exit(EXIT_FAILURE);
- }
- str_input = str_from_cstr(raw_input, raw_input_size);
- num_lines = str_count_char(str_input, '\n');
- rects = calloc(num_lines, sizeof(*rects));
- {
- struct str_tokenizer st = str_tokenize(str_input, '\n');
- struct str str = str_tokenizer_next(&st);
- while ( str.size != (size_t) -1 ) {
- char *nstr = (char *) str.data;
- r.l = strtol(nstr, &nstr, 10);
- r.w = strtol(++nstr, &nstr, 10);
- r.h = strtol(++nstr, NULL, 10);
- rects[rects_size++] = r;
- str = str_tokenizer_next(&st);
- }
- }
- if ( argc == 1 ) {
- long s1 = 0;
- long s2 = 0;
- long s3 = 0;
- long m1 = 0;
- for ( i = 0; i < rects_size; ++i ) {
- r = rects[i];
- s1 = r.l * r.w;
- s2 = r.w * r.h;
- s3 = r.h * r.l;
- m1 = BL_MIN(s2, s3);
- res += (s1 * 2) + (s2 * 2) + (s3 * 2) + BL_MIN(s1, m1);
- }
- } else {
- }
- printf("Result: %ld\n", res);
- free(rects);
- free(raw_input);
- (void) argc; (void) argv;
- return 0;
- }
|