## The challenge

You need to create a function that when provided with a triplet, returns the index of the numerical element that lies between the other two elements.

The input to the function will be an array of three distinct numbers (Haskell: a tuple).

For example:

 ``````1 `````` ``````gimme([2, 3, 1]) => 0 ``````

2 is the number that fits between 1 and 3 and the index of 2 in the input array is __.

Another example (just to make sure it is clear):

 ``````1 `````` ``````gimme([5, 10, 14]) => 1 ``````

10 is the number that fits between 5 and 14 and the index of 10 in the input array is 1.

## The solution in C

Option 1:

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 `````` ``````int gimme (const int triplet[3]) { int maxi = 0; int mini = 0; for(int i = 1; i < 3; i++){ if(triplet[i] < triplet[mini]){ mini = i; } else if(triplet[i] > triplet[maxi]){ maxi = i; } } return 3 - maxi - mini; } ``````

Option 2:

 ``````1 2 3 4 5 6 `````` ``````int gimme (const int triplet[3]) { int a = triplet[0]; int b = triplet[1]; int c = triplet[2]; return a > b && a < c || a > c && a < b ? 0 : b > a && b < c || b > c && b < a ? 1 : 2; } ``````

Option 3:

 ``````1 2 3 4 5 6 7 `````` ``````int gimme(const int _[3]) { int a=_[0],b=_[1],c=_[2],t; if(a>b){t=a;a=b;b=t;} if(b>c){t=b;b=c;c=t;} if(a>b){t=a;a=b;b=t;} return _[0]==b?0:_[1]==b?1:2; } ``````

## Test cases to validate our solution

 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 `````` ``````#include extern void do_test (const int triplet[3], int expected); Test(tests_suite, sample_tests) { do_test((int[3]){2, 1, 3}, 0); do_test((int[3]){2, 3, 1}, 0); do_test((int[3]){1, 2, 3}, 1); do_test((int[3]){3, 2, 1}, 1); do_test((int[3]){1, 3, 2}, 2); do_test((int[3]){3, 1, 2}, 2); } ``````