Advertisement
Guest User

Horrible code to solve a puzzle brutally

a guest
Nov 3rd, 2014
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. static double
  7. evalop(int op, double x, double y)
  8. {
  9.         switch (op) {
  10.         case 0:
  11.                 return x + y;
  12.         case 1:
  13.                 return x - y;
  14.         case 2:
  15.                 return x * y;
  16.         case 3:
  17.                 return x / y;
  18.         }
  19.         abort();
  20.         return 0.0;
  21. }
  22.  
  23. static void
  24. enum_expr(double *val, int al, int ar, int bl, int br, int cl, int cr)
  25. {
  26.         int o1, o2, o3;
  27.  
  28.         static char *opname[4] = { "+", "-", "*", "/" };
  29.  
  30.         for (o1 = 0; o1 < 4; o1 ++) {
  31.                 for (o2 = 0; o2 < 4; o2 ++) {
  32.                         for (o3 = 0; o3 < 4; o3 ++) {
  33.                                 double tmp[7];
  34.  
  35.                                 memcpy(tmp, val, 4 * sizeof(double));
  36.                                 tmp[4] = evalop(o1, tmp[al], tmp[ar]);
  37.                                 tmp[5] = evalop(o2, tmp[bl], tmp[br]);
  38.                                 tmp[6] = evalop(o3, tmp[cl], tmp[cr]);
  39.                                 if (fabs(tmp[6] - 21.0) < 0.02) {
  40.                                         printf("-----------------\n");
  41.                                         printf("%f %s %f -> %f\n",
  42.                                                 tmp[al], opname[o1],
  43.                                                 tmp[ar], tmp[4]);
  44.                                         printf("%f %s %f -> %f\n",
  45.                                                 tmp[bl], opname[o2],
  46.                                                 tmp[br], tmp[5]);
  47.                                         printf("%f %s %f -> %f\n",
  48.                                                 tmp[cl], opname[o3],
  49.                                                 tmp[cr], tmp[6]);
  50.                                 }
  51.                         }
  52.                 }
  53.         }
  54. }
  55.  
  56. static void
  57. enum_expr2(double *val)
  58. {
  59.         enum_expr(val, 0, 1, 4, 2, 5, 3);
  60.         enum_expr(val, 1, 2, 0, 4, 5, 3);
  61.         enum_expr(val, 1, 2, 4, 3, 0, 5);
  62.         enum_expr(val, 2, 3, 1, 4, 0, 5);
  63.         enum_expr(val, 0, 1, 2, 3, 4, 5);
  64. }
  65.  
  66. #define SWAP(so1, so2)   do { \
  67.                 double sotmp = (so1); \
  68.                 (so1) = (so2); \
  69.                 (so2) = sotmp; \
  70.         } while (0)
  71.  
  72. int
  73. main(void)
  74. {
  75.         int i, j, k;
  76.  
  77.         for (i = 0; i < 4; i ++) {
  78.                 for (j = 1; j < 4; j ++) {
  79.                         for (k = 2; k < 4; k ++) {
  80.                                 double val[4];
  81.  
  82.                                 val[0] = 1.0;
  83.                                 val[1] = 5.0;
  84.                                 val[2] = 6.0;
  85.                                 val[3] = 7.0;
  86.                                 SWAP(val[0], val[i]);
  87.                                 SWAP(val[1], val[j]);
  88.                                 SWAP(val[2], val[k]);
  89.                                 enum_expr2(val);
  90.                         }
  91.                 }
  92.         }
  93.         return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement