fork(1) download
  1. #include <iostream>
  2. #define num(i) (1ULL << (i - 1))
  3. using namespace std;
  4.  
  5. inline short numOfBits(uint64_t i)
  6. {
  7. i = i - ((i >> 1) & 0x5555555555555555);
  8. i = (i & 0x3333333333333333) + ((i >> 2) & 0x3333333333333333);
  9. return (((i + (i >> 4)) & 0xF0F0F0F0F0F0F0F) * 0x101010101010101) >> 56;
  10. }
  11.  
  12. inline uint64_t draw()
  13. {
  14. return (((uint64_t)rand() << 32) | rand()) & 0x3FFFFFFFFFFFF;
  15. }
  16.  
  17. void printBits(uint64_t input)
  18. {
  19. bool first = true;
  20. for (short i = 1; i < 64; i ++)
  21. if (input & num(i))
  22. {
  23. cout << (first ? "" : ", ") << i;
  24. first = false;
  25. }
  26. }
  27.  
  28. int main() {
  29. auto myNumbers = num(5) | num(10) | num(15) | num(32) | num(46) | num(3);
  30. srand(time(NULL));
  31.  
  32. uint64_t result;
  33. do { result ^= draw(); }
  34. while (numOfBits(result) != 6);
  35.  
  36. cout << "Twoje typy: ";
  37. printBits(myNumbers);
  38. cout << endl;
  39.  
  40. cout << "Wylosowano: ";
  41. printBits(result);
  42. cout << endl;
  43.  
  44. cout << "Trafiłeś " << numOfBits(result & myNumbers) << " liczb";
  45.  
  46. return 0;
  47. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
Twoje typy: 3, 5, 10, 15, 32, 46
Wylosowano: 9, 21, 27, 28, 40, 45
Trafiłeś 0 liczb