Ver Fonte

[C][2015][Day_3] Adding Naive Solution for Part 1

Vinicius Teshima há 1 ano atrás
pai
commit
2bd65a8c79
2 ficheiros alterados com 102 adições e 0 exclusões
  1. 1 0
      C/2015/Day_3/Makefile
  2. 101 0
      C/2015/Day_3/main.c

+ 1 - 0
C/2015/Day_3/Makefile

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

+ 101 - 0
C/2015/Day_3/main.c

@@ -0,0 +1,101 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+#define IMP
+#include "../../file.h"
+#include "../../str.h"
+
+#define BL_MIN(v1, v2) ((((v1) >= (v2)) * (v2)) + (((v1) < (v2)) * (v1)))
+#define BL_MAX(v1, v2) ((((v1) >= (v2)) * (v1)) + (((v1) < (v2)) * (v2)))
+
+struct point {
+	long x, y;
+};
+
+int
+main(int argc, char *argv[])
+{
+	enum file_err ferr;
+	long res = 0;
+
+	size_t i = 0;
+	size_t j = 0;
+
+	struct point p = {0};
+	struct point *points = NULL;
+	size_t points_size = 1;
+
+	struct str str_input = {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);
+
+	points = calloc(str_input.size + 1, sizeof(*points));
+
+	{
+		for ( i = 0; i < str_input.size; ++i ) {
+			struct point *it = (points + i + 1);
+			p = points[i];
+
+			*it = p;
+			switch ( str_input.data[i] ) {
+			case '>':
+				++it->x;
+				break;
+			case '^':
+				--it->y;
+				break;
+			case '<':
+				--it->x;
+				break;
+			case 'v':
+				++it->y;
+				break;
+			}
+			++points_size;
+		}
+	}
+
+	if ( argc == 1 ) {
+		struct point *uniqs = NULL;
+		size_t uniqs_size = 0;
+		uniqs = calloc(points_size, sizeof(*uniqs));
+
+		for ( i = 0; i < points_size; ++i ) {
+			p = points[i];
+			for ( j = 0; j < uniqs_size; ++j ) {
+				if ( uniqs[j].x == p.x && uniqs[j].y == p.y ) {
+					goto outer_continue;
+				}
+			}
+			uniqs[uniqs_size++] = p;
+outer_continue:		;
+		}
+
+		res = (long) uniqs_size;
+
+		free(uniqs);
+	} else {
+	}
+
+	printf("Result: %ld\n", res);
+
+	free(points);
+
+	free(raw_input);
+
+	(void) argc; (void) argv;
+	return 0;
+}