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
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;
|
||
|
}
|
||
|
}
|