#include <iostream>
#define num(i) (1ULL << (i - 1))
using namespace std;
inline short numOfBits(uint64_t i)
{
i = i - ((i >> 1) & 0x5555555555555555);
i = (i & 0x3333333333333333) + ((i >> 2) & 0x3333333333333333);
return (((i + (i >> 4)) & 0xF0F0F0F0F0F0F0F) * 0x101010101010101) >> 56;
}
inline uint64_t draw()
{
return (((uint64_t)rand() << 32) | rand()) & 0x3FFFFFFFFFFFF;
}
void printBits(uint64_t input)
{
bool first = true;
for (short i = 1; i < 64; i ++)
if (input & num(i))
{
cout << (first ? "" : ", ") << i;
first = false;
}
}
int main() {
auto myNumbers = num(5) | num(10) | num(15) | num(32) | num(46) | num(3);
srand(time(NULL));
uint64_t result;
do { result ^= draw(); }
while (numOfBits(result) != 6);
cout << "Twoje typy: ";
printBits(myNumbers);
cout << endl;
cout << "Wylosowano: ";
printBits(result);
cout << endl;
cout << "Trafiłeś " << numOfBits(result & myNumbers) << " liczb";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojZGVmaW5lIG51bShpKSAoMVVMTCA8PCAoaSAtIDEpKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW5saW5lIHNob3J0IG51bU9mQml0cyh1aW50NjRfdCBpKQp7CiAgICBpID0gaSAtICgoaSA+PiAxKSAmIDB4NTU1NTU1NTU1NTU1NTU1NSk7CiAgICBpID0gKGkgJiAweDMzMzMzMzMzMzMzMzMzMzMpICsgKChpID4+IDIpICYgMHgzMzMzMzMzMzMzMzMzMzMzKTsKICAgIHJldHVybiAoKChpICsgKGkgPj4gNCkpICYgMHhGMEYwRjBGMEYwRjBGMEYpICogMHgxMDEwMTAxMDEwMTAxMDEpID4+IDU2Owp9CgppbmxpbmUgdWludDY0X3QgZHJhdygpCnsKCXJldHVybiAoKCh1aW50NjRfdClyYW5kKCkgPDwgMzIpIHwgcmFuZCgpKSAmIDB4M0ZGRkZGRkZGRkZGRjsKfQoKdm9pZCBwcmludEJpdHModWludDY0X3QgaW5wdXQpCnsKCWJvb2wgZmlyc3QgPSB0cnVlOwoJZm9yIChzaG9ydCBpID0gMTsgaSA8IDY0OyBpICsrKQoJCWlmIChpbnB1dCAmIG51bShpKSkKCQl7CgkJCWNvdXQgPDwgKGZpcnN0ID8gIiIgOiAiLCAiKSA8PCBpOwoJCQlmaXJzdCA9IGZhbHNlOwoJCX0KfQoKaW50IG1haW4oKSB7CglhdXRvIG15TnVtYmVycyA9IG51bSg1KSB8IG51bSgxMCkgfCBudW0oMTUpIHwgbnVtKDMyKSB8IG51bSg0NikgfCBudW0oMyk7CglzcmFuZCh0aW1lKE5VTEwpKTsKCQoJdWludDY0X3QgcmVzdWx0OwoJZG8geyByZXN1bHQgXj0gZHJhdygpOyB9Cgl3aGlsZSAobnVtT2ZCaXRzKHJlc3VsdCkgIT0gNik7CgkJCgljb3V0IDw8ICJUd29qZSB0eXB5OiAiOwoJcHJpbnRCaXRzKG15TnVtYmVycyk7Cgljb3V0IDw8IGVuZGw7CgoJY291dCA8PCAiV3lsb3Nvd2FubzogIjsKCXByaW50Qml0cyhyZXN1bHQpOwoJY291dCA8PCBlbmRsOwoJCgljb3V0IDw8ICJUcmFmacWCZcWbICIgPDwgbnVtT2ZCaXRzKHJlc3VsdCAmIG15TnVtYmVycykgPDwgIiBsaWN6YiI7CgkKCXJldHVybiAwOwp9
Twoje typy: 3, 5, 10, 15, 32, 46
Wylosowano: 9, 21, 27, 28, 40, 45
Trafiłeś 0 liczb