#include <stdio.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int factoryNumber;
int candyProduced;
int candyConsumed;
double minDelay;
double avgDelay;
double maxDelay;
} factoryStats;
factoryStats *factoryStatsArray;
int NUM_FACTORIES = 0;
void stats_init (int num_producers) {
factoryStatsArray
= malloc(sizeof(factoryStats
) * num_producers
); NUM_FACTORIES = num_producers;
}
void stats_cleanup (void) {
}
void stats_record_produced (int factory_number) {
factoryStatsArray[factory_number].candyProduced++;
}
void stats_record_consumed (int producer_number, double delay_in_ms) {
factoryStatsArray[producer_number].candyConsumed++;
if (factoryStatsArray[producer_number].minDelay == 0) {
factoryStatsArray[producer_number].minDelay = delay_in_ms;
} else {
if (factoryStatsArray[producer_number].minDelay > delay_in_ms) {
factoryStatsArray[producer_number].minDelay = delay_in_ms;
}
}
if (factoryStatsArray[producer_number].maxDelay == 0) {
factoryStatsArray[producer_number].maxDelay = delay_in_ms;
} else {
if (factoryStatsArray[producer_number].maxDelay < delay_in_ms) {
factoryStatsArray[producer_number].maxDelay = delay_in_ms;
}
}
factoryStatsArray[producer_number].avgDelay+= delay_in_ms;
}
void stats_display(void) {
printf("%8s%10s%10s%10s%10s%10s\n", "Factory#", "#Made", "#Eaten", "Min Delay[ms]", "Avg Delay[ms]", "Max Delay[ms]"); for (int i = 0; i < NUM_FACTORIES; i++) {
printf("%8d%8d%8d%10.5f%10.5f%10.5f", factoryStatsArray[i].factoryNumber, factoryStatsArray[i].candyProduced,
factoryStatsArray[i].candyConsumed, factoryStatsArray[i].minDelay,
factoryStatsArray[i].avgDelay/factoryStatsArray[i].candyConsumed,
factoryStatsArray[i].maxDelay);
}
}
int main(void) {
// your code goes here
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgZmFjdG9yeU51bWJlcjsKICAgIGludCBjYW5keVByb2R1Y2VkOwogICAgaW50IGNhbmR5Q29uc3VtZWQ7CiAgICBkb3VibGUgbWluRGVsYXk7CiAgICBkb3VibGUgYXZnRGVsYXk7CiAgICBkb3VibGUgbWF4RGVsYXk7Cn0gZmFjdG9yeVN0YXRzOwoKZmFjdG9yeVN0YXRzICpmYWN0b3J5U3RhdHNBcnJheTsKaW50IE5VTV9GQUNUT1JJRVMgPSAwOwoKdm9pZCBzdGF0c19pbml0IChpbnQgbnVtX3Byb2R1Y2VycykgewogICAgZmFjdG9yeVN0YXRzQXJyYXkgPSBtYWxsb2Moc2l6ZW9mKGZhY3RvcnlTdGF0cykgKiBudW1fcHJvZHVjZXJzKTsKICAgIE5VTV9GQUNUT1JJRVMgPSBudW1fcHJvZHVjZXJzOwp9CnZvaWQgc3RhdHNfY2xlYW51cCAodm9pZCkgewogICAgZnJlZShmYWN0b3J5U3RhdHNBcnJheSk7Cn0Kdm9pZCBzdGF0c19yZWNvcmRfcHJvZHVjZWQgKGludCBmYWN0b3J5X251bWJlcikgewogICAgZmFjdG9yeVN0YXRzQXJyYXlbZmFjdG9yeV9udW1iZXJdLmNhbmR5UHJvZHVjZWQrKzsKfQp2b2lkIHN0YXRzX3JlY29yZF9jb25zdW1lZCAoaW50IHByb2R1Y2VyX251bWJlciwgZG91YmxlIGRlbGF5X2luX21zKSB7CiAgICBmYWN0b3J5U3RhdHNBcnJheVtwcm9kdWNlcl9udW1iZXJdLmNhbmR5Q29uc3VtZWQrKzsKICAgIGlmIChmYWN0b3J5U3RhdHNBcnJheVtwcm9kdWNlcl9udW1iZXJdLm1pbkRlbGF5ID09IDApIHsKICAgICAgICBmYWN0b3J5U3RhdHNBcnJheVtwcm9kdWNlcl9udW1iZXJdLm1pbkRlbGF5ID0gZGVsYXlfaW5fbXM7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChmYWN0b3J5U3RhdHNBcnJheVtwcm9kdWNlcl9udW1iZXJdLm1pbkRlbGF5ID4gZGVsYXlfaW5fbXMpIHsKICAgICAgICAgICAgZmFjdG9yeVN0YXRzQXJyYXlbcHJvZHVjZXJfbnVtYmVyXS5taW5EZWxheSA9IGRlbGF5X2luX21zOwogICAgICAgIH0KICAgIH0KICAgIGlmIChmYWN0b3J5U3RhdHNBcnJheVtwcm9kdWNlcl9udW1iZXJdLm1heERlbGF5ID09IDApIHsKICAgICAgICBmYWN0b3J5U3RhdHNBcnJheVtwcm9kdWNlcl9udW1iZXJdLm1heERlbGF5ID0gZGVsYXlfaW5fbXM7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChmYWN0b3J5U3RhdHNBcnJheVtwcm9kdWNlcl9udW1iZXJdLm1heERlbGF5IDwgZGVsYXlfaW5fbXMpIHsKICAgICAgICAgICAgZmFjdG9yeVN0YXRzQXJyYXlbcHJvZHVjZXJfbnVtYmVyXS5tYXhEZWxheSA9IGRlbGF5X2luX21zOwogICAgICAgIH0KICAgIH0KICAgIGZhY3RvcnlTdGF0c0FycmF5W3Byb2R1Y2VyX251bWJlcl0uYXZnRGVsYXkrPSBkZWxheV9pbl9tczsKCn0Kdm9pZCBzdGF0c19kaXNwbGF5KHZvaWQpIHsKICAgIHByaW50ZigiJThzJTEwcyUxMHMlMTBzJTEwcyUxMHNcbiIsICJGYWN0b3J5IyIsICIjTWFkZSIsICIjRWF0ZW4iLCAiTWluIERlbGF5W21zXSIsICJBdmcgRGVsYXlbbXNdIiwgIk1heCBEZWxheVttc10iKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0ZBQ1RPUklFUzsgaSsrKSB7CiAgICAgICAgICAgIHByaW50ZigiJThkJThkJThkJTEwLjVmJTEwLjVmJTEwLjVmIiwKICAgICAgICAgICAgICAgICAgICBmYWN0b3J5U3RhdHNBcnJheVtpXS5mYWN0b3J5TnVtYmVyLCBmYWN0b3J5U3RhdHNBcnJheVtpXS5jYW5keVByb2R1Y2VkLAogICAgICAgICAgICAgICAgICAgIGZhY3RvcnlTdGF0c0FycmF5W2ldLmNhbmR5Q29uc3VtZWQsIGZhY3RvcnlTdGF0c0FycmF5W2ldLm1pbkRlbGF5LAogICAgICAgICAgICAgICAgICAgIGZhY3RvcnlTdGF0c0FycmF5W2ldLmF2Z0RlbGF5L2ZhY3RvcnlTdGF0c0FycmF5W2ldLmNhbmR5Q29uc3VtZWQsCiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeVN0YXRzQXJyYXlbaV0ubWF4RGVsYXkpOwoKICAgIH0KfQppbnQgbWFpbih2b2lkKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQo=