summaryrefslogtreecommitdiff
path: root/10
diff options
context:
space:
mode:
authorBond_009 <bond.009@outlook.com>2020-12-10 15:16:41 +0100
committerBond_009 <bond.009@outlook.com>2020-12-10 15:16:41 +0100
commit9112fe39b696fa91620f1637fbc71772091917a3 (patch)
treea923d309cc75c3b20dd04ed41fc04fdfeb742c37 /10
parentc45c08811c6f41d84871f6a83a7317da042feb51 (diff)
Split day 10 part 2 out into function
Diffstat (limited to '10')
-rw-r--r--10/part2.c41
1 files changed, 22 insertions, 19 deletions
diff --git a/10/part2.c b/10/part2.c
index 5053ae7..bd5d22c 100644
--- a/10/part2.c
+++ b/10/part2.c
@@ -33,6 +33,27 @@ void insert_value_sorted(int *list, size_t *size, int value)
list[low] = value;
}
+uint64_t pos_seq(int *input, size_t input_size)
+{
+ const static int TRIB[] = { 1, 1, 2, 4, 7 };
+ int con = 0;
+ uint64_t res = 1;
+
+ for (size_t i = 1; i < input_size; i++)
+ {
+ int diff = input[i] - input[i - 1];
+ if (diff == 1) {
+ con++;
+ }
+ else {
+ res *= TRIB[con];
+ con = 0;
+ }
+ }
+
+ return res;
+}
+
size_t bags_count(const char *filename)
{
FILE *file = fopen(filename, "r");
@@ -52,25 +73,7 @@ size_t bags_count(const char *filename)
fclose(file);
- /* Removed the 2 first values so we don't need to add 2 to our index every time
- Longest consecutive input is 5 */
- const static int TRIB[] = { 1, 1, 2, 4, 7 };
- int con = 0;
- size_t res = 1;
-
- for (size_t i = 1; i < input_size; i++)
- {
- int diff = input[i] - input[i - 1];
- if (diff == 1) {
- con++;
- }
- else {
- res *= TRIB[con];
- con = 0;
- }
- }
-
- return res;
+ return pos_seq(input, input_size);
}
int main(int argc, char *argv[])