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