lab5.ino (2055B)
1 #include "util.h" 2 3 #define NUMBER_OF_RUNNERS 16 4 5 /* DO NOT TOUCH, cursed, fills in printf, it works don't question */ 6 #define fill_printf_from_secs(t) (int)(t % 60), \ 7 (int)((int)(t / 60) % 60), \ 8 (int)((int)((int)(t / 60) / 60) % 60) 9 10 const char *order[] = {"Secs", "Mins", "Hours"}; 11 const int time_orders = SIZE(order); 12 13 const char *sports[] = {"swim", "cycle", "run"}; 14 const int number_of_sports = SIZE(sports); 15 16 int 17 input_time(const char *order, const char *sport) { 18 SEprintf("How many %s did %s take: ", order, sport); 19 return readint(); 20 } 21 22 int 23 input_sport(const char *sport, int times[time_orders]) { 24 for (int i = 0; i < time_orders; i++) 25 if ((times[i] = input_time(order[i], sport)) == -1) 26 return 1; 27 return 0; 28 } 29 30 void 31 normalize(int times[time_orders]) { 32 for (int i = 0; i < time_orders - 1; i++) { 33 times[i + 1] += times[i] / 60; 34 times[i] %= 60; 35 } 36 } 37 38 long 39 in_secs(int time[number_of_sports]) { 40 return (long)((time[0]) + (time[1] * 60) + (time[2] * 60 * 60)); 41 } 42 43 void 44 setup() { 45 Serial.begin(9600); 46 47 int sport_times[number_of_sports + 1][time_orders] = {0}; 48 long times[NUMBER_OF_RUNNERS] = {0}; 49 int runner; 50 51 for (runner = 0; runner < NUMBER_OF_RUNNERS; runner++) { 52 memset(sport_times, 0, sizeof(sport_times)); 53 for (int i = 0; i < number_of_sports; i++) { 54 if (input_sport(sports[i], sport_times[i])) 55 goto end; 56 } 57 58 for (int i = 0; i < number_of_sports; i++) 59 for (int j = 0; j < time_orders; j++) 60 sport_times[time_orders][j] += sport_times[i][j]; 61 62 normalize(sport_times[3]); 63 times[runner] = in_secs(sport_times[time_orders]); 64 65 SEprintf("Total time: %dsec %dmin %dhr.\n", fill_printf_from_secs((long)times[runner])); 66 } 67 end: 68 int best_index = -1; 69 long best = -1; 70 for (int i = 0; i < runner; i++) { 71 if (best < times[i]) { 72 best = times[i]; 73 best_index = i; 74 } 75 76 SEprintf("Runner %d: %dsec %dmin %dhr.\n", i + 1, fill_printf_from_secs(times[i])); 77 } 78 SEprintf("The best runner was runner %d, with a time of %dsec %dmin %dhr.\n", best_index + 1, fill_printf_from_secs(best)); 79 } 80 81 void loop() {}