Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //reindeer races
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct reindeer {
- char name[10];
- int dist;
- int active;
- int rest;
- int speed;
- int points;
- } Deer;
- Deer * deer( char * str ){
- Deer * newdeer = (Deer *) malloc( sizeof(Deer) );
- int a, r, s;
- sscanf(str, "%s can fly %d km/s for %d %*s but then must rest for %d",
- newdeer->name, &s, &a, &r);
- newdeer->dist = 0;
- newdeer->active = a;
- newdeer->rest = r;
- newdeer->speed = s;
- newdeer->points = 0;
- return newdeer;
- }
- int move( int time, Deer * racer ){
- int step = time % (racer->active + racer->rest);
- if(step < racer->active){
- racer->dist += racer->speed;
- }
- return racer->dist;
- }
- int main( int argc, char ** argv ){
- if( argc < 3 ){
- printf( "usage: %s [input file] [time]\n", argv[0] );
- return 0;
- }
- FILE * contestants = fopen( argv[1], "r" );
- if(contestants == NULL){
- perror(argv[1]);
- return -1;
- }
- int time = atoi(argv[2]);
- int i, j, size = 0;
- Deer ** race_list = (Deer **) malloc(1);
- char line[100];
- while( fgets( line, 100, contestants ) != NULL ){
- Deer * racer = deer( line );
- size++;
- race_list = (Deer **) realloc(race_list, size * sizeof(Deer *));
- race_list[size-1] = racer;
- }
- fclose(contestants);
- for(i = 0; i < time; i++){
- int max = 0;
- for(j = 0; j < size; j++){
- int val = move(i, race_list[j]);
- if(val > max) max = val;
- }
- for(j = 0; j < size; j++){
- if(race_list[j]->dist == max)
- race_list[j]->points += 1;
- }
- }
- printf("after %d seconds:\n", time);
- for(i = 0; i < size; i++){
- printf("%s: %d km, %d points\n",
- race_list[i]->name, race_list[i]->dist, race_list[i]->points);
- free(race_list[i]);
- }
- free(race_list);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement