63 lines
1.4 KiB
C
63 lines
1.4 KiB
C
#include <stdio.h>
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include <limits.h>
|
|
|
|
#include "day.h"
|
|
#include "puzzle_input.h"
|
|
|
|
#define DATA_MAX_LEN 2048
|
|
|
|
static void part_1(const int64_t * data, uint16_t data_len) {
|
|
int64_t last_value;
|
|
int16_t inc_count = 0;
|
|
|
|
last_value = data[0];
|
|
for (uint16_t i = 1; i < (uint16_t)data_len; i++) {
|
|
if (data[i] > last_value) {
|
|
inc_count++;
|
|
}
|
|
|
|
last_value = data[i];
|
|
}
|
|
printf("PART 1: %d values increased!\n", inc_count);
|
|
}
|
|
|
|
static void part_2(const int64_t * data, uint16_t data_len) {
|
|
int64_t old_window_sum;
|
|
int64_t window_sum;
|
|
int16_t inc_count = 0;
|
|
|
|
old_window_sum = data[0] + data[1] + data[2];
|
|
|
|
for (uint16_t i = 3; i < (uint16_t)data_len; i++) {
|
|
window_sum = old_window_sum - data[i-3] + data[i];
|
|
|
|
if (window_sum > old_window_sum) {
|
|
inc_count++;
|
|
}
|
|
|
|
old_window_sum = window_sum;
|
|
|
|
}
|
|
printf("PART 2: %d windows increased!\n", inc_count);
|
|
}
|
|
|
|
int day_1() {
|
|
char * path = "../inputs/day_1.txt";
|
|
uint16_t data_len;
|
|
int64_t data[DATA_MAX_LEN];
|
|
|
|
parse_ret_t res = read_input_single_line(path, (void *) data, DATA_MAX_LEN, parse_long_from_buff, &data_len);
|
|
|
|
if (res == PARSER_OK) {
|
|
part_1(data, data_len);
|
|
part_2(data, data_len);
|
|
}
|
|
else {
|
|
printf("Failed to parse data: %d\n", res);
|
|
return res;
|
|
}
|
|
|
|
return 0;
|
|
} |