AoC2023/day4/day4b.c
2023-12-05 14:58:08 +01:00

71 lines
1.6 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#define ROW_LENGTH 120
// array of card multipliers?
// for multiplier: next hit multipliers ++
int main ()
{
FILE *input;
input = fopen("./input", "r");
int offset = 0;
char c;
int score = 0;
int cardId = 0;
int cardMultipliers[250] = {0};
char row[ROW_LENGTH];
// for each card (row in file) (numbers start after :)
while (fgets(row, ROW_LENGTH, input) != NULL) {
cardMultipliers[cardId]++;
int winningNumbers[10] = {0};
int hits = 0;
printf("%s\n", row);
// offset = (strchr(row, '|') - &row[0]) - 2;
offset = (strchr(row, ':') - &row[0] + 1);
int foundNumbers = 0;
for (int i = 0; row[offset + i] != '|'; i++) {
if (isdigit(row[offset + i])) {
while (isdigit(c = row[offset + i])) {
winningNumbers[foundNumbers] = winningNumbers[foundNumbers] * 10 + (c - '0');
i++;
}
i--;
printf("number %d: %d\n", foundNumbers, winningNumbers[foundNumbers]);
foundNumbers++;
}
}
offset = (strchr(row, '|') - &row[0] + 1);
for (int i = 0; row[offset + i] != '\n'; i++) {
if (isdigit(row[offset + i])) {
int num = 0;
while (isdigit(c = row[offset + i])) {
num = num * 10 + (c - '0');
i++;
}
for (int i = 0; i < 10; i++) {
if (num == winningNumbers[i]) hits++;
}
i--;
}
}
printf("hits = %d\n", hits);
for (int i = 0; i < cardMultipliers[cardId]; i++) {
for (int n = 1; n <= hits; n++) {
cardMultipliers[cardId + n]++;
}
}
cardId++;
}
for (int i = 0; i < 250; i++) score += cardMultipliers[i];
printf("total cards: %d\n", score);
}