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