#include <iostream>
#include <cmath>
using namespace std;
int original(int turn) {
if (turn != 0) {
if (turn > 0) {
turn /= 45;
if (turn < 4) turn = 4;
if (turn > 8) turn = 8;
} else {
turn /= 45;
if (turn > -4) turn = -4;
if (turn < -8) turn = -8;
}
}
return turn;
}
int optimized(int turn) {
int s=turn>>31,a=turn+s^s,b=(a>360?524288:a>180?a*1457:262144)>>16;
return b+s^s;
}
int main() {
int errors = 0;
for (int i = -720; i < 720; ++i) if (i != 0) {
int t1 = original(i);
int t2 = optimized(i);
if (t1 != t2) {
std::cout << "at " << i << " expected " << t1 << " got " << t2 << std::endl;
++errors;
}
}
std::cout << "errors: " << errors << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgb3JpZ2luYWwoaW50IHR1cm4pIHsKICAgIGlmICh0dXJuICE9IDApIHsKICAgICAgICBpZiAodHVybiA+IDApIHsKICAgICAgICAgICAgdHVybiAvPSA0NTsKICAgICAgICAgICAgaWYgKHR1cm4gPCA0KSB0dXJuID0gNDsKICAgICAgICAgICAgaWYgKHR1cm4gPiA4KSB0dXJuID0gODsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0dXJuIC89IDQ1OwogICAgICAgICAgICBpZiAodHVybiA+IC00KSB0dXJuID0gLTQ7CiAgICAgICAgICAgIGlmICh0dXJuIDwgLTgpIHR1cm4gPSAtODsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdHVybjsKfQoKCmludCBvcHRpbWl6ZWQoaW50IHR1cm4pIHsKICAgIGludCBzPXR1cm4+PjMxLGE9dHVybitzXnMsYj0oYT4zNjA/NTI0Mjg4OmE+MTgwP2EqMTQ1NzoyNjIxNDQpPj4xNjsKICAgIHJldHVybiBiK3NeczsKfQoKCmludCBtYWluKCkgewogICAgaW50IGVycm9ycyA9IDA7CiAgICBmb3IgKGludCBpID0gLTcyMDsgaSA8IDcyMDsgKytpKSBpZiAoaSAhPSAwKSB7CiAgICAgICAgaW50IHQxID0gb3JpZ2luYWwoaSk7CiAgICAgICAgaW50IHQyID0gb3B0aW1pemVkKGkpOwogICAgICAgIGlmICh0MSAhPSB0MikgewogICAgICAgICAgICBzdGQ6OmNvdXQgPDwgImF0ICIgPDwgaSA8PCAgIiBleHBlY3RlZCAiIDw8IHQxIDw8ICIgZ290ICIgPDwgdDIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICArK2Vycm9yczsKICAgICAgICB9CiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgImVycm9yczogIiA8PCBlcnJvcnMgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIDA7Cn0=