commit
						4299855be7
					
				 22 changed files with 4211 additions and 0 deletions
			
			
		@ -0,0 +1,8 @@ | 
				
			|||||
 | 
					CFLAGS := -Wall -Wextra -std=c17 -D_GNU_SOURCE | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.PHONY: all | 
				
			||||
 | 
					all: main | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.PHONY: clean | 
				
			||||
 | 
					clean: | 
				
			||||
 | 
						rm -f main | 
				
			||||
								
									
										File diff suppressed because it is too large
									
								
							
						
					
								
									Binary file not shown.
								
							
						
					@ -0,0 +1,25 @@ | 
				
			|||||
 | 
					#include <stdlib.h> | 
				
			||||
 | 
					#include <stdio.h> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					int main() | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    int value = 0; | 
				
			||||
 | 
					    char *line = NULL; | 
				
			||||
 | 
					    size_t line_len = 0; | 
				
			||||
 | 
					    FILE *f = fopen("input", "r"); | 
				
			||||
 | 
					    if (!f) { | 
				
			||||
 | 
					        perror("input"); | 
				
			||||
 | 
					        return 1; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    while (getline(&line, &line_len, f) != -1) { | 
				
			||||
 | 
					        long number = strtol(line, NULL, 0); | 
				
			||||
 | 
					        value += number; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    printf("%d\n", value); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    free(line); | 
				
			||||
 | 
					    fclose(f); | 
				
			||||
 | 
					    return 0; | 
				
			||||
 | 
					} | 
				
			||||
@ -0,0 +1,7 @@ | 
				
			|||||
 | 
					value = 0 | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					for line in io.lines("input") do | 
				
			||||
 | 
					    value = value + tonumber(line) | 
				
			||||
 | 
					end | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					print(value) | 
				
			||||
@ -0,0 +1,16 @@ | 
				
			|||||
 | 
					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 main_hash | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.PHONY: clean | 
				
			||||
 | 
					clean: | 
				
			||||
 | 
						rm -f main main_hash | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					main_hash: CFLAGS += -DUSE_HASH | 
				
			||||
 | 
					main_hash: main.c | 
				
			||||
 | 
						$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@ | 
				
			||||
								
									
										File diff suppressed because it is too large
									
								
							
						
					
								
									Binary file not shown.
								
							
						
					@ -0,0 +1,75 @@ | 
				
			|||||
 | 
					#include <stdlib.h> | 
				
			||||
 | 
					#include <stdio.h> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#include <glib.h> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					/*
 | 
				
			||||
 | 
					 * Apparently using a hash table for this is much faster... | 
				
			||||
 | 
					 * | 
				
			||||
 | 
					 * $ time ./main | 
				
			||||
 | 
					 * 69285 | 
				
			||||
 | 
					 * ./main  271,27s user 0,11s system 99% cpu 4:33,04 total | 
				
			||||
 | 
					 * $ time ./main_hash | 
				
			||||
 | 
					 * 69285 | 
				
			||||
 | 
					 * ./main_hash  0,13s user 0,02s system 98% cpu 0,156 total | 
				
			||||
 | 
					 */  | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#ifndef USE_HASH | 
				
			||||
 | 
					gpointer g_array_lookup(GArray *array, gpointer item, guint size) | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    for (gchar *i = array->data; i < array->data + array->len * size; i += size) { | 
				
			||||
 | 
					        if (memcmp(i, item, size) == 0) { | 
				
			||||
 | 
					            return i; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    return NULL; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					#endif | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					int main() | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    long value = 0; | 
				
			||||
 | 
					    char *line = NULL; | 
				
			||||
 | 
					    size_t line_len = 0; | 
				
			||||
 | 
					    FILE *f = fopen("input", "r"); | 
				
			||||
 | 
					    if (!f) { | 
				
			||||
 | 
					        perror("input"); | 
				
			||||
 | 
					        return 1; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#ifdef USE_HASH | 
				
			||||
 | 
					    GHashTable *hash = g_hash_table_new(g_direct_hash, g_direct_equal); | 
				
			||||
 | 
					    g_hash_table_insert(hash, GINT_TO_POINTER(value), GINT_TO_POINTER(TRUE)); | 
				
			||||
 | 
					#else | 
				
			||||
 | 
					    GArray *array = g_array_new(FALSE, FALSE, sizeof(long)); | 
				
			||||
 | 
					    g_array_append_val(array, value); | 
				
			||||
 | 
					#endif | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    while (1) { | 
				
			||||
 | 
					        rewind(f); | 
				
			||||
 | 
					        while (getline(&line, &line_len, f) != -1) { | 
				
			||||
 | 
					            long number = strtol(line, NULL, 0); | 
				
			||||
 | 
					            value += number; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#ifdef USE_HASH | 
				
			||||
 | 
					            if (g_hash_table_lookup(hash, GINT_TO_POINTER(value))) goto found; | 
				
			||||
 | 
					            g_hash_table_insert(hash, GINT_TO_POINTER(value), GINT_TO_POINTER(TRUE)); | 
				
			||||
 | 
					#else | 
				
			||||
 | 
					            if (g_array_lookup(array, &value, sizeof(long))) goto found; | 
				
			||||
 | 
					            g_array_append_val(array, value); | 
				
			||||
 | 
					#endif | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					found: | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    printf("%ld\n", value); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#ifdef USE_HASH | 
				
			||||
 | 
					    g_hash_table_destroy(hash); | 
				
			||||
 | 
					#else | 
				
			||||
 | 
					    g_array_free(array, TRUE); | 
				
			||||
 | 
					#endif | 
				
			||||
 | 
					    free(line); | 
				
			||||
 | 
					    fclose(f); | 
				
			||||
 | 
					    return 0; | 
				
			||||
 | 
					} | 
				
			||||
								
									Binary file not shown.
								
							
						
					@ -0,0 +1,8 @@ | 
				
			|||||
 | 
					CFLAGS := -Wall -Wextra -std=c17 -D_GNU_SOURCE | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.PHONY: all | 
				
			||||
 | 
					all: main | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					.PHONY: clean | 
				
			||||
 | 
					clean: | 
				
			||||
 | 
						rm -f main | 
				
			||||
@ -0,0 +1,250 @@ | 
				
			|||||
 | 
					wkzhyfdpluzeqvajtbbosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajtbioskfksc | 
				
			||||
 | 
					wrzhyfdolumyqvajtbiosngkxs | 
				
			||||
 | 
					urzhyfdplbmeqvrjtbiosngkxc | 
				
			||||
 | 
					wrzhyfrulumeqvajtbiosngkxf | 
				
			||||
 | 
					wrzhnfdprumvqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfpplumeivajtbiosrgkxc | 
				
			||||
 | 
					wrzhybdplumeqvaftbiosxgkxc | 
				
			||||
 | 
					wrzgyfdplumeqvaltbiosngcxc | 
				
			||||
 | 
					wrzhbfdzlumeqvajtbipsngkxc | 
				
			||||
 | 
					wrzhyfdplumwqeajtbiosngxxc | 
				
			||||
 | 
					wrzhyddplumeqvajtbimsngkxo | 
				
			||||
 | 
					wrzhyfdplumsqdajtfiosngkxc | 
				
			||||
 | 
					wrzvyfdplumeqjajtbkosngkxc | 
				
			||||
 | 
					wrzhyfddlumeqvujtbiosngxxc | 
				
			||||
 | 
					nrzhywdplumeqvajtbtosngkxc | 
				
			||||
 | 
					wzzhyfdplomeqvdjtbiosngkxc | 
				
			||||
 | 
					urzhyfdplumeqvaatbiosngkxb | 
				
			||||
 | 
					wtzyyfdplumeqvajtbiosngkxl | 
				
			||||
 | 
					wrzhyfdhlumnqvajebiosngkxc | 
				
			||||
 | 
					wrzhyfdplumpqvajtbiosnyjxc | 
				
			||||
 | 
					wrzdyfdplumeqvajtviospgkxc | 
				
			||||
 | 
					wrzhyfdplzmeqvajtbiosegfxc | 
				
			||||
 | 
					wrzhyfdglumkqvajtwiosngkxc | 
				
			||||
 | 
					wrzhtfdplgmeqvaqtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajxpiosngexc | 
				
			||||
 | 
					frzhyfdplvmeqvajtbiosngkxp | 
				
			||||
 | 
					wrzhyfkplumeqvajtbfosngkpc | 
				
			||||
 | 
					irzhyfqplumeqvajtbiosngktc | 
				
			||||
 | 
					wrzhyfdpluvoqvajtbioingkxc | 
				
			||||
 | 
					wrzhyfdplumemvautbuosngkxc | 
				
			||||
 | 
					wfzhyflplumeqvijtbiosngkxc | 
				
			||||
 | 
					wrzhyfdglumeqvzjkbiosngkxc | 
				
			||||
 | 
					wrzcyfdplaneqvajtbiosngkxc | 
				
			||||
 | 
					wrzhbfdplumeqwajtbiosngpxc | 
				
			||||
 | 
					szdhyfdplumeqvajtbiosngkxc | 
				
			||||
 | 
					krzhyfdplumeqvajtxilsngkxc | 
				
			||||
 | 
					brzhyfmplumexvajtbiosngkxc | 
				
			||||
 | 
					wrzhyvdplumeqvajtbiosiglxc | 
				
			||||
 | 
					orzhyfdplumeqvaotbcosngkxc | 
				
			||||
 | 
					hrzhyfdplumeqvaptbiocngkxc | 
				
			||||
 | 
					wwzhyfdklummqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdppymeqvvjtbiosngkxc | 
				
			||||
 | 
					wsehyudplumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyzpplumeqvajtbioscgkxc | 
				
			||||
 | 
					wrzhyfqpyumeqvajtbiusngkxc | 
				
			||||
 | 
					urzhyfdpdumeqmajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdrlumxqvajtbiosnakxc | 
				
			||||
 | 
					wrthyfdplumeskajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplymeqvajtbiesbgkxc | 
				
			||||
 | 
					wrzhyfdqlumeqyajtciosngkxc | 
				
			||||
 | 
					trzhsfdplumeqyajtbiosngkxc | 
				
			||||
 | 
					wpzhyfdplimeqvajtbiosngfxc | 
				
			||||
 | 
					wrzhhfdplrmeqvajtbiosngkxx | 
				
			||||
 | 
					wrzhycdpgumeqvajtbioslgkxc | 
				
			||||
 | 
					wrzhyfdelumeqvajgtiosngkxc | 
				
			||||
 | 
					wrzhyfdplutebvajtbiosygkxc | 
				
			||||
 | 
					wrzhyfdplukeqvajtbiorngkec | 
				
			||||
 | 
					erzhyfdilumeqvajwbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumnivxjtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumebvajtoiovngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajtbtosnwkxe | 
				
			||||
 | 
					wrzhyfxplumevvajtciosngkxc | 
				
			||||
 | 
					wbzhyfdxlumeqvajtriosngkxc | 
				
			||||
 | 
					wrzyyfdplumeqvajmbiosngkxb | 
				
			||||
 | 
					wfthyfdplumeqvajtbiosngkdc | 
				
			||||
 | 
					wrzhuedplumeqvajtbgosngkxc | 
				
			||||
 | 
					wrzhifdplumeqvajtsrosngkxc | 
				
			||||
 | 
					wrzhyfdplumqqvajtaiosngkac | 
				
			||||
 | 
					krzhyfvvlumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplzmeqqajtbiosngkvc | 
				
			||||
 | 
					wrzhyfqplumeqvajtbiosngdxy | 
				
			||||
 | 
					wrzhyfdpluieqvajtbiosngjjc | 
				
			||||
 | 
					wrzhyfdvlumeqrajdbiosngkxc | 
				
			||||
 | 
					wrzhcfdpxumeqvajtbiotngkxc | 
				
			||||
 | 
					wrzhyfdprumeqvaitbiosngexc | 
				
			||||
 | 
					wrzhygdplumeqvpjtbiasngkxc | 
				
			||||
 | 
					wrzhyndplumeqvajtpiosngkoc | 
				
			||||
 | 
					wrzhyfdplumedvajtriowngkxc | 
				
			||||
 | 
					wezjyndplumeqvajtbiosngkxc | 
				
			||||
 | 
					wrmhyfdplumewiajtbiosngkxc | 
				
			||||
 | 
					wrztyfdplumeqnajtbiobngkxc | 
				
			||||
 | 
					wrzhyfdpyumeqvajjbijsngkxc | 
				
			||||
 | 
					wrfhyfdplumeqkajtbiosnqkxc | 
				
			||||
 | 
					wrzhyfdpllmezvartbiosngkxc | 
				
			||||
 | 
					wszhyfdplumeqeajtbiqsngkxc | 
				
			||||
 | 
					wrzhyfdplumeqwajtbnosnikxc | 
				
			||||
 | 
					wrzvyfqulumeqvajtbiosngkxc | 
				
			||||
 | 
					drzhyfdplureqvajtbiqsngkxc | 
				
			||||
 | 
					wrzhyfdplumeqjamtbigsngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajbbiosngzrc | 
				
			||||
 | 
					grzhyfdpuumeqvajtbicsngkxc | 
				
			||||
 | 
					wrrhyfdplumeqvajtgiosnggxc | 
				
			||||
 | 
					wrzhyfkplumvqvajtbiosnhkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajtbicspgkxa | 
				
			||||
 | 
					wrzhyfdplumeqvajtiiosnggoc | 
				
			||||
 | 
					wfzhyfdplumyqvaytbiosngkxc | 
				
			||||
 | 
					wrzhyfdpcumeqvajtbibsnfkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajtbigsnzkmc | 
				
			||||
 | 
					wrzhyfdplcmeqvqjtriosngkxc | 
				
			||||
 | 
					wrzhypdplwmeqvajtbiosnvkxc | 
				
			||||
 | 
					wrziyfdmlumeqvaatbiosngkxc | 
				
			||||
 | 
					wkzhyfdplsmeqvajobiosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvkjvliosngkxc | 
				
			||||
 | 
					wzzbyfdplumeqvajtbiolngkxc | 
				
			||||
 | 
					wrzhyfdplvweqvajtbipsngkxc | 
				
			||||
 | 
					wrzhyvdplumeqvujtbiosnfkxc | 
				
			||||
 | 
					wrbhyfdplumedvajtbiosnhkxc | 
				
			||||
 | 
					wrzhofdplumeqvajtbiosnskxy | 
				
			||||
 | 
					wrzhyfdplumeqvaetbiohwgkxc | 
				
			||||
 | 
					wezhyfoplumeqvajtbiosngmxc | 
				
			||||
 | 
					wrzhykdblumeqvajtbiosngkjc | 
				
			||||
 | 
					wrzhyddplwmeqvajtbioungkxc | 
				
			||||
 | 
					wrzhyldplumqqvajpbiosngkxc | 
				
			||||
 | 
					wrzhyfdtlumeqvajtbiusngkcc | 
				
			||||
 | 
					wrzhyfdilumeqvajtbiosdgkxk | 
				
			||||
 | 
					wrvhywdplumeqvajtbiosngoxc | 
				
			||||
 | 
					wrzhyfdpyumeqvajtkiomngkxc | 
				
			||||
 | 
					wrzhyfdpbummqvajtbiosngcxc | 
				
			||||
 | 
					wrzhyfdpljmeqvajlbiosngjxc | 
				
			||||
 | 
					wrzhyfdpmuieqdajtbiosngkxc | 
				
			||||
 | 
					wrzgrfdplumeqvaktbiosngkxc | 
				
			||||
 | 
					wrzhgrdpluueqvajtbiosngkxc | 
				
			||||
 | 
					wazhyfdplhmeqvaqtbiosngkxc | 
				
			||||
 | 
					wruhyfdplumeqvujtliosngkxc | 
				
			||||
 | 
					wrzvyfdslumeqvajtbiwsngkxc | 
				
			||||
 | 
					wrzhyfdplumeivactbiosqgkxc | 
				
			||||
 | 
					wrzpyfdpbumeqvajtbioszgkxc | 
				
			||||
 | 
					bgzhyfdplumeyvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfkplumeqvajtbiotngkxh | 
				
			||||
 | 
					wrdhyfhplumexvajtbiosngkxc | 
				
			||||
 | 
					brzhyfdpgumeqvgjtbiosngkxc | 
				
			||||
 | 
					arzhqfdpeumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyftplumeqvajfbiosnykxc | 
				
			||||
 | 
					wrzhyfdpcumeqvartbtosngkxc | 
				
			||||
 | 
					wrzhvfzplumdqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdjlumeqvaetbiosjgkxc | 
				
			||||
 | 
					wrbhyfdplumeqvajjjiosngkxc | 
				
			||||
 | 
					wrxhyfdplumeqvajtbiyskgkxc | 
				
			||||
 | 
					wpzhyydplumeqvajtbiosqgkxc | 
				
			||||
 | 
					wrzhyfdplumzqvajtbzoongkxc | 
				
			||||
 | 
					crzhyfdplnmeqvajtbjosngkxc | 
				
			||||
 | 
					wrzhyfdpluveusajtbiosngkxc | 
				
			||||
 | 
					wrzhypdpluyecvajtbiosngkxc | 
				
			||||
 | 
					wrnhyfdplumeqvajtbioengoxc | 
				
			||||
 | 
					wrzhypdplumefvajybiosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvattviosngkdc | 
				
			||||
 | 
					wrzhyfdplqmeqbajtbiostgkxc | 
				
			||||
 | 
					wrghyfdpluveqvajtbiosngkxn | 
				
			||||
 | 
					wryhyfdplumeqvajrbiopngkxc | 
				
			||||
 | 
					wrzhyqdplumeqvajtbiwsngkxt | 
				
			||||
 | 
					wrmoyfdpluheqvajtbiosngkxc | 
				
			||||
 | 
					wrghyfdnlumeqvyjtbiosngkxc | 
				
			||||
 | 
					wrzpyfdplumevvaatbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumhqvajtbiodngxxc | 
				
			||||
 | 
					wrzhyfdplumeqcajtbioyjgkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajabirsngkgc | 
				
			||||
 | 
					wrzhtfnplukeqvajtbiosngkxc | 
				
			||||
 | 
					wqzhyfdplumeqvajtbiopegkxc | 
				
			||||
 | 
					lrzhzfdplumeqdajtbiosngkxc | 
				
			||||
 | 
					wrzzyfdplumeqvajnkiosngkxc | 
				
			||||
 | 
					wrzhyfdflmmeqvajmbiosngkxc | 
				
			||||
 | 
					wrzoyfdplumeqvjjtpiosngkxc | 
				
			||||
 | 
					wrzhyfdpmpmeqvajhbiosngkxc | 
				
			||||
 | 
					krvhyfdplumeqvajtbiossgkxc | 
				
			||||
 | 
					wrzhyfdplumeqvaetviosnmkxc | 
				
			||||
 | 
					wrzhyfzclumeqvajtbiosngwxc | 
				
			||||
 | 
					wrzhyfdpvumeqvajtbiosngkcv | 
				
			||||
 | 
					wrzhyfdpoumeqvajtbiozngoxc | 
				
			||||
 | 
					wrzhyfwglumeqvajtbxosngkxc | 
				
			||||
 | 
					wrshyfdplumeqiajtbiosngklc | 
				
			||||
 | 
					wrzhyfdptdmeqvajtziosngkxc | 
				
			||||
 | 
					wrwhyfdplumeqqajtbiosngkxj | 
				
			||||
 | 
					wrzlyfypldmeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajtbirknikxc | 
				
			||||
 | 
					wrzhyhdplumeqvajtbmosnbkxc | 
				
			||||
 | 
					wyzhyfiplumeqvwjtbiosngkxc | 
				
			||||
 | 
					wrzgyfsplumeqvajtziosngkxc | 
				
			||||
 | 
					wrzhrfdllumepvajtbiosngkxc | 
				
			||||
 | 
					wrzayfdplumeqvajtbiosqgktc | 
				
			||||
 | 
					whzhyfdplemnqvajtbiosngkxc | 
				
			||||
 | 
					wazhyfdplumeqvaptbioongkxc | 
				
			||||
 | 
					wrzhyfdpluueqvajtbiosnglvc | 
				
			||||
 | 
					wrzhyfdplumjqvajmbionngkxc | 
				
			||||
 | 
					wrzhofdplvmeqvajtbiosnqkxc | 
				
			||||
 | 
					wrzhfidpluzeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhlfdpcumeqvaatbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumewvajtbiosigkoc | 
				
			||||
 | 
					wrzjyfdplwmeqvajtbiodngkxc | 
				
			||||
 | 
					wrzhyfdplumeqnsjtniosngkxc | 
				
			||||
 | 
					wrzxyfdplxmeqvajtbiosngkdc | 
				
			||||
 | 
					wrzhyfdplumpqvartbuosngkxc | 
				
			||||
 | 
					orzhyfdplumeqzsjtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumebvawtbiosngkxt | 
				
			||||
 | 
					wrztyfdulumeqvajtbiosngkxy | 
				
			||||
 | 
					wrzhytdplumeqvajtbznsngkxc | 
				
			||||
 | 
					wrzhvfdplumeqvajtbinsngkxu | 
				
			||||
 | 
					wezmyfdplumeqvajhbiosngkxc | 
				
			||||
 | 
					wrzhhftplumeqvajtaiosngkxc | 
				
			||||
 | 
					wrzhyfgplumeqvajtbioskgjxc | 
				
			||||
 | 
					ujuhyfdplumeqvajtbiosngkxc | 
				
			||||
 | 
					wryhymdplumeqvaftbiosngkxc | 
				
			||||
 | 
					wrzhygdplumeqvajibiosfgkxc | 
				
			||||
 | 
					frzhyfdppumeqvavtbiosngkxc | 
				
			||||
 | 
					wruhyfdylumeqvajzbiosngkxc | 
				
			||||
 | 
					wrzhzfdplumeqvajtbwosygkxc | 
				
			||||
 | 
					wrzhyfdplumeqvaeteiojngkxc | 
				
			||||
 | 
					wrhhyfdplumeqvajtiiopngkxc | 
				
			||||
 | 
					irzhyfdplumeqvajtbiosngryc | 
				
			||||
 | 
					wrvhycdpzumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumyqwajtboosngkxc | 
				
			||||
 | 
					wrzthfdplumeqvajtbioengkxc | 
				
			||||
 | 
					mrzhyfdalumeqvajtbiosngcxc | 
				
			||||
 | 
					wrzhyfdflumpqvajtbiosngkmc | 
				
			||||
 | 
					wrzhyfxplumeqvajtbiosnvkxo | 
				
			||||
 | 
					wrzhyfdglumeqvajtbiosnfkxu | 
				
			||||
 | 
					wrzhyfdnrumeqpajtbiosngkxc | 
				
			||||
 | 
					wrzhlipplumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhkfdplumemvajtbiohngkxc | 
				
			||||
 | 
					wrziyfdmlumeqvaatbiosngkoc | 
				
			||||
 | 
					wrzhyfdplwceqvajtbiosngzxc | 
				
			||||
 | 
					wrzhyfdplumpqvactbiosngixc | 
				
			||||
 | 
					wdzhyfdhdumeqvajtbiosngkxc | 
				
			||||
 | 
					wnzhyfdplumeqvajtbbosngrxc | 
				
			||||
 | 
					wrzhyfdblumeqvajtbiosngvxw | 
				
			||||
 | 
					wyzhyfxpkumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhywdplumjqvajgbiosngkxc | 
				
			||||
 | 
					wrzhyfdpxumhqvajtbiokngkxc | 
				
			||||
 | 
					wrzhxfpplumeqvajtbiosngkxk | 
				
			||||
 | 
					mrzhyfdplumeqkajubiosngkxc | 
				
			||||
 | 
					drzhyfdplumeqvajtbioingnxc | 
				
			||||
 | 
					wrekyfdplumeqvajtbidsngkxc | 
				
			||||
 | 
					wrzhyfdplumeanyjtbiosngkxc | 
				
			||||
 | 
					wrzhyddpluzeqvajtbiosngtxc | 
				
			||||
 | 
					wrzfyfdplumeqvaqtbiosngkxr | 
				
			||||
 | 
					wrghywdpluneqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplueeqvaptbioyngkxc | 
				
			||||
 | 
					wrzhyqdpllmeqvajtbiosngdxc | 
				
			||||
 | 
					whzhyfdxlumeqvajtbiosngksc | 
				
			||||
 | 
					wrzjyfdplumeqvuitbiosngkxc | 
				
			||||
 | 
					brzhyfdplumeqhajtbiolngkxc | 
				
			||||
 | 
					wrzhyfqclureqvajtbiosngkxc | 
				
			||||
 | 
					wwzhpfdplureqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvavebijsngkxc | 
				
			||||
 | 
					wrzhyfdpuumeqvajtsiosnkkxc | 
				
			||||
 | 
					wrxhyfuplumeqvajtbiosngpxc | 
				
			||||
 | 
					wrzhyfdplumeqvujlbiospgkxc | 
				
			||||
 | 
					wrzvyfdplumeqvajtbiwsngpxc | 
				
			||||
 | 
					wrzhyndplumeqvajtbiwsnekxc | 
				
			||||
 | 
					wrzhkfdpoumeqvautbiosngkxc | 
				
			||||
								
									Binary file not shown.
								
							
						
					@ -0,0 +1,57 @@ | 
				
			|||||
 | 
					#include <stdlib.h> | 
				
			||||
 | 
					#include <stdio.h> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					int compare_char(const void *a, const void *b) | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    return *(const char *)a - *(const char *)b; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					char find_reoccurrence(const char *array, const ssize_t len, const int times) | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    if (!len) return 0; | 
				
			||||
 | 
					    if (!times) return 0; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    char current = *array; | 
				
			||||
 | 
					    int count = 0; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    for (const char *i = array; i < array + len; i++) { | 
				
			||||
 | 
					        if (*i == current) { | 
				
			||||
 | 
					            count++; | 
				
			||||
 | 
					            continue; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					        if (count == times) return current; | 
				
			||||
 | 
					        current = *i; | 
				
			||||
 | 
					        count = 1; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    return count == times ? current : 0; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					int main() | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    char *line = NULL; | 
				
			||||
 | 
					    size_t line_len = 0; | 
				
			||||
 | 
					    ssize_t len = 0; | 
				
			||||
 | 
					    FILE *f = fopen("input", "r"); | 
				
			||||
 | 
					    if (!f) { | 
				
			||||
 | 
					        perror("input"); | 
				
			||||
 | 
					        return 1; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    int twice = 0; | 
				
			||||
 | 
					    int thrice = 0; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    while ((len = getline(&line, &line_len, f)) != -1) { | 
				
			||||
 | 
					        while (line[len - 1] == '\n') line[--len] = '\0'; | 
				
			||||
 | 
					        qsort(line, len, sizeof(char), compare_char); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        if (find_reoccurrence(line, len, 2)) twice++; | 
				
			||||
 | 
					        if (find_reoccurrence(line, len, 3)) thrice++; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    printf("%d\n", twice * thrice); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    free(line); | 
				
			||||
 | 
					    fclose(f); | 
				
			||||
 | 
					    return 0; | 
				
			||||
 | 
					} | 
				
			||||
@ -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 | 
				
			||||
@ -0,0 +1,250 @@ | 
				
			|||||
 | 
					wkzhyfdpluzeqvajtbbosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajtbioskfksc | 
				
			||||
 | 
					wrzhyfdolumyqvajtbiosngkxs | 
				
			||||
 | 
					urzhyfdplbmeqvrjtbiosngkxc | 
				
			||||
 | 
					wrzhyfrulumeqvajtbiosngkxf | 
				
			||||
 | 
					wrzhnfdprumvqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfpplumeivajtbiosrgkxc | 
				
			||||
 | 
					wrzhybdplumeqvaftbiosxgkxc | 
				
			||||
 | 
					wrzgyfdplumeqvaltbiosngcxc | 
				
			||||
 | 
					wrzhbfdzlumeqvajtbipsngkxc | 
				
			||||
 | 
					wrzhyfdplumwqeajtbiosngxxc | 
				
			||||
 | 
					wrzhyddplumeqvajtbimsngkxo | 
				
			||||
 | 
					wrzhyfdplumsqdajtfiosngkxc | 
				
			||||
 | 
					wrzvyfdplumeqjajtbkosngkxc | 
				
			||||
 | 
					wrzhyfddlumeqvujtbiosngxxc | 
				
			||||
 | 
					nrzhywdplumeqvajtbtosngkxc | 
				
			||||
 | 
					wzzhyfdplomeqvdjtbiosngkxc | 
				
			||||
 | 
					urzhyfdplumeqvaatbiosngkxb | 
				
			||||
 | 
					wtzyyfdplumeqvajtbiosngkxl | 
				
			||||
 | 
					wrzhyfdhlumnqvajebiosngkxc | 
				
			||||
 | 
					wrzhyfdplumpqvajtbiosnyjxc | 
				
			||||
 | 
					wrzdyfdplumeqvajtviospgkxc | 
				
			||||
 | 
					wrzhyfdplzmeqvajtbiosegfxc | 
				
			||||
 | 
					wrzhyfdglumkqvajtwiosngkxc | 
				
			||||
 | 
					wrzhtfdplgmeqvaqtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajxpiosngexc | 
				
			||||
 | 
					frzhyfdplvmeqvajtbiosngkxp | 
				
			||||
 | 
					wrzhyfkplumeqvajtbfosngkpc | 
				
			||||
 | 
					irzhyfqplumeqvajtbiosngktc | 
				
			||||
 | 
					wrzhyfdpluvoqvajtbioingkxc | 
				
			||||
 | 
					wrzhyfdplumemvautbuosngkxc | 
				
			||||
 | 
					wfzhyflplumeqvijtbiosngkxc | 
				
			||||
 | 
					wrzhyfdglumeqvzjkbiosngkxc | 
				
			||||
 | 
					wrzcyfdplaneqvajtbiosngkxc | 
				
			||||
 | 
					wrzhbfdplumeqwajtbiosngpxc | 
				
			||||
 | 
					szdhyfdplumeqvajtbiosngkxc | 
				
			||||
 | 
					krzhyfdplumeqvajtxilsngkxc | 
				
			||||
 | 
					brzhyfmplumexvajtbiosngkxc | 
				
			||||
 | 
					wrzhyvdplumeqvajtbiosiglxc | 
				
			||||
 | 
					orzhyfdplumeqvaotbcosngkxc | 
				
			||||
 | 
					hrzhyfdplumeqvaptbiocngkxc | 
				
			||||
 | 
					wwzhyfdklummqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdppymeqvvjtbiosngkxc | 
				
			||||
 | 
					wsehyudplumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyzpplumeqvajtbioscgkxc | 
				
			||||
 | 
					wrzhyfqpyumeqvajtbiusngkxc | 
				
			||||
 | 
					urzhyfdpdumeqmajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdrlumxqvajtbiosnakxc | 
				
			||||
 | 
					wrthyfdplumeskajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplymeqvajtbiesbgkxc | 
				
			||||
 | 
					wrzhyfdqlumeqyajtciosngkxc | 
				
			||||
 | 
					trzhsfdplumeqyajtbiosngkxc | 
				
			||||
 | 
					wpzhyfdplimeqvajtbiosngfxc | 
				
			||||
 | 
					wrzhhfdplrmeqvajtbiosngkxx | 
				
			||||
 | 
					wrzhycdpgumeqvajtbioslgkxc | 
				
			||||
 | 
					wrzhyfdelumeqvajgtiosngkxc | 
				
			||||
 | 
					wrzhyfdplutebvajtbiosygkxc | 
				
			||||
 | 
					wrzhyfdplukeqvajtbiorngkec | 
				
			||||
 | 
					erzhyfdilumeqvajwbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumnivxjtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumebvajtoiovngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajtbtosnwkxe | 
				
			||||
 | 
					wrzhyfxplumevvajtciosngkxc | 
				
			||||
 | 
					wbzhyfdxlumeqvajtriosngkxc | 
				
			||||
 | 
					wrzyyfdplumeqvajmbiosngkxb | 
				
			||||
 | 
					wfthyfdplumeqvajtbiosngkdc | 
				
			||||
 | 
					wrzhuedplumeqvajtbgosngkxc | 
				
			||||
 | 
					wrzhifdplumeqvajtsrosngkxc | 
				
			||||
 | 
					wrzhyfdplumqqvajtaiosngkac | 
				
			||||
 | 
					krzhyfvvlumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplzmeqqajtbiosngkvc | 
				
			||||
 | 
					wrzhyfqplumeqvajtbiosngdxy | 
				
			||||
 | 
					wrzhyfdpluieqvajtbiosngjjc | 
				
			||||
 | 
					wrzhyfdvlumeqrajdbiosngkxc | 
				
			||||
 | 
					wrzhcfdpxumeqvajtbiotngkxc | 
				
			||||
 | 
					wrzhyfdprumeqvaitbiosngexc | 
				
			||||
 | 
					wrzhygdplumeqvpjtbiasngkxc | 
				
			||||
 | 
					wrzhyndplumeqvajtpiosngkoc | 
				
			||||
 | 
					wrzhyfdplumedvajtriowngkxc | 
				
			||||
 | 
					wezjyndplumeqvajtbiosngkxc | 
				
			||||
 | 
					wrmhyfdplumewiajtbiosngkxc | 
				
			||||
 | 
					wrztyfdplumeqnajtbiobngkxc | 
				
			||||
 | 
					wrzhyfdpyumeqvajjbijsngkxc | 
				
			||||
 | 
					wrfhyfdplumeqkajtbiosnqkxc | 
				
			||||
 | 
					wrzhyfdpllmezvartbiosngkxc | 
				
			||||
 | 
					wszhyfdplumeqeajtbiqsngkxc | 
				
			||||
 | 
					wrzhyfdplumeqwajtbnosnikxc | 
				
			||||
 | 
					wrzvyfqulumeqvajtbiosngkxc | 
				
			||||
 | 
					drzhyfdplureqvajtbiqsngkxc | 
				
			||||
 | 
					wrzhyfdplumeqjamtbigsngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajbbiosngzrc | 
				
			||||
 | 
					grzhyfdpuumeqvajtbicsngkxc | 
				
			||||
 | 
					wrrhyfdplumeqvajtgiosnggxc | 
				
			||||
 | 
					wrzhyfkplumvqvajtbiosnhkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajtbicspgkxa | 
				
			||||
 | 
					wrzhyfdplumeqvajtiiosnggoc | 
				
			||||
 | 
					wfzhyfdplumyqvaytbiosngkxc | 
				
			||||
 | 
					wrzhyfdpcumeqvajtbibsnfkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajtbigsnzkmc | 
				
			||||
 | 
					wrzhyfdplcmeqvqjtriosngkxc | 
				
			||||
 | 
					wrzhypdplwmeqvajtbiosnvkxc | 
				
			||||
 | 
					wrziyfdmlumeqvaatbiosngkxc | 
				
			||||
 | 
					wkzhyfdplsmeqvajobiosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvkjvliosngkxc | 
				
			||||
 | 
					wzzbyfdplumeqvajtbiolngkxc | 
				
			||||
 | 
					wrzhyfdplvweqvajtbipsngkxc | 
				
			||||
 | 
					wrzhyvdplumeqvujtbiosnfkxc | 
				
			||||
 | 
					wrbhyfdplumedvajtbiosnhkxc | 
				
			||||
 | 
					wrzhofdplumeqvajtbiosnskxy | 
				
			||||
 | 
					wrzhyfdplumeqvaetbiohwgkxc | 
				
			||||
 | 
					wezhyfoplumeqvajtbiosngmxc | 
				
			||||
 | 
					wrzhykdblumeqvajtbiosngkjc | 
				
			||||
 | 
					wrzhyddplwmeqvajtbioungkxc | 
				
			||||
 | 
					wrzhyldplumqqvajpbiosngkxc | 
				
			||||
 | 
					wrzhyfdtlumeqvajtbiusngkcc | 
				
			||||
 | 
					wrzhyfdilumeqvajtbiosdgkxk | 
				
			||||
 | 
					wrvhywdplumeqvajtbiosngoxc | 
				
			||||
 | 
					wrzhyfdpyumeqvajtkiomngkxc | 
				
			||||
 | 
					wrzhyfdpbummqvajtbiosngcxc | 
				
			||||
 | 
					wrzhyfdpljmeqvajlbiosngjxc | 
				
			||||
 | 
					wrzhyfdpmuieqdajtbiosngkxc | 
				
			||||
 | 
					wrzgrfdplumeqvaktbiosngkxc | 
				
			||||
 | 
					wrzhgrdpluueqvajtbiosngkxc | 
				
			||||
 | 
					wazhyfdplhmeqvaqtbiosngkxc | 
				
			||||
 | 
					wruhyfdplumeqvujtliosngkxc | 
				
			||||
 | 
					wrzvyfdslumeqvajtbiwsngkxc | 
				
			||||
 | 
					wrzhyfdplumeivactbiosqgkxc | 
				
			||||
 | 
					wrzpyfdpbumeqvajtbioszgkxc | 
				
			||||
 | 
					bgzhyfdplumeyvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfkplumeqvajtbiotngkxh | 
				
			||||
 | 
					wrdhyfhplumexvajtbiosngkxc | 
				
			||||
 | 
					brzhyfdpgumeqvgjtbiosngkxc | 
				
			||||
 | 
					arzhqfdpeumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyftplumeqvajfbiosnykxc | 
				
			||||
 | 
					wrzhyfdpcumeqvartbtosngkxc | 
				
			||||
 | 
					wrzhvfzplumdqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdjlumeqvaetbiosjgkxc | 
				
			||||
 | 
					wrbhyfdplumeqvajjjiosngkxc | 
				
			||||
 | 
					wrxhyfdplumeqvajtbiyskgkxc | 
				
			||||
 | 
					wpzhyydplumeqvajtbiosqgkxc | 
				
			||||
 | 
					wrzhyfdplumzqvajtbzoongkxc | 
				
			||||
 | 
					crzhyfdplnmeqvajtbjosngkxc | 
				
			||||
 | 
					wrzhyfdpluveusajtbiosngkxc | 
				
			||||
 | 
					wrzhypdpluyecvajtbiosngkxc | 
				
			||||
 | 
					wrnhyfdplumeqvajtbioengoxc | 
				
			||||
 | 
					wrzhypdplumefvajybiosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvattviosngkdc | 
				
			||||
 | 
					wrzhyfdplqmeqbajtbiostgkxc | 
				
			||||
 | 
					wrghyfdpluveqvajtbiosngkxn | 
				
			||||
 | 
					wryhyfdplumeqvajrbiopngkxc | 
				
			||||
 | 
					wrzhyqdplumeqvajtbiwsngkxt | 
				
			||||
 | 
					wrmoyfdpluheqvajtbiosngkxc | 
				
			||||
 | 
					wrghyfdnlumeqvyjtbiosngkxc | 
				
			||||
 | 
					wrzpyfdplumevvaatbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumhqvajtbiodngxxc | 
				
			||||
 | 
					wrzhyfdplumeqcajtbioyjgkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajabirsngkgc | 
				
			||||
 | 
					wrzhtfnplukeqvajtbiosngkxc | 
				
			||||
 | 
					wqzhyfdplumeqvajtbiopegkxc | 
				
			||||
 | 
					lrzhzfdplumeqdajtbiosngkxc | 
				
			||||
 | 
					wrzzyfdplumeqvajnkiosngkxc | 
				
			||||
 | 
					wrzhyfdflmmeqvajmbiosngkxc | 
				
			||||
 | 
					wrzoyfdplumeqvjjtpiosngkxc | 
				
			||||
 | 
					wrzhyfdpmpmeqvajhbiosngkxc | 
				
			||||
 | 
					krvhyfdplumeqvajtbiossgkxc | 
				
			||||
 | 
					wrzhyfdplumeqvaetviosnmkxc | 
				
			||||
 | 
					wrzhyfzclumeqvajtbiosngwxc | 
				
			||||
 | 
					wrzhyfdpvumeqvajtbiosngkcv | 
				
			||||
 | 
					wrzhyfdpoumeqvajtbiozngoxc | 
				
			||||
 | 
					wrzhyfwglumeqvajtbxosngkxc | 
				
			||||
 | 
					wrshyfdplumeqiajtbiosngklc | 
				
			||||
 | 
					wrzhyfdptdmeqvajtziosngkxc | 
				
			||||
 | 
					wrwhyfdplumeqqajtbiosngkxj | 
				
			||||
 | 
					wrzlyfypldmeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvajtbirknikxc | 
				
			||||
 | 
					wrzhyhdplumeqvajtbmosnbkxc | 
				
			||||
 | 
					wyzhyfiplumeqvwjtbiosngkxc | 
				
			||||
 | 
					wrzgyfsplumeqvajtziosngkxc | 
				
			||||
 | 
					wrzhrfdllumepvajtbiosngkxc | 
				
			||||
 | 
					wrzayfdplumeqvajtbiosqgktc | 
				
			||||
 | 
					whzhyfdplemnqvajtbiosngkxc | 
				
			||||
 | 
					wazhyfdplumeqvaptbioongkxc | 
				
			||||
 | 
					wrzhyfdpluueqvajtbiosnglvc | 
				
			||||
 | 
					wrzhyfdplumjqvajmbionngkxc | 
				
			||||
 | 
					wrzhofdplvmeqvajtbiosnqkxc | 
				
			||||
 | 
					wrzhfidpluzeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhlfdpcumeqvaatbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumewvajtbiosigkoc | 
				
			||||
 | 
					wrzjyfdplwmeqvajtbiodngkxc | 
				
			||||
 | 
					wrzhyfdplumeqnsjtniosngkxc | 
				
			||||
 | 
					wrzxyfdplxmeqvajtbiosngkdc | 
				
			||||
 | 
					wrzhyfdplumpqvartbuosngkxc | 
				
			||||
 | 
					orzhyfdplumeqzsjtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumebvawtbiosngkxt | 
				
			||||
 | 
					wrztyfdulumeqvajtbiosngkxy | 
				
			||||
 | 
					wrzhytdplumeqvajtbznsngkxc | 
				
			||||
 | 
					wrzhvfdplumeqvajtbinsngkxu | 
				
			||||
 | 
					wezmyfdplumeqvajhbiosngkxc | 
				
			||||
 | 
					wrzhhftplumeqvajtaiosngkxc | 
				
			||||
 | 
					wrzhyfgplumeqvajtbioskgjxc | 
				
			||||
 | 
					ujuhyfdplumeqvajtbiosngkxc | 
				
			||||
 | 
					wryhymdplumeqvaftbiosngkxc | 
				
			||||
 | 
					wrzhygdplumeqvajibiosfgkxc | 
				
			||||
 | 
					frzhyfdppumeqvavtbiosngkxc | 
				
			||||
 | 
					wruhyfdylumeqvajzbiosngkxc | 
				
			||||
 | 
					wrzhzfdplumeqvajtbwosygkxc | 
				
			||||
 | 
					wrzhyfdplumeqvaeteiojngkxc | 
				
			||||
 | 
					wrhhyfdplumeqvajtiiopngkxc | 
				
			||||
 | 
					irzhyfdplumeqvajtbiosngryc | 
				
			||||
 | 
					wrvhycdpzumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumyqwajtboosngkxc | 
				
			||||
 | 
					wrzthfdplumeqvajtbioengkxc | 
				
			||||
 | 
					mrzhyfdalumeqvajtbiosngcxc | 
				
			||||
 | 
					wrzhyfdflumpqvajtbiosngkmc | 
				
			||||
 | 
					wrzhyfxplumeqvajtbiosnvkxo | 
				
			||||
 | 
					wrzhyfdglumeqvajtbiosnfkxu | 
				
			||||
 | 
					wrzhyfdnrumeqpajtbiosngkxc | 
				
			||||
 | 
					wrzhlipplumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhkfdplumemvajtbiohngkxc | 
				
			||||
 | 
					wrziyfdmlumeqvaatbiosngkoc | 
				
			||||
 | 
					wrzhyfdplwceqvajtbiosngzxc | 
				
			||||
 | 
					wrzhyfdplumpqvactbiosngixc | 
				
			||||
 | 
					wdzhyfdhdumeqvajtbiosngkxc | 
				
			||||
 | 
					wnzhyfdplumeqvajtbbosngrxc | 
				
			||||
 | 
					wrzhyfdblumeqvajtbiosngvxw | 
				
			||||
 | 
					wyzhyfxpkumeqvajtbiosngkxc | 
				
			||||
 | 
					wrzhywdplumjqvajgbiosngkxc | 
				
			||||
 | 
					wrzhyfdpxumhqvajtbiokngkxc | 
				
			||||
 | 
					wrzhxfpplumeqvajtbiosngkxk | 
				
			||||
 | 
					mrzhyfdplumeqkajubiosngkxc | 
				
			||||
 | 
					drzhyfdplumeqvajtbioingnxc | 
				
			||||
 | 
					wrekyfdplumeqvajtbidsngkxc | 
				
			||||
 | 
					wrzhyfdplumeanyjtbiosngkxc | 
				
			||||
 | 
					wrzhyddpluzeqvajtbiosngtxc | 
				
			||||
 | 
					wrzfyfdplumeqvaqtbiosngkxr | 
				
			||||
 | 
					wrghywdpluneqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplueeqvaptbioyngkxc | 
				
			||||
 | 
					wrzhyqdpllmeqvajtbiosngdxc | 
				
			||||
 | 
					whzhyfdxlumeqvajtbiosngksc | 
				
			||||
 | 
					wrzjyfdplumeqvuitbiosngkxc | 
				
			||||
 | 
					brzhyfdplumeqhajtbiolngkxc | 
				
			||||
 | 
					wrzhyfqclureqvajtbiosngkxc | 
				
			||||
 | 
					wwzhpfdplureqvajtbiosngkxc | 
				
			||||
 | 
					wrzhyfdplumeqvavebijsngkxc | 
				
			||||
 | 
					wrzhyfdpuumeqvajtsiosnkkxc | 
				
			||||
 | 
					wrxhyfuplumeqvajtbiosngpxc | 
				
			||||
 | 
					wrzhyfdplumeqvujlbiospgkxc | 
				
			||||
 | 
					wrzvyfdplumeqvajtbiwsngpxc | 
				
			||||
 | 
					wrzhyndplumeqvajtbiwsnekxc | 
				
			||||
 | 
					wrzhkfdpoumeqvautbiosngkxc | 
				
			||||
								
									Binary file not shown.
								
							
						
					@ -0,0 +1,68 @@ | 
				
			|||||
 | 
					#include <stdio.h> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#include <glib.h> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					int strcmpmatch(const char *a, const char *b) | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    int result = 0; | 
				
			||||
 | 
					    while (*a && *b) if (*a++ == *b++) result++; | 
				
			||||
 | 
					    return result; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					void stripnoncommon(char *a, const char *b) | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    while (*a && *b) { | 
				
			||||
 | 
					        if (*a++ != *b++) { | 
				
			||||
 | 
					            memmove(a - 1, a, strlen(a)); | 
				
			||||
 | 
					            a--; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    *a = '\0'; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					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; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					    g_strstrip(contents); | 
				
			||||
 | 
					    strings = g_strsplit(contents, "\n", -1); | 
				
			||||
 | 
					    g_free(contents); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    int bestmatch_len = 0; | 
				
			||||
 | 
					    char *bestmatch_1 = NULL; | 
				
			||||
 | 
					    char *bestmatch_2 = NULL; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    for (char **first = strings; *first; first++) { | 
				
			||||
 | 
					        for (char **second = strings; *second; second++) { | 
				
			||||
 | 
					            if (first == second) continue; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					            int len = strcmpmatch(*first, *second); | 
				
			||||
 | 
					            if (len <= bestmatch_len) continue; | 
				
			||||
 | 
					            bestmatch_1 = *first; | 
				
			||||
 | 
					            bestmatch_2 = *second; | 
				
			||||
 | 
					            bestmatch_len = len; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    if (!bestmatch_1 || !bestmatch_2) { | 
				
			||||
 | 
					        puts("No match found!"); | 
				
			||||
 | 
					        goto end; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    char *final = g_strdup(bestmatch_1); | 
				
			||||
 | 
					    stripnoncommon(final, bestmatch_2); | 
				
			||||
 | 
					    puts(final); | 
				
			||||
 | 
					    g_free(final); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					end: | 
				
			||||
 | 
					    g_strfreev(strings); | 
				
			||||
 | 
					    return 0; | 
				
			||||
 | 
					} | 
				
			||||
@ -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 it is too large
									
								
							
						
					
								
									Binary file not shown.
								
							
						
					@ -0,0 +1,92 @@ | 
				
			|||||
 | 
					#include <stdio.h> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					#include <glib.h> | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					struct claim { | 
				
			||||
 | 
					    unsigned id; | 
				
			||||
 | 
					    unsigned x; | 
				
			||||
 | 
					    unsigned y; | 
				
			||||
 | 
					    unsigned w; | 
				
			||||
 | 
					    unsigned h; | 
				
			||||
 | 
					}; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					struct claim *parseclaims(unsigned *len, const char *fname) | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    FILE *f = fopen(fname, "r"); | 
				
			||||
 | 
					    if (!f) { | 
				
			||||
 | 
					        perror(fname); | 
				
			||||
 | 
					        return NULL; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    GArray *array = g_array_new(FALSE, FALSE, sizeof(struct claim)); | 
				
			||||
 | 
					    *len = 0; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    char *line = NULL; | 
				
			||||
 | 
					    size_t line_len = 0; | 
				
			||||
 | 
					    while (getline(&line, &line_len, f) != -1) { | 
				
			||||
 | 
					        struct claim claim = {0}; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        // Haha what is proper parsing
 | 
				
			||||
 | 
					        sscanf(line, "#%u @ %u,%u: %ux%u", | 
				
			||||
 | 
					                &claim.id, | 
				
			||||
 | 
					                &claim.x, | 
				
			||||
 | 
					                &claim.y, | 
				
			||||
 | 
					                &claim.w, | 
				
			||||
 | 
					                &claim.h | 
				
			||||
 | 
					        ); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        g_array_append_val(array, claim); | 
				
			||||
 | 
					        (*len)++; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    free(line); | 
				
			||||
 | 
					    fclose(f); | 
				
			||||
 | 
					    struct claim *res = (struct claim *)g_array_free(array, FALSE); | 
				
			||||
 | 
					    return res; | 
				
			||||
 | 
					} | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					int main() | 
				
			||||
 | 
					{ | 
				
			||||
 | 
					    unsigned claims_len; | 
				
			||||
 | 
					    struct claim *claims = parseclaims(&claims_len, "input"); | 
				
			||||
 | 
					    if (!claims) return 1; | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    char (*tilemap)[1000] = g_malloc0(sizeof(char[1000][1000])); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    for (struct claim *claim = claims; | 
				
			||||
 | 
					            claim < claims + claims_len; claim++) { | 
				
			||||
 | 
					        // Basic sanity check
 | 
				
			||||
 | 
					        if (claim->y > 1000 || | 
				
			||||
 | 
					                claim->y + claim->h > 1000 || | 
				
			||||
 | 
					                claim->x > 1000 || | 
				
			||||
 | 
					                claim->x + claim->w > 1000) { | 
				
			||||
 | 
					            fprintf(stderr, "Warning: Ignoring out-of-bounds claim: " | 
				
			||||
 | 
					                    "#%u @ %u,%u: %ux%u\n", | 
				
			||||
 | 
					                    claim->id, | 
				
			||||
 | 
					                    claim->x, | 
				
			||||
 | 
					                    claim->y, | 
				
			||||
 | 
					                    claim->w, | 
				
			||||
 | 
					                    claim->h | 
				
			||||
 | 
					            ); | 
				
			||||
 | 
					            continue; | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					        for (unsigned y = claim->y; y < claim->y + claim->h; y++) { | 
				
			||||
 | 
					            for (unsigned x = claim->x; x < claim->x + claim->w; x++) { | 
				
			||||
 | 
					                if (tilemap[y][x] >= 2) continue; | 
				
			||||
 | 
					                tilemap[y][x]++; | 
				
			||||
 | 
					            } | 
				
			||||
 | 
					        } | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    int tally = 0; | 
				
			||||
 | 
					    for (char *i = *tilemap; i < *tilemap + 1000 * 1000; i++) { | 
				
			||||
 | 
					        if (*i >= 2) tally++; | 
				
			||||
 | 
					    } | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    printf("%d\n", tally); | 
				
			||||
 | 
					
 | 
				
			||||
 | 
					    g_free(claims); | 
				
			||||
 | 
					    g_free(tilemap); | 
				
			||||
 | 
					    return 0; | 
				
			||||
 | 
					} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue