#include <iostream>
#include <string>
#include <math.h>
#include <map>
#include <Windows.h>
#include <console.h>
#include <ConsoleColor.h>
inline void SwapBits(unsigned long long &variable, unsigned char BIT1, unsigned char BIT2)
{
unsigned long long x = ((variable >> BIT1) ^ (variable >> BIT2)) & ((1U << 1) - 1); // XOR temporary
variable ^= ((x << BIT1) | (x << BIT2));
}
unsigned char SwapMap[64] =
{
26,6,1,31,39,20,42,3,26,35,15,16,59,11,56,14,25,38,61,27,36,57,28,62,41,33,2,46,45,64,8,50,17,40,21,44,23,30,12,5,29,53,54,47,13,10,18,49,22,48,19,7,34,63,55,60,52,43,32,37,9,58,4,0
};
inline void EncodeVar(unsigned long long &var)
{
for(unsigned char i = 0; ; )
{
SwapBits(var, i, SwapMap[i]);
if(i == 63)
break;
else
++i;
}
for(unsigned char i = 0; ; )
{
SwapBits(var, SwapMap[i], i);
if(i == 63)
break;
else
++i;
}
}
inline void DecodeVar(unsigned long long &var)
{
for(unsigned char i = 63; ; )
{
SwapBits(var, i, SwapMap[i]);
if(i == 0)
break;
else
--i;
}
for(unsigned char i = 63; ; )
{
SwapBits(var, SwapMap[i], i);
if(i == 0)
break;
else
--i;
}
}
unsigned long long Health;
int main()
{
Health = 1000;
EncodeVar(Health);
while(!GetAsyncKeyState('Q'))
{
Console::Clear();
DecodeVar(Health);
std::cout << Health;
if(GetAsyncKeyState('1'))
{
Health += 1;
}
if(GetAsyncKeyState('2'))
{
Health -= 1;
}
EncodeVar(Health);
std::cout << "\n";
std::cout << Health;
Sleep (33);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8V2luZG93cy5oPgojaW5jbHVkZSA8Y29uc29sZS5oPgojaW5jbHVkZSA8Q29uc29sZUNvbG9yLmg+CgppbmxpbmUgdm9pZCBTd2FwQml0cyh1bnNpZ25lZCBsb25nIGxvbmcgJnZhcmlhYmxlLCB1bnNpZ25lZCBjaGFyIEJJVDEsIHVuc2lnbmVkIGNoYXIgQklUMikKewogICAgdW5zaWduZWQgbG9uZyBsb25nIHggPSAoKHZhcmlhYmxlID4+IEJJVDEpIF4gKHZhcmlhYmxlID4+IEJJVDIpKSAmICgoMVUgPDwgMSkgLSAxKTsgLy8gWE9SIHRlbXBvcmFyeQoJdmFyaWFibGUgXj0gKCh4IDw8IEJJVDEpIHwgKHggPDwgQklUMikpOwp9Cgp1bnNpZ25lZCBjaGFyIFN3YXBNYXBbNjRdID0KewoJMjYsNiwxLDMxLDM5LDIwLDQyLDMsMjYsMzUsMTUsMTYsNTksMTEsNTYsMTQsMjUsMzgsNjEsMjcsMzYsNTcsMjgsNjIsNDEsMzMsMiw0Niw0NSw2NCw4LDUwLDE3LDQwLDIxLDQ0LDIzLDMwLDEyLDUsMjksNTMsNTQsNDcsMTMsMTAsMTgsNDksMjIsNDgsMTksNywzNCw2Myw1NSw2MCw1Miw0MywzMiwzNyw5LDU4LDQsMAp9OwoKaW5saW5lIHZvaWQgRW5jb2RlVmFyKHVuc2lnbmVkIGxvbmcgbG9uZyAmdmFyKQp7Cglmb3IodW5zaWduZWQgY2hhciBpID0gMDsgOyApCgl7CgkJU3dhcEJpdHModmFyLCBpLCBTd2FwTWFwW2ldKTsKCQlpZihpID09IDYzKQoJCQlicmVhazsKCQllbHNlCgkJCSsraTsKCX0KCWZvcih1bnNpZ25lZCBjaGFyIGkgPSAwOyA7ICkKCXsKCQlTd2FwQml0cyh2YXIsIFN3YXBNYXBbaV0sIGkpOwoJCWlmKGkgPT0gNjMpCgkJCWJyZWFrOwoJCWVsc2UKCQkJKytpOwoJfQp9CgppbmxpbmUgdm9pZCBEZWNvZGVWYXIodW5zaWduZWQgbG9uZyBsb25nICZ2YXIpCnsKCWZvcih1bnNpZ25lZCBjaGFyIGkgPSA2MzsgOyApCgl7CgkJU3dhcEJpdHModmFyLCBpLCBTd2FwTWFwW2ldKTsKCQlpZihpID09IDApCgkJCWJyZWFrOwoJCWVsc2UKCQkJLS1pOwoJfQoJZm9yKHVuc2lnbmVkIGNoYXIgaSA9IDYzOyA7ICkKCXsKCQlTd2FwQml0cyh2YXIsIFN3YXBNYXBbaV0sIGkpOwoJCWlmKGkgPT0gMCkKCQkJYnJlYWs7CgkJZWxzZQoJCQktLWk7Cgl9Cn0KCnVuc2lnbmVkIGxvbmcgbG9uZyBIZWFsdGg7CmludCBtYWluKCkKewoJSGVhbHRoID0gMTAwMDsKCUVuY29kZVZhcihIZWFsdGgpOwoJd2hpbGUoIUdldEFzeW5jS2V5U3RhdGUoJ1EnKSkKCXsKCQlDb25zb2xlOjpDbGVhcigpOwoJCURlY29kZVZhcihIZWFsdGgpOwoJCXN0ZDo6Y291dCA8PCBIZWFsdGg7CgkJaWYoR2V0QXN5bmNLZXlTdGF0ZSgnMScpKQoJCXsKCQkJSGVhbHRoICs9IDE7CgkJfQoJCWlmKEdldEFzeW5jS2V5U3RhdGUoJzInKSkKCQl7CgkJCUhlYWx0aCAtPSAxOwoJCX0KCQlFbmNvZGVWYXIoSGVhbHRoKTsKCQlzdGQ6OmNvdXQgPDwgIlxuIjsKCQlzdGQ6OmNvdXQgPDwgSGVhbHRoOwoJCVNsZWVwICgzMyk7Cgl9CglyZXR1cm4gMDsKfQ==