leaky bucket
Thu Nov 07 2024 17:40:24 GMT+0000 (Coordinated Universal Time)
Saved by
@freefire
#include <stdio.h>
#include <unistd.h> // For sleep function
#include <stdlib.h>
#define BUCKET_CAPACITY 10 // Maximum capacity of the bucket
#define LEAK_RATE 1
second)
typedef struct {
// Rate at which the bucket leaks (units per
int currentWater; // Current amount of water in the bucket
} LeakyBucket;
// Initialize the leaky bucket
void initBucket(LeakyBucket *bucket) {
bucket->currentWater = 0;
}
// Add data to the bucket
int addWater(LeakyBucket *bucket, int water) {
if (bucket->currentWater + water > BUCKET_CAPACITY) {
printf("Bucket overflow! Excess water discarded.\n");
return 0; // Overflow occurred
}
bucket->currentWater += water;
printf("Added %d units of water. Current level: %d\n", water, bucket
>currentWater);
return 1; // Successfully added water
}
// Leak water from the bucket
void leakWater(LeakyBucket *bucket) {
if (bucket->currentWater > 0) {
bucket->currentWater -= LEAK_RATE;
if (bucket->currentWater < 0) {
bucket->currentWater = 0; // Prevent negative water level
}
printf("Leaked 1 unit of water. Current level: %d\n", bucket
>currentWater);
}
}
int main() {
LeakyBucket bucket;
initBucket(&bucket);
// Simulate adding water and leaking over time
for (int i = 0; i < 15; i++) {
printf("\nCycle %d:\n", i + 1);
// Add a random amount of water (1-5 units)
int waterToAdd = rand() % 5 + 1;
addWater(&bucket, waterToAdd);
// Leak water
leakWater(&bucket);
// Sleep for 1 second to simulate time passing
sleep(1);
}
return 0;
}
Output:
Cycle 1:
Added 3 units of water. Current level: 3
Leaked 1 unit of water. Current level: 2
Cycle 2:
Added 1 units of water. Current level: 3
Leaked 1 unit of water. Current level: 2
Cycle 3:
Added 4 units of water. Current level: 6
Leaked 1 unit of water. Current level: 5
...
Cycle 15:
Added 2 units of water. Current level: 9
Leaked 1 unit of water. Current level: 8
content_copyCOPY
Comments