Advertisement
Guest User

14

a guest
Dec 14th, 2015
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.77 KB | None | 0 0
  1. //reindeer races
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6.  
  7. typedef struct reindeer {
  8.     char name[10];
  9.     int dist;
  10.     int active;
  11.     int rest;
  12.     int speed;
  13.     int points;
  14. } Deer;
  15.  
  16.  
  17. Deer * deer( char * str ){
  18.     Deer * newdeer = (Deer *) malloc( sizeof(Deer) );
  19.     int a, r, s;
  20.  
  21.     sscanf(str, "%s can fly %d km/s for %d %*s but then must rest for %d",
  22.             newdeer->name, &s, &a, &r);
  23.  
  24.     newdeer->dist = 0;
  25.     newdeer->active = a;
  26.     newdeer->rest = r;
  27.     newdeer->speed = s;
  28.     newdeer->points = 0;
  29.  
  30.     return newdeer;
  31. }
  32.  
  33.  
  34. int move( int time, Deer * racer ){
  35.  
  36.     int step = time % (racer->active + racer->rest);
  37.  
  38.     if(step < racer->active){
  39.         racer->dist += racer->speed;
  40.     }
  41.  
  42.     return racer->dist;
  43. }
  44.  
  45. int main( int argc, char ** argv ){
  46.    
  47.     if( argc < 3 ){
  48.         printf( "usage: %s [input file] [time]\n", argv[0] );
  49.         return 0;
  50.     }
  51.  
  52.    
  53.  
  54.     FILE * contestants = fopen( argv[1], "r" );
  55.     if(contestants == NULL){
  56.         perror(argv[1]);
  57.         return -1;
  58.     }
  59.  
  60.     int time = atoi(argv[2]);
  61.     int i, j, size = 0;
  62.     Deer ** race_list = (Deer **) malloc(1);
  63.  
  64.  
  65.     char line[100];
  66.     while( fgets( line, 100, contestants ) != NULL ){
  67.         Deer * racer = deer( line );
  68.        
  69.         size++;
  70.         race_list = (Deer **) realloc(race_list, size * sizeof(Deer *));
  71.         race_list[size-1] = racer; 
  72.     }
  73.     fclose(contestants);
  74.  
  75.     for(i = 0; i < time; i++){
  76.         int max = 0;
  77.  
  78.         for(j = 0; j < size; j++){
  79.             int val = move(i, race_list[j]);
  80.             if(val > max) max = val;
  81.         }
  82.  
  83.         for(j = 0; j < size; j++){
  84.             if(race_list[j]->dist == max)
  85.                 race_list[j]->points += 1;
  86.         }
  87.     }
  88.  
  89.  
  90.     printf("after %d seconds:\n", time);
  91.     for(i = 0; i < size; i++){
  92.         printf("%s: %d km, %d points\n",
  93.             race_list[i]->name, race_list[i]->dist, race_list[i]->points);
  94.        
  95.         free(race_list[i]);
  96.     }
  97.  
  98.     free(race_list);
  99.     return 0;
  100.  
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement