## Problem statement

Event EA and EB needs to be done every A sec and B sec. Always make sure EA occurs before EB if A and B are multiples of each other.

## More explanation

Say EA need to occur every 2 sec and EB needs be occur every 5 sec.
EA would occur at
2, 4, 6, 8, 10, 12, 14, 16, 18...
EB would occur at
5, 10, 15, 20, 25, 30, 35, 40,...

Hence combining both together
2 - EA occurs
4 - EA occurs
5 - EB occurs
6 - EA occurs
8 - EA occurs
10 - EA and EB occurs
12 - EA occurs
14 - EA occurs
15 - EB occurs
and so on

Hence we need to count things in irregular interval (2, 2, 1, 1, 2, 2, 2, 2, 1, 1 ...)

## Solution

#include <stdio.h>

#define MAX_LIMIT 25

#define min(i,j) (((i) < (j)) ? (i) : (j))
int main()
{
int a = 2, b = 5;
int ta = a, tb = b;
int t = 0, x;

for(t = 0; t < MAX_LIMIT; t = t + x) {
x = min(ta - t, tb - t);
x = (x == 0) ? min(a, b) : x;
if((ta - t) < (tb - t)) {
ta = ta + a;
printf("do EA ");
}else if((ta - t) > (tb - t)){
tb = tb + b;
printf("do EB ");
}else {
ta = ta + a;
tb = tb + b;
printf("do EA and EB ");
}
printf("t is %d, interval is %d\n", t + x, x);
}
return 0;
}


Output of above program is

do EA t is 2, interval is 2
do EA t is 4, interval is 2
do EB t is 5, interval is 1
do EA t is 6, interval is 1
do EA t is 8, interval is 2
do EA and EB t is 10, interval is 2
do EA t is 12, interval is 2
do EA t is 14, interval is 2
do EB t is 15, interval is 1
do EA t is 16, interval is 1
do EA t is 18, interval is 2
do EA and EB t is 20, interval is 2
do EA t is 22, interval is 2
do EA t is 24, interval is 2
do EB t is 25, interval is 1


## Understanding program

1. MAX_LIMIT is a constant till which the counting would happen
2. min(x,y) is the macro that would calculate the minimum value between x and y.
3. ta would count total time in interval of a.
4. tb would count total time in interval of b.
5. x is the variable interval that was mentioned in More Explanation.
6. Hopefully if else if part is self explanatory. (Just put words in code and it makes sense)

## Links

Next Article -
Previous Article - C Programming Challenge #08: Sort - insertion (binary search variant)
All Article - C Programming Challenge