#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;
}