mid-kid
6 years ago
3 changed files with 56 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||
CFLAGS := -Wall -Wextra -std=c17 -D_GNU_SOURCE |
|||
|
|||
LIBS := glib-2.0 |
|||
CFLAGS += $(shell pkg-config --cflags $(LIBS)) |
|||
LDLIBS := $(shell pkg-config --libs $(LIBS)) |
|||
|
|||
.PHONY: all |
|||
all: main |
|||
|
|||
.PHONY: clean |
|||
clean: |
|||
rm -f main |
File diff suppressed because one or more lines are too long
@ -0,0 +1,43 @@ |
|||
#include <stdio.h> |
|||
|
|||
#include <glib.h> |
|||
|
|||
int result = 0; |
|||
|
|||
gchar **parse_node(gchar **node) |
|||
{ |
|||
int children = strtol(*node++, NULL, 0); |
|||
int metadata = strtol(*node++, NULL, 0); |
|||
|
|||
for (int i = 0; i < children; i++) { |
|||
node = parse_node(node); |
|||
} |
|||
|
|||
for (int i = 0; i < metadata; i++) { |
|||
result += strtol(*node++, NULL, 0); |
|||
} |
|||
|
|||
return node; |
|||
} |
|||
|
|||
int main() |
|||
{ |
|||
gchar *contents; |
|||
gchar **strings; |
|||
GError *err = NULL; |
|||
|
|||
g_file_get_contents("input", &contents, NULL, &err); |
|||
if (err) { |
|||
fprintf(stderr, "%s\n", err->message); |
|||
g_error_free(err); |
|||
return 1; |
|||
} |
|||
strings = g_strsplit(contents, " ", -1); |
|||
g_free(contents); |
|||
|
|||
parse_node(strings); |
|||
printf("%d\n", result); |
|||
|
|||
g_free(strings); |
|||
return 0; |
|||
} |
Loading…
Reference in new issue