public class Main {
private static final int NORTH = 0x11111111; // 0001 0001 0001 ...
private static final int EAST = 0x22222222; // 0010 0010 ...
private static final int SOUTH = 0x44444444; // 0100 0100 ...
private static final int WEST = 0x88888888; // 1000 1000 ...
static int leftOf(int direction) {
return Integer.
rotateLeft(direction,
1); }
static int rightOf(int direction) {
return Integer.
rotateRight(direction,
1); }
static String getName
(int dir
) { switch (dir) {
case NORTH:
return "North";
case EAST:
return "East";
case SOUTH:
return "South";
case WEST:
return "West";
default:
return "Error";
}
}
static final int[] TESTCASES = {
NORTH,
EAST,
SOUTH,
WEST
};
public static void main
(String[] args
) { for (int test : TESTCASES) {
System.
out.
printf("left: %5s self: %5s right:%5s%n",
getName(leftOf(test)),
getName(test),
getName(rightOf(test))
);
}
}
}
cHVibGljIGNsYXNzIE1haW4gewoKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOT1JUSCA9IDB4MTExMTExMTE7IC8vIDAwMDEgMDAwMSAwMDAxIC4uLgogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVBU1QgPSAweDIyMjIyMjIyOyAvLyAwMDEwIDAwMTAgLi4uCiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU09VVEggPSAweDQ0NDQ0NDQ0OyAvLyAwMTAwIDAxMDAgLi4uCiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0VTVCA9IDB4ODg4ODg4ODg7IC8vIDEwMDAgMTAwMCAuLi4KCiAgICBzdGF0aWMgaW50IGxlZnRPZihpbnQgZGlyZWN0aW9uKSB7CiAgICAgICAgcmV0dXJuIEludGVnZXIucm90YXRlTGVmdChkaXJlY3Rpb24sIDEpOwogICAgfQoKICAgIHN0YXRpYyBpbnQgcmlnaHRPZihpbnQgZGlyZWN0aW9uKSB7CiAgICAgICAgcmV0dXJuIEludGVnZXIucm90YXRlUmlnaHQoZGlyZWN0aW9uLCAxKTsKICAgIH0KCiAgICBzdGF0aWMgU3RyaW5nIGdldE5hbWUoaW50IGRpcikgewogICAgICAgIHN3aXRjaCAoZGlyKSB7CiAgICAgICAgICAgIGNhc2UgTk9SVEg6CiAgICAgICAgICAgICAgICByZXR1cm4gIk5vcnRoIjsKICAgICAgICAgICAgY2FzZSBFQVNUOgogICAgICAgICAgICAgICAgcmV0dXJuICJFYXN0IjsKICAgICAgICAgICAgY2FzZSBTT1VUSDoKICAgICAgICAgICAgICAgIHJldHVybiAiU291dGgiOwogICAgICAgICAgICBjYXNlIFdFU1Q6CiAgICAgICAgICAgICAgICByZXR1cm4gIldlc3QiOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcmV0dXJuICJFcnJvciI7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyBmaW5hbCBpbnRbXSBURVNUQ0FTRVMgPSB7CiAgICAgICAgICAgIE5PUlRILAogICAgICAgICAgICBFQVNULAogICAgICAgICAgICBTT1VUSCwKICAgICAgICAgICAgV0VTVAogICAgfTsKCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgZm9yIChpbnQgdGVzdCA6IFRFU1RDQVNFUykgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigibGVmdDogJTVzICAgc2VsZjogJTVzICAgcmlnaHQ6JTVzJW4iLAogICAgICAgICAgICAgICAgICAgIGdldE5hbWUobGVmdE9mKHRlc3QpKSwKICAgICAgICAgICAgICAgICAgICBnZXROYW1lKHRlc3QpLAogICAgICAgICAgICAgICAgICAgIGdldE5hbWUocmlnaHRPZih0ZXN0KSkKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCn0=