My solutions to the advent of code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

103 lines
1.9 KiB

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
typedef struct LanternFishListItem LanternFishListItem;
struct LanternFishListItem {
unsigned int daysToSpawn;
LanternFishListItem *next;
};
void printFrom( LanternFishListItem *first ){
printf("%i,", first->daysToSpawn);
if ( first->next != NULL ) printFrom(first->next);
}
unsigned int countFrom( LanternFishListItem *current ){
unsigned int count = 1;
while ( current->next != NULL ){
count++;
current = current->next;
}
return count;
}
int main( int argc, char *argv[] ){
if( argc == 2 ) {
FILE *fp=fopen(argv[1], "r");
LanternFishListItem *first = NULL;
LanternFishListItem *previous = NULL;
unsigned int no;
char ch;
while ( fscanf( fp, "%i%c", &no, &ch ) ){
LanternFishListItem *lf = (LanternFishListItem*)malloc(sizeof(LanternFishListItem));
lf->next = NULL;
lf->daysToSpawn = no;
if ( first == NULL ){
first = lf;
} else {
previous->next = lf;
}
previous = lf;
if ( ch == '\n' ) break;
}
for ( unsigned int i = 0; i < 80; i++ ){
unsigned int toAdd=0;
LanternFishListItem *current = first;
while (current != NULL){
if ( current->daysToSpawn == 0 ){
toAdd++;
current->daysToSpawn = 7;
}
current->daysToSpawn--;
if ( current->next != NULL )
current = current->next;
else
break;
}
previous = current;
//printf("On day %i add %i fish\n", i, toAdd);
for (unsigned int j = 0; j < toAdd; j++){
LanternFishListItem *lf = (LanternFishListItem*)malloc(sizeof(LanternFishListItem));
lf->next = NULL;
lf->daysToSpawn = 8;
previous->next = lf;
previous = lf;
}
//printf("After %3i day: ", i+1);
//printFrom(first);
//printf("\n");
}
printf("There are %i Fish.\n",countFrom(first));
fclose(fp);
return 0;
} else {
printf("You need to provide a file\n");
return 1;
}
}