fork download
  1. #include <stdio.h>
  2. #include <inttypes.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. void uintprint3(uint32_t *a)
  7. {
  8. printf("%u %u %u\n", a[0], a[1], a[2]);
  9. }
  10.  
  11. void uintprint4(uint32_t *a)
  12. {
  13. printf("%u %u %u %u\n", a[0], a[1], a[2], a[3]);
  14. }
  15.  
  16. void insert3(uint32_t in[static 3], uint32_t value, uint32_t out[static 4])
  17. {
  18. /* 0 1 2 3 4 5 6 7 8 9 10 11 12 */
  19. uint32_t tmp[13] = {value, in[0], in[1], in[2], value, in[0], in[1], value, in[2], in[0], value, in[1], in[2]};
  20. uint8_t bits = ((value <= in[0]) << 2 ) | ((value <= in[1]) << 1) | (value <= in[2]);
  21. static const uint8_t b[] =
  22. {
  23. [0b000] = 1,
  24. [0b001] = 5,
  25. [0b010] = 255,
  26. [0b011] = 9,
  27. [0b100] = 255,
  28. [0b101] = 255,
  29. [0b110] = 255,
  30. [0b111] = 0
  31. };
  32. if (b[bits] > sizeof(tmp)/sizeof(uint32_t)) {
  33. printf("Kakoj bagor )))\n");
  34. exit(-1);
  35. }
  36. memcpy(out, tmp + b[bits], 4*sizeof(uint32_t));
  37. }
  38.  
  39. int main(void)
  40. {
  41. uint32_t a[] = {1, 3, 5};
  42. printf("Input: "); uintprint3(a);
  43. printf("Output:\n");
  44. uint32_t b[4]; insert3(a, 0, b); uintprint4(b);
  45. uint32_t c[4]; insert3(a, 1, c); uintprint4(c);
  46. uint32_t d[4]; insert3(a, 2, d); uintprint4(d);
  47. uint32_t e[4]; insert3(a, 3, e); uintprint4(e);
  48. uint32_t f[4]; insert3(a, 4, f); uintprint4(f);
  49. uint32_t g[4]; insert3(a, 5, g); uintprint4(g);
  50. uint32_t h[4]; insert3(a, 6, h); uintprint4(h);
  51.  
  52. uint32_t i[] = {5, 3, 1};
  53. printf("Input: "); uintprint3(i);
  54. printf("Output:\n");
  55. uint32_t j[4]; insert3(i, 2, j); uintprint4(j);
  56.  
  57. return 0;
  58. }
Runtime error #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
Input: 1 3 5
Output:
0 1 3 5
1 1 3 5
1 2 3 5
1 3 3 5
1 3 4 5
1 3 5 5
1 3 5 6
Input: 5 3 1
Output:
Kakoj bagor )))