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.

57 lines
1.0 KiB

3 years ago
#include <stdio.h>
#include <string.h>
int main( int argc, char *argv[] ){
if( argc == 2 ) {
unsigned int gamma = 0;
unsigned int epsilon = 0;
unsigned int lineLength = 0;
unsigned int noOfLines = 0;
// Read the values into an array
FILE *fp=fopen(argv[1], "r");
char ch = fgetc(fp);
while ( ch != '\n' ){
lineLength++;
ch = fgetc(fp);
}
rewind(fp);
unsigned int digitCount[lineLength];
memset( &digitCount, 0, lineLength*sizeof(unsigned int) );
for ( int i = 0; !feof(fp); i++){
ch=fgetc(fp);
switch (ch) {
case '\n':
// I will be incremented at the end of the iteration
i=-1;
noOfLines++;
break;
case '1':
digitCount[i]++;
break;
}
}
for (unsigned int i=0; i < lineLength; i++ ){
if ( digitCount[i] > ( (double)noOfLines ) / 2 ){
gamma = gamma | 1 << (lineLength - i - 1);
} else {
epsilon = epsilon | 1 << (lineLength - i - 1);
}
}
printf("Answer: %d", gamma * epsilon);
return 0;
} else {
printf("You need to provide a file\n");
return 1;
}
}