void o3(int *a, int *b, int *c) {
int tmp;
switch ((*a>*b) + 2*(*b>*c) + 4*(*a>*c)) { // <== hidden ifs
default: break; // case 3 and case 4 never happen
case 0: /*already in order*/ break; // no swapping
case 1: tmp = *a; *a = *b; *b = tmp; break; // swap a and b
case 2: tmp = *b; *b = *c; *c = tmp; break; // swap b and c
case 7: tmp = *a; *a = *c; *c = tmp; break; // swap a and c
case 5: tmp = *a; *a = *b; *b = *c; *c = tmp; break; // swap a and b and c
case 6: tmp = *a; *a = *c; *c = *b; *b = tmp; break; // swap a and c and b
}
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
for (int k = 0; k < 256; k++) {
o3(&a, &b, &c);
}
return 0;
}
dm9pZCBvMyhpbnQgKmEsIGludCAqYiwgaW50ICpjKSB7CiAgICBpbnQgdG1wOwogICAgc3dpdGNoICgoKmE+KmIpICsgMiooKmI+KmMpICsgNCooKmE+KmMpKSB7ICAgICAgICAgICAgICAgIC8vIDw9PSBoaWRkZW4gaWZzCiAgICAgICAgZGVmYXVsdDogYnJlYWs7IC8vIGNhc2UgMyBhbmQgY2FzZSA0IG5ldmVyIGhhcHBlbgogICAgICAgIGNhc2UgMDogLyphbHJlYWR5IGluIG9yZGVyKi8gYnJlYWs7ICAgICAgICAgICAgICAgICAgIC8vIG5vIHN3YXBwaW5nCiAgICAgICAgY2FzZSAxOiB0bXAgPSAqYTsgKmEgPSAqYjsgKmIgPSB0bXA7IGJyZWFrOyAgICAgICAgICAgLy8gc3dhcCBhIGFuZCBiCiAgICAgICAgY2FzZSAyOiB0bXAgPSAqYjsgKmIgPSAqYzsgKmMgPSB0bXA7IGJyZWFrOyAgICAgICAgICAgLy8gc3dhcCBiIGFuZCBjCiAgICAgICAgY2FzZSA3OiB0bXAgPSAqYTsgKmEgPSAqYzsgKmMgPSB0bXA7IGJyZWFrOyAgICAgICAgICAgLy8gc3dhcCBhIGFuZCBjCiAgICAgICAgY2FzZSA1OiB0bXAgPSAqYTsgKmEgPSAqYjsgKmIgPSAqYzsgKmMgPSB0bXA7IGJyZWFrOyAgLy8gc3dhcCBhIGFuZCBiIGFuZCBjCiAgICAgICAgY2FzZSA2OiB0bXAgPSAqYTsgKmEgPSAqYzsgKmMgPSAqYjsgKmIgPSB0bXA7IGJyZWFrOyAgLy8gc3dhcCBhIGFuZCBjIGFuZCBiCiAgICB9Cn0KCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDx0aW1lLmg+CgppbnQgbWFpbih2b2lkKSB7CiAgICBzcmFuZCh0aW1lKDApKTsKICAgIGZvciAoaW50IGsgPSAwOyBrIDwgMjU2OyBrKyspIHsKICAgICAgICBpbnQgYSA9IHJhbmQoKSAlIDEwLCBiID0gcmFuZCgpICUgMTAsIGMgPSByYW5kKCkgJSAxMDsKICAgICAgICBvMygmYSwgJmIsICZjKTsKICAgICAgICBwcmludGYoIiVkJWQlZCAiLCBhLCBiLCBjKTsKICAgIH0KICAgIHB1dHMoIiIpOwogICAgcmV0dXJuIDA7Cn0=