#include <iostream>
#include <cmath>
#include <vector>
void _to_bin(int num, std::vector<int> * out) {
if (num / 2)
_to_bin(num/2, out);
out->push_back(num % 2);
}
void to_bin(int num, int numDigit) {
std::vector<int> out;
_to_bin(num, &out);
for(int i = 0; i < numDigit - out.size(); ++i)
std::cout << 0;
for(int i = 0; i < out.size(); ++i)
std::cout << out.at(i);
std::cout << std::endl;
}
void to0101(int numDigit) {
// all 0
for(int fist_01_pos = 0; fist_01_pos < numDigit - 1; ++fist_01_pos) {
int mask = 0;
mask |= (1 << fist_01_pos);
for(int second_01_pos = 2 + fist_01_pos; second_01_pos < numDigit - 1; ++second_01_pos) {
int result = mask;
result |= (1 << second_01_pos);
to_bin(result, numDigit);
}
}
// all 1
for(int fist_01_pos = 0; fist_01_pos < numDigit - 1; ++fist_01_pos) {
// slow but short code to get all bits set to 1
int mask = (int)pow(2,numDigit) - 1;
mask ^= (2 << fist_01_pos);
for(int second_01_pos = 2 + fist_01_pos; second_01_pos < numDigit - 1; ++second_01_pos) {
int result = mask;
result ^= (2 << second_01_pos);
to_bin(result, numDigit);
}
}
}
int main() {
std::cout << std::endl << "5 digits" << std::endl << std::endl;
to0101(5);
std::cout << std::endl << "10 digits" << std::endl << std::endl;
to0101(10);
std::cout << std::endl << "15 digits" << std::endl << std::endl;
to0101(15);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp2b2lkIF90b19iaW4oaW50IG51bSwgc3RkOjp2ZWN0b3I8aW50PiAqIG91dCkgewogICAgaWYgKG51bSAvIDIpCiAgICAgICAgX3RvX2JpbihudW0vMiwgb3V0KTsKICAgIG91dC0+cHVzaF9iYWNrKG51bSAlIDIpOwp9Cgp2b2lkIHRvX2JpbihpbnQgbnVtLCBpbnQgbnVtRGlnaXQpIHsKICAgIHN0ZDo6dmVjdG9yPGludD4gb3V0OwogICAgX3RvX2JpbihudW0sICZvdXQpOwogICAgZm9yKGludCBpID0gMDsgaSA8IG51bURpZ2l0IC0gb3V0LnNpemUoKTsgKytpKQogICAgICAgIHN0ZDo6Y291dCA8PCAwOwogICAgZm9yKGludCBpID0gMDsgaSA8IG91dC5zaXplKCk7ICsraSkKICAgICAgICBzdGQ6OmNvdXQgPDwgb3V0LmF0KGkpOwogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKfQoKdm9pZCB0bzAxMDEoaW50IG51bURpZ2l0KSB7CiAgICAvLyBhbGwgMAogICAgZm9yKGludCBmaXN0XzAxX3BvcyA9IDA7IGZpc3RfMDFfcG9zIDwgbnVtRGlnaXQgLSAxOyArK2Zpc3RfMDFfcG9zKSB7CiAgICAgICAgaW50IG1hc2sgPSAwOwogICAgICAgIG1hc2sgfD0gKDEgPDwgZmlzdF8wMV9wb3MpOwogICAgICAgIGZvcihpbnQgc2Vjb25kXzAxX3BvcyA9IDIgKyBmaXN0XzAxX3Bvczsgc2Vjb25kXzAxX3BvcyA8IG51bURpZ2l0IC0gMTsgKytzZWNvbmRfMDFfcG9zKSB7CiAgICAgICAgICAgIGludCByZXN1bHQgPSBtYXNrOwogICAgICAgICAgICByZXN1bHQgfD0gKDEgPDwgc2Vjb25kXzAxX3Bvcyk7CiAgICAgICAgICAgIHRvX2JpbihyZXN1bHQsIG51bURpZ2l0KTsKICAgICAgICB9CiAgICB9CgogICAgLy8gYWxsIDEKICAgIGZvcihpbnQgZmlzdF8wMV9wb3MgPSAwOyBmaXN0XzAxX3BvcyA8IG51bURpZ2l0IC0gMTsgKytmaXN0XzAxX3BvcykgewogICAgICAgIC8vIHNsb3cgYnV0IHNob3J0IGNvZGUgdG8gZ2V0IGFsbCBiaXRzIHNldCB0byAxCiAgICAgICAgaW50IG1hc2sgPSAoaW50KXBvdygyLG51bURpZ2l0KSAtIDE7CiAgICAgICAgbWFzayBePSAoMiA8PCBmaXN0XzAxX3Bvcyk7CiAgICAgICAgZm9yKGludCBzZWNvbmRfMDFfcG9zID0gMiArIGZpc3RfMDFfcG9zOyBzZWNvbmRfMDFfcG9zIDwgbnVtRGlnaXQgLSAxOyArK3NlY29uZF8wMV9wb3MpIHsKICAgICAgICAgICAgaW50IHJlc3VsdCA9IG1hc2s7CiAgICAgICAgICAgIHJlc3VsdCBePSAoMiA8PCBzZWNvbmRfMDFfcG9zKTsKICAgICAgICAgICAgdG9fYmluKHJlc3VsdCwgbnVtRGlnaXQpOwogICAgICAgIH0KICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsIDw8ICI1IGRpZ2l0cyIgPDwgc3RkOjplbmRsIDw8IHN0ZDo6ZW5kbDsKICAgIHRvMDEwMSg1KTsKICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGwgPDwgIjEwIGRpZ2l0cyIgPDwgc3RkOjplbmRsIDw8IHN0ZDo6ZW5kbDsKICAgIHRvMDEwMSgxMCk7CiAgICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsIDw8ICIxNSBkaWdpdHMiIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7CiAgICB0bzAxMDEoMTUpOwogICAgcmV0dXJuIDA7Cn0K