|
@@ -0,0 +1,93 @@
|
|
|
|
|
+#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;
|
|
|
|
|
+}
|