Эх сурвалжийг харах

[2015][c][Day_2] Adding Solution to Part 1

Vinicius Teshima 1 жил өмнө
parent
commit
349d582b94

+ 1 - 0
2015/c/Day_2/Makefile

@@ -0,0 +1 @@
+../Makefile

+ 93 - 0
2015/c/Day_2/main.c

@@ -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;
+}