Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
716
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.15 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #define P (1ul << 0)
  4. #define Q (1ul << 1)
  5. #define R (1ul << 2)
  6. #define S (1ul << 3)
  7. #define T (1ul << 4)
  8. #define NAMES "PQRST"
  9.  
  10. int
  11. main(void)
  12. {
  13.     int nsuspects = 5;
  14.     int counts[] = {1, 1, 3, 1, 1};
  15.     unsigned long rules[] = {
  16.         S|T, 0,
  17.         R|P, P,
  18.         T|S, T|S, 0, S,
  19.         P|Q, Q,
  20.         P|Q, P
  21.     };
  22.  
  23.     for (unsigned long s = 0; s < (1ul << nsuspects); s++) {
  24.         unsigned long *p = rules;
  25.         int valid = 1;
  26.  
  27.         for (int i = 0; i < nsuspects; i++) {
  28.             int guilty = (s >> i) & 1;
  29.             int correct = 0;
  30.             unsigned long care = *p++;
  31.  
  32.             for (int j = 0; j < counts[i]; j++) {
  33.                 unsigned long claim = *p++;
  34.                 if ((claim & care) == (s & care))
  35.                     correct = 1;
  36.             }
  37.  
  38.             if ((correct && guilty) || (!correct && !guilty))
  39.                 valid = 0;
  40.         }
  41.  
  42.         /* Print solution */
  43.         if (valid) {
  44.             for (int i = 0; i < nsuspects; i++)
  45.                 if ((s >> i) & 1)
  46.                     putchar(NAMES[i]);
  47.             putchar('\n');
  48.         }
  49.     }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement