diff --git a/c/2024/19/linen_layout.c b/c/2024/19/linen_layout.c index 328cd35..8bcbe8f 100644 --- a/c/2024/19/linen_layout.c +++ b/c/2024/19/linen_layout.c @@ -25,20 +25,20 @@ bool towels_valid_design(Towels *t, char *design) { long towels_valid_designs(Towels *t, char *design) { AocHashmapNode *memo = aoc_hashmap_get(t->map, design); - if (memo != NULL) return memo->value; + if (memo != NULL) return *(long *)memo->value; if (strlen(design) == 0) return 1; - long valid_designs = 0; + long *valid_designs = malloc(sizeof(long)); for (int i = 0; i < t->towels_count; i++) { if (strstr(design, t->towels[i]) == design) { - valid_designs += towels_valid_designs(t, design + strlen(t->towels[i])); + *valid_designs += towels_valid_designs(t, design + strlen(t->towels[i])); } } aoc_hashmap_put(t->map, design, valid_designs); - return valid_designs; + return *valid_designs; } int main() { diff --git a/c/lib/hashmap.h b/c/lib/hashmap.h index 1c81d16..0bdc575 100644 --- a/c/lib/hashmap.h +++ b/c/lib/hashmap.h @@ -16,7 +16,7 @@ typedef struct AocHashmapNode AocHashmapNode; typedef struct AocHashmapNode { char *key; - long value; + void *value; AocHashmapNode *next; } AocHashmapNode; @@ -31,7 +31,7 @@ AocHashmapNode *aoc_hashmap_get(AocHashmap *map, char *key) { return node; } -void *aoc_hashmap_put(AocHashmap *map, char *key, long value) { +void *aoc_hashmap_put(AocHashmap *map, char *key, void *value) { int hash = aoc_hash(key); AocHashmapNode *node = map->buckets[hash]; while (node != NULL) node = node->next;