#include <stdio.h>
#include <inttypes.h>
#include <string.h>
void uintprint3(uint32_t *a)
{
printf("%u %u %u\n", a
[0], a
[1], a
[2]); }
void sort3(uint32_t a[static 3])
{
uint16_t mask = 0x6124;
uint8_t bits = (a[0] <= a[1]) | ((a[1] <= a[2]) << 1) | ((a[0] <= a[2]) << 2);
static const uint8_t b[] =
{
[0b000] = 3, // =0
[0b001] = 8,
[0b010] = 10,
[0b101] = 2, // =5
[0b110] = 1, // =4
[0b111] = 12,
};
mask >>= b[bits];
uint32_t tmp[3] = {a[(mask>>4)&0b11], a[(mask>>2)&0b11], a[(mask)&0b11]};
memcpy(a
, tmp
, 3*sizeof(uint32_t)); }
int main(void)
{
uint32_t a[] = {0, 1, 2};
uint32_t b[] = {0, 2, 1};
uint32_t c[] = {1, 2, 0};
uint32_t d[] = {1, 0, 2};
uint32_t e[] = {2, 0, 1};
uint32_t f[] = {2, 1, 0};
sort3(a); sort3(b); sort3(c); sort3(d); sort3(e); sort3(f);
uintprint3(a);
uintprint3(b);
uintprint3(c);
uintprint3(d);
uintprint3(e);
uintprint3(f);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5oPgojaW5jbHVkZSA8c3RyaW5nLmg+Cgp2b2lkIHVpbnRwcmludDModWludDMyX3QgKmEpCnsKICBwcmludGYoIiV1ICV1ICV1XG4iLCBhWzBdLCBhWzFdLCBhWzJdKTsKfQoKdm9pZCBzb3J0Myh1aW50MzJfdCBhW3N0YXRpYyAzXSkKewogIHVpbnQxNl90IG1hc2sgPSAweDYxMjQ7CiAgdWludDhfdCBiaXRzID0gKGFbMF0gPD0gYVsxXSkgfCAoKGFbMV0gPD0gYVsyXSkgPDwgMSkgfCAoKGFbMF0gPD0gYVsyXSkgPDwgMik7CiAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgYltdID0KICB7CiAgICBbMGIwMDBdID0gIDMsIC8vID0wCiAgICBbMGIwMDFdID0gIDgsCiAgICBbMGIwMTBdID0gMTAsCiAgICBbMGIxMDFdID0gIDIsIC8vID01CiAgICBbMGIxMTBdID0gIDEsIC8vID00CiAgICBbMGIxMTFdID0gMTIsCiAgfTsKICBtYXNrID4+PSBiW2JpdHNdOwogIHVpbnQzMl90IHRtcFszXSA9IHthWyhtYXNrPj40KSYwYjExXSwgYVsobWFzaz4+MikmMGIxMV0sIGFbKG1hc2spJjBiMTFdfTsKICBtZW1jcHkoYSwgdG1wLCAzKnNpemVvZih1aW50MzJfdCkpOwp9CiAKaW50IG1haW4odm9pZCkKewogIHVpbnQzMl90IGFbXSA9IHswLCAxLCAyfTsKICB1aW50MzJfdCBiW10gPSB7MCwgMiwgMX07CiAgdWludDMyX3QgY1tdID0gezEsIDIsIDB9OwogIHVpbnQzMl90IGRbXSA9IHsxLCAwLCAyfTsKICB1aW50MzJfdCBlW10gPSB7MiwgMCwgMX07CiAgdWludDMyX3QgZltdID0gezIsIDEsIDB9OwogIHNvcnQzKGEpOyBzb3J0MyhiKTsgc29ydDMoYyk7IHNvcnQzKGQpOyBzb3J0MyhlKTsgc29ydDMoZik7CiAKICB1aW50cHJpbnQzKGEpOwogIHVpbnRwcmludDMoYik7CiAgdWludHByaW50MyhjKTsKICB1aW50cHJpbnQzKGQpOwogIHVpbnRwcmludDMoZSk7CiAgdWludHByaW50MyhmKTsKICByZXR1cm4gMDsKfQo=