# HackerEarth Binary associativity problem solution

In this HackerEarth Binary associativity problem solution, A binary operation * on a set S is called associative if it satisfies the associative law: (x * y) * z = x * (y * z) for all x, y, z in S.

For the binary set S = {0,1} and a particular binary operator *, you are given its truth table. Determine if the operation is associative.

## HackerEarth Binary associativity problem solution.

`#include <bits/stdc++.h>using namespace std;int F[4];int func(int a, int b){  if(a == 0 && b == 0)    return F[0];  else if(a == 0 && b == 1)    return F[1];  else if(a == 1 && b == 0)    return F[2];  else    return F[3];}bool isGood(int a, int b, int c){  return func(func(a, b), c) == func(a, func(b, c));}int main(){  int T;  cin >> T;    while(T--)  {    for(int i=0; i<4; i++)      cin >> F[i];        bool is_associative = true;        for(int a=0; a<=1; a++)      for(int b=0; b<=1; b++)        for(int c=0; c<=1; c++)          is_associative &= isGood(a, b, c);        if(is_associative)      cout << "Yes\n";    else      cout << "No\n";  }    return 0;}`

### Second solution

`#include <bits/stdc++.h>using namespace std;int main(int argc, char* argv[]) {    if(argc == 2 or argc == 3) freopen(argv[1], "r", stdin);    if(argc == 3) freopen(argv[2], "w", stdout);    int t, c[2][2], x1, x2, x;    bool flag;    assert(cin >> t);    assert(1 <= t and t <= 8);    for(int test = 0; test < t; test++) {        for(int i = 0; i < 2; i++) {            for(int j = 0; j < 2; j++) {                assert(cin >> c[i][j]);                assert(0 <= c[i][j] and c[i][j] <= 1);            }        }        flag = true;        for(int i = 0; i < 2; i++) {            for(int j = 0; j < 2; j++) {                for(int k = 0; k < 2; k++) {                    x = c[k][j];                    x1 = c[x][i];                    x = c[j][i];                    x2 = c[k][x];                    if (x1 != x2) flag = false;                }            }        }        cout << (flag ? "Yes" : "No") << endl;    }    assert(!(cin >> t));    return 0;}`