// initial declarations
RobotController rc = Robot.rc;
if(!rc.isMovementReady()) return Direction.CENTER;
MapLocation myLocation = rc.getLocation();
Direction d3 = myLocation.directionTo(target);
double targetDist = Math.pow(Math.pow(myLocation.x - target.x, 4) + Math.pow(myLocation.y - target.y, 4), 0.25);
// update turnsSinceMovedCloserToTarget
if(target.equals(lastTarget)) {
if(targetDist < minTargetDist) { minTargetDist = targetDist; turnsSinceMovedCloserToTarget = 0; }
else turnsSinceMovedCloserToTarget++;
} else { lastTarget = target; minTargetDist = targetDist; }
switch (d3) {
case NORTHEAST: d3 = Direction.NORTH; break;
case NORTHWEST: d3 = Direction.WEST; break;
case SOUTHWEST: d3 = Direction.SOUTH; break;
case SOUTHEAST: d3 = Direction.EAST; break;
}
Direction d2 = d3.rotateLeft();
Direction d1 = d2.rotateLeft();
Direction d0 = d1.rotateLeft();
Direction d4 = d3.rotateRight();
Direction d5 = d4.rotateRight();
Direction d6 = d5.rotateRight();
if (turnsSinceMovedCloserToTarget > 3) {
l42 = myLocation.add(d3); r42 = rc.canMove(d3) ? ((Math.pow(Math.pow(l42.x - target.x, 4) + Math.pow(l42.y - target.y, 4), 0.25) < targetDist) ? 0 : 10000) : 1000000;
l32 = myLocation.add(d2); r32 = rc.canMove(d2) ? ((Math.pow(Math.pow(l32.x - target.x, 4) + Math.pow(l32.y - target.y, 4), 0.25) < targetDist) ? 0 : 10001) : 1000001;
l52 = myLocation.add(d4); r52 = rc.canMove(d4) ? ((Math.pow(Math.pow(l52.x - target.x, 4) + Math.pow(l52.y - target.y, 4), 0.25) < targetDist) ? 0 : 10001) : 1000001;
l31 = myLocation.add(d1); r31 = rc.canMove(d1) ? ((Math.pow(Math.pow(l31.x - target.x, 4) + Math.pow(l31.y - target.y, 4), 0.25) < targetDist) ? 0 : 10002) : 1000002;
l51 = myLocation.add(d5); r51 = rc.canMove(d5) ? ((Math.pow(Math.pow(l51.x - target.x, 4) + Math.pow(l51.y - target.y, 4), 0.25) < targetDist) ? 0 : 10002) : 1000002;
l30 = myLocation.add(d0); r30 = rc.canMove(d0) ? ((Math.pow(Math.pow(l30.x - target.x, 4) + Math.pow(l30.y - target.y, 4), 0.25) < targetDist) ? 0 : 10003) : 1000003;
l50 = myLocation.add(d6); r50 = rc.canMove(d6) ? ((Math.pow(Math.pow(l50.x - target.x, 4) + Math.pow(l50.y - target.y, 4), 0.25) < targetDist) ? 0 : 10003) : 1000003;
} else {
l42 = myLocation.add(d3); r42 = rc.canMove(d3) ? 0 : 1000000;
l32 = myLocation.add(d2); r32 = rc.canMove(d2) ? 0 : 1000001;
l52 = myLocation.add(d4); r52 = rc.canMove(d4) ? 0 : 1000001;
l31 = myLocation.add(d1); r31 = rc.canMove(d1) ? 0 : 1000002;
l51 = myLocation.add(d5); r51 = rc.canMove(d5) ? 0 : 1000002;
l30 = myLocation.add(d0); r30 = rc.canMove(d0) ? 0 : 1000003;
l50 = myLocation.add(d6); r50 = rc.canMove(d6) ? 0 : 1000003;
}
l33 = l32.add(d3); r33 = 1000000;
l43 = l42.add(d3); r43 = 1000000;
l53 = l52.add(d3); r53 = 1000000;
l34 = l33.add(d3); r34 = 1000000;
l44 = l43.add(d3); r44 = 1000000;
l54 = l53.add(d3); r54 = 1000000;
l35 = l34.add(d3); r35 = 1000000;
l45 = l44.add(d3); r45 = 1000000;
l55 = l54.add(d3); r55 = 1000000;
l20 = l30.add(d1); r20 = 1000000;
l10 = l20.add(d1); r10 = 1000000;
l00 = l10.add(d1); r00 = 1000000;
l60 = l50.add(d5); r60 = 1000000;
l70 = l60.add(d5); r70 = 1000000;
l80 = l70.add(d5); r80 = 1000000;
l21 = l31.add(d1); r21 = 1000000;
l11 = l21.add(d1); r11 = 1000000;
l01 = l11.add(d1); r01 = 1000000;
l61 = l51.add(d5); r61 = 1000000;
l71 = l61.add(d5); r71 = 1000000;
l81 = l71.add(d5); r81 = 1000000;
l22 = l32.add(d1); r22 = 1000000;
l12 = l22.add(d1); r12 = 1000000;
l02 = l12.add(d1); r02 = 1000000;
l62 = l52.add(d5); r62 = 1000000;
l72 = l62.add(d5); r72 = 1000000;
l82 = l72.add(d5); r82 = 1000000;
l23 = l33.add(d1); r23 = 1000000;
l13 = l23.add(d1); r13 = 1000000;
l03 = l13.add(d1); r03 = 1000000;
l63 = l53.add(d5); r63 = 1000000;
l73 = l63.add(d5); r73 = 1000000;
l83 = l73.add(d5); r83 = 1000000;
l24 = l34.add(d1); r24 = 1000000;
l14 = l24.add(d1); r14 = 1000000;
l64 = l54.add(d5); r64 = 1000000;
l74 = l64.add(d5); r74 = 1000000;
l25 = l35.add(d1); r25 = 1000000;
l65 = l55.add(d5); r65 = 1000000;
int bestD = 7;
double bestR = 10000000;
int[] cooldownInRubble = Pathfinding.cooldownInRubble;
MapLocation bestL = null;
if_else: if(myLocation.isWithinDistanceSquared(target, 20)) { // TARGET VISIBLE
if (rc.onTheMap(l42)) { // (4, 2) -> (3, 3), (4, 3), (5, 3)
if(l42.equals(target)) { bestD = d42; break if_else; }
r42 += cooldownInRubble[rc.senseRubble(l42)];
if (r42 < r33) { r33 = r42; d33 = d42; }
if (r42 < r43) { r43 = r42; d43 = d42; }
if (r42 < r53) { r53 = r42; d53 = d42; }
}
if (rc.onTheMap(l32)) { // (3, 2) -> (2, 1), (2, 2), (2, 3), (3, 3), (4, 3)
if(l32.equals(target)) { bestD = d32; break if_else; }
r32 += cooldownInRubble[rc.senseRubble(l32)];
if (r32 < r21) { r21 = r32; d21 = d32; }
if (r32 < r22) { r22 = r32; d22 = d32; }
if (r32 < r23) { r23 = r32; d23 = d32; }
if (r32 < r33) { r33 = r32; d33 = d32; }
if (r32 < r43) { r43 = r32; d43 = d32; }
}
if (rc.onTheMap(l52)) { // (5, 2) -> (6, 1), (6, 2), (6, 3), (5, 3), (4, 3)
if(l52.equals(target)) { bestD = d52; break if_else; }
r52 += cooldownInRubble[rc.senseRubble(l52)];
if (r52 < r61) { r61 = r52; d61 = d52; }
if (r52 < r62) { r62 = r52; d62 = d52; }
if (r52 < r63) { r63 = r52; d63 = d52; }
if (r52 < r53) { r53 = r52; d53 = d52; }
if (r52 < r43) { r43 = r52; d43 = d52; }
}
if (rc.onTheMap(l31)) { // (3, 1) -> (2, 0), (2, 1), (2, 2)
if(l31.equals(target)) { bestD = d31; break if_else; }
r31 += cooldownInRubble[rc.senseRubble(l31)];
if (r31 < r20) { r20 = r31; d20 = d31; }
if (r31 < r21) { r21 = r31; d21 = d31; }
if (r31 < r22) { r22 = r31; d22 = d31; }
}
if (rc.onTheMap(l51)) { // (5, 1) -> (6, 0), (6, 1), (6, 2)
if(l51.equals(target)) { bestD = d51; break if_else; }
r51 += cooldownInRubble[rc.senseRubble(l51)];
if (r51 < r60) { r60 = r51; d60 = d51; }
if (r51 < r61) { r61 = r51; d61 = d51; }
if (r51 < r62) { r62 = r51; d62 = d51; }
}
if (rc.onTheMap(l30)) { // (3, 0) -> (2, 0), (2, 1)
if(l30.equals(target)) { bestD = d30; break if_else; }
r30 += cooldownInRubble[rc.senseRubble(l30)];
if (r30 < r20) { r20 = r30; d20 = d30; }
if (r30 < r21) { r21 = r30; d21 = d30; }
}
if (rc.onTheMap(l50)) { // (5, 0) -> (6, 0), (6, 1)
if(l50.equals(target)) { bestD = d50; break if_else; }
r50 += cooldownInRubble[rc.senseRubble(l50)];
if (r50 < r60) { r60 = r50; d60 = d50; }
if (r50 < r61) { r61 = r50; d61 = d50; }
}
if (rc.onTheMap(l20)) { // (2, 0) -> (1, 0), (1, 1), (2, 1)
if(l20.equals(target)) { bestD = d20; break if_else; }
r20 += cooldownInRubble[rc.senseRubble(l20)];
if (r20 < r10) { r10 = r20; d10 = d20; }
if (r20 < r11) { r11 = r20; d11 = d20; }
if (r20 < r21) { r21 = r20; d21 = d20; }
}
if (rc.onTheMap(l10)) { // (1, 0) -> (0, 0), (0, 1), (1, 1)
if(l10.equals(target)) { bestD = d10; break if_else; }
r10 += cooldownInRubble[rc.senseRubble(l10)];
if (r10 < r00) { r00 = r10; d00 = d10; }
if (r10 < r01) { r01 = r10; d01 = d10; }
if (r10 < r11) { r11 = r10; d11 = d10; }
}
if (rc.onTheMap(l00)) { // (0, 0) -> (0, 1), (*)
if(l00.equals(target)) { bestD = d00; break if_else; }
r00 += cooldownInRubble[rc.senseRubble(l00)];
}
if (rc.onTheMap(l60)) { // (6, 0) -> (7, 0), (6, 1), (7, 1)
if(l60.equals(target)) { bestD = d60; break if_else; }
r60 += cooldownInRubble[rc.senseRubble(l60)];
if (r60 < r70) { r70 = r60; d70 = d60; }
if (r60 < r61) { r61 = r60; d61 = d60; }
if (r60 < r71) { r71 = r60; d71 = d60; }
}
if (rc.onTheMap(l70)) { // (7, 0) -> (8, 0), (7, 1), (8, 1)
if(l70.equals(target)) { bestD = d70; break if_else; }
r70 += cooldownInRubble[rc.senseRubble(l70)];
if (r70 < r80) { r80 = r70; d80 = d70; }
if (r70 < r71) { r71 = r70; d71 = d70; }
if (r70 < r81) { r81 = r70; d81 = d70; }
}
if (rc.onTheMap(l80)) { // (8, 0) -> (8, 1), (*)
if(l80.equals(target)) { bestD = d80; break if_else; }
r80 += cooldownInRubble[rc.senseRubble(l80)];
}
if (rc.onTheMap(l21)) { // (2, 1) -> (1, 1), (1, 2), (2, 2)
if(l21.equals(target)) { bestD = d21; break if_else; }
r21 += cooldownInRubble[rc.senseRubble(l21)];
if (r21 < r11) { r11 = r21; d11 = d21; }
if (r21 < r12) { r12 = r21; d12 = d21; }
if (r21 < r22) { r22 = r21; d22 = d21; }
}
if (rc.onTheMap(l11)) { // (1, 1) -> (0, 1), (0, 2), (1, 2), (2, 2)
if(l11.equals(target)) { bestD = d11; break if_else; }
r11 += cooldownInRubble[rc.senseRubble(l11)];
if (r11 < r01) { r01 = r11; d01 = d11; }
if (r11 < r02) { r02 = r11; d02 = d11; }
if (r11 < r12) { r12 = r11; d12 = d11; }
if (r11 < r22) { r22 = r11; d22 = d11; }
}
if (rc.onTheMap(l01)) { // (0, 1) -> (0, 2), (1, 2), (*)
if(l01.equals(target)) { bestD = d01; break if_else; }
r01 += cooldownInRubble[rc.senseRubble(l01)];
}
if (rc.onTheMap(l61)) { // (6, 1) -> (7, 1), (6, 2), (7, 2)
if(l61.equals(target)) { bestD = d61; break if_else; }
r61 += cooldownInRubble[rc.senseRubble(l61)];
if (r61 < r71) { r71 = r61; d71 = d61; }
if (r61 < r62) { r62 = r61; d62 = d61; }
if (r61 < r72) { r72 = r61; d72 = d61; }
}
if (rc.onTheMap(l71)) { // (7, 1) -> (8, 1), (6, 2), (7, 2), (8, 2)
if(l71.equals(target)) { bestD = d71; break if_else; }
r71 += cooldownInRubble[rc.senseRubble(l71)];
if (r71 < r81) { r81 = r71; d81 = d71; }
if (r71 < r62) { r62 = r71; d62 = d71; }
if (r71 < r72) { r72 = r71; d72 = d71; }
if (r71 < r82) { r82 = r71; d82 = d71; }
}
if (rc.onTheMap(l81)) { // (8, 1) -> (7, 2), (8, 2), (*)
if(l81.equals(target)) { bestD = d81; break if_else; }
r81 += cooldownInRubble[rc.senseRubble(l81)];
}
if (rc.onTheMap(l22)) { // (2, 2) -> (1, 2), (1, 3), (2, 3), (3, 3)
if(l22.equals(target)) { bestD = d22; break if_else; }
r22 += cooldownInRubble[rc.senseRubble(l22)];
if (r22 < r12) { r12 = r22; d12 = d22; }
if (r22 < r13) { r13 = r22; d13 = d22; }
if (r22 < r23) { r23 = r22; d23 = d22; }
if (r22 < r33) { r33 = r22; d33 = d22; }
}
if (rc.onTheMap(l12)) { // (1, 2) -> (0, 2), (0, 3), (1, 3), (2, 3)
if(l12.equals(target)) { bestD = d12; break if_else; }
r12 += cooldownInRubble[rc.senseRubble(l12)];
if (r12 < r02) { r02 = r12; d02 = d12; }
if (r12 < r03) { r03 = r12; d03 = d12; }
if (r12 < r13) { r13 = r12; d13 = d12; }
if (r12 < r23) { r23 = r12; d23 = d12; }
}
if (rc.onTheMap(l02)) { // (0, 2) -> (0, 3), (1, 3), (*)
if(l02.equals(target)) { bestD = d02; break if_else; }
r02 += cooldownInRubble[rc.senseRubble(l02)];
}
if (rc.onTheMap(l62)) { // (6, 2) -> (7, 2), (5, 3), (6, 3), (7, 3)
if(l62.equals(target)) { bestD = d62; break if_else; }
r62 += cooldownInRubble[rc.senseRubble(l62)];
if (r62 < r72) { r72 = r62; d72 = d62; }
if (r62 < r53) { r53 = r62; d53 = d62; }
if (r62 < r63) { r63 = r62; d63 = d62; }
if (r62 < r73) { r73 = r62; d73 = d62; }
}
if (rc.onTheMap(l72)) { // (7, 2) -> (8, 2), (6, 3), (7, 3), (8, 3)
if(l72.equals(target)) { bestD = d72; break if_else; }
r72 += cooldownInRubble[rc.senseRubble(l72)];
if (r72 < r82) { r82 = r72; d82 = d72; }
if (r72 < r63) { r63 = r72; d63 = d72; }
if (r72 < r73) { r73 = r72; d73 = d72; }
if (r72 < r83) { r83 = r72; d83 = d72; }
}
if (rc.onTheMap(l82)) { // (8, 2) -> (7, 3), (8, 3), (*)
if(l82.equals(target)) { bestD = d82; break if_else; }
r82 += cooldownInRubble[rc.senseRubble(l82)];
}
if (rc.onTheMap(l43)) { // (4, 3) -> (3, 3), (5, 3), (3, 4), (4, 4), (5, 4)
if(l43.equals(target)) { bestD = d43; break if_else; }
r43 += cooldownInRubble[rc.senseRubble(l43)];
if (r43 < r33) { r33 = r43; d33 = d43; }
if (r43 < r53) { r53 = r43; d53 = d43; }
if (r43 < r34) { r34 = r43; d34 = d43; }
if (r43 < r44) { r44 = r43; d44 = d43; }
if (r43 < r54) { r54 = r43; d54 = d43; }
}
if (rc.onTheMap(l33)) { // (3, 3) -> (2, 3), (2, 4), (3, 4), (4, 4)
if(l33.equals(target)) { bestD = d33; break if_else; }
r33 += cooldownInRubble[rc.senseRubble(l33)];
if (r33 < r23) { r23 = r33; d23 = d33; }
if (r33 < r24) { r24 = r33; d24 = d33; }
if (r33 < r34) { r34 = r33; d34 = d33; }
if (r33 < r44) { r44 = r33; d44 = d33; }
}
if (rc.onTheMap(l23)) { // (2, 3) -> (1, 3), (1, 4), (2, 4), (3, 4)
if(l23.equals(target)) { bestD = d23; break if_else; }
r23 += cooldownInRubble[rc.senseRubble(l23)];
if (r23 < r13) { r13 = r23; d13 = d23; }
if (r23 < r14) { r14 = r23; d14 = d23; }
if (r23 < r24) { r24 = r23; d24 = d23; }
if (r23 < r34) { r34 = r23; d34 = d23; }
}
if (rc.onTheMap(l13)) { // (1, 3) -> (0, 3), (1, 4), (2, 4), (*)
if(l13.equals(target)) { bestD = d13; break if_else; }
r13 += cooldownInRubble[rc.senseRubble(l13)];
}
if (rc.onTheMap(l03)) { // (0, 3) -> (1, 4), (*)
if(l03.equals(target)) { bestD = d03; break if_else; }
r03 += cooldownInRubble[rc.senseRubble(l03)];
}
if (rc.onTheMap(l53)) { // (5, 3) -> (6, 3), (4, 4), (5, 4), (6, 4)
if(l53.equals(target)) { bestD = d53; break if_else; }
r53 += cooldownInRubble[rc.senseRubble(l53)];
if (r53 < r63) { r63 = r53; d63 = d53; }
if (r53 < r44) { r44 = r53; d44 = d53; }
if (r53 < r54) { r54 = r53; d54 = d53; }
if (r53 < r64) { r64 = r53; d64 = d53; }
}
if (rc.onTheMap(l63)) { // (6, 3) -> (7, 3), (5, 4), (6, 4), (7, 4)
if(l63.equals(target)) { bestD = d63; break if_else; }
r63 += cooldownInRubble[rc.senseRubble(l63)];
if (r63 < r73) { r73 = r63; d73 = d63; }
if (r63 < r54) { r54 = r63; d54 = d63; }
if (r63 < r64) { r64 = r63; d64 = d63; }
if (r63 < r74) { r74 = r63; d74 = d63; }
}
if (rc.onTheMap(l73)) { // (7, 3) -> (8, 3), (6, 4), (7, 4), (*)
if(l73.equals(target)) { bestD = d73; break if_else; }
r73 += cooldownInRubble[rc.senseRubble(l73)];
}
if (rc.onTheMap(l83)) { // (8, 3) -> (7, 4), (*)
if(l83.equals(target)) { bestD = d83; break if_else; }
r83 += cooldownInRubble[rc.senseRubble(l83)];
}
if (rc.onTheMap(l44)) { // (4, 4) -> (3, 4), (5, 4), (3, 5), (4, 5), (5, 5)
if(l44.equals(target)) { bestD = d44; break if_else; }
r44 += cooldownInRubble[rc.senseRubble(l44)];
if (r44 < r34) { r34 = r44; d34 = d44; }
if (r44 < r54) { r54 = r44; d54 = d44; }
if (r44 < r35) { r35 = r44; d35 = d44; }
if (r44 < r45) { r45 = r44; d45 = d44; }
if (r44 < r55) { r55 = r44; d55 = d44; }
}
if (rc.onTheMap(l34)) { // (3, 4) -> (2, 4), (2, 5), (3, 5), (4, 5)
if(l34.equals(target)) { bestD = d34; break if_else; }
r34 += cooldownInRubble[rc.senseRubble(l34)];
if (r34 < r24) { r24 = r34; d24 = d34; }
if (r34 < r25) { r25 = r34; d25 = d34; }
if (r34 < r35) { r35 = r34; d35 = d34; }
if (r34 < r45) { r45 = r34; d45 = d34; }
}
if (rc.onTheMap(l24)) { // (2, 4) -> (1, 4), (2, 5), (3, 5), (*)
if(l24.equals(target)) { bestD = d24; break if_else; }
r24 += cooldownInRubble[rc.senseRubble(l24)];
}
if (rc.onTheMap(l14)) { // (1, 4) -> (2, 5), (*)
if(l14.equals(target)) { bestD = d14; break if_else; }
r14 += cooldownInRubble[rc.senseRubble(l14)];
}
if (rc.onTheMap(l54)) { // (5, 4) -> (6, 4), (4, 5), (5, 5), (6, 5)
if(l54.equals(target)) { bestD = d54; break if_else; }
r54 += cooldownInRubble[rc.senseRubble(l54)];
if (r54 < r64) { r64 = r54; d64 = d54; }
if (r54 < r45) { r45 = r54; d45 = d54; }
if (r54 < r55) { r55 = r54; d55 = d54; }
if (r54 < r65) { r65 = r54; d65 = d54; }
}
if (rc.onTheMap(l64)) { // (6, 4) -> (7, 4), (5, 5), (6, 5), (*)
if(l64.equals(target)) { bestD = d64; break if_else; }
r64 += cooldownInRubble[rc.senseRubble(l64)];
}
if (rc.onTheMap(l74)) { // (7, 4) -> (6, 5), (*)
if(l74.equals(target)) { bestD = d74; break if_else; }
r74 += cooldownInRubble[rc.senseRubble(l74)];
}
if (rc.onTheMap(l45)) { // (4, 5) -> (3, 5), (5, 5), (*)
if(l45.equals(target)) { bestD = d45; break if_else; }
r45 += cooldownInRubble[rc.senseRubble(l45)];
}
if (rc.onTheMap(l35)) { // (3, 5) -> (2, 5), (*)
if(l35.equals(target)) { bestD = d35; break if_else; }
r35 += cooldownInRubble[rc.senseRubble(l35)];
}
if (rc.onTheMap(l25)) { // (2, 5) -> {}, (*)
if(l25.equals(target)) { bestD = d25; break if_else; }
r25 += cooldownInRubble[rc.senseRubble(l25)];
}
if (rc.onTheMap(l55)) { // (5, 5) -> (6, 5), (*)
if(l55.equals(target)) { bestD = d55; break if_else; }
r55 += cooldownInRubble[rc.senseRubble(l55)];
}
if (rc.onTheMap(l65)) { // (6, 5) -> {}, (*)
if(l65.equals(target)) { bestD = d65; break if_else; }
r65 += cooldownInRubble[rc.senseRubble(l65)];
}
} else { // TARGET NOT VISIBLE
if (rc.onTheMap(l42)) { // (4, 2) -> (3, 3), (4, 3), (5, 3)
r42 += cooldownInRubble[rc.senseRubble(l42)];
if (r42 < r33) { r33 = r42; d33 = d42; }
if (r42 < r43) { r43 = r42; d43 = d42; }
if (r42 < r53) { r53 = r42; d53 = d42; }
}
if (rc.onTheMap(l32)) { // (3, 2) -> (2, 1), (2, 2), (2, 3), (3, 3), (4, 3)
r32 += cooldownInRubble[rc.senseRubble(l32)];
if (r32 < r21) { r21 = r32; d21 = d32; }
if (r32 < r22) { r22 = r32; d22 = d32; }
if (r32 < r23) { r23 = r32; d23 = d32; }
if (r32 < r33) { r33 = r32; d33 = d32; }
if (r32 < r43) { r43 = r32; d43 = d32; }
}
if (rc.onTheMap(l52)) { // (5, 2) -> (6, 1), (6, 2), (6, 3), (5, 3), (4, 3)
r52 += cooldownInRubble[rc.senseRubble(l52)];
if (r52 < r61) { r61 = r52; d61 = d52; }
if (r52 < r62) { r62 = r52; d62 = d52; }
if (r52 < r63) { r63 = r52; d63 = d52; }
if (r52 < r53) { r53 = r52; d53 = d52; }
if (r52 < r43) { r43 = r52; d43 = d52; }
}
if (rc.onTheMap(l31)) { // (3, 1) -> (2, 0), (2, 1), (2, 2)
r31 += cooldownInRubble[rc.senseRubble(l31)];
if (r31 < r20) { r20 = r31; d20 = d31; }
if (r31 < r21) { r21 = r31; d21 = d31; }
if (r31 < r22) { r22 = r31; d22 = d31; }
}
if (rc.onTheMap(l51)) { // (5, 1) -> (6, 0), (6, 1), (6, 2)
r51 += cooldownInRubble[rc.senseRubble(l51)];
if (r51 < r60) { r60 = r51; d60 = d51; }
if (r51 < r61) { r61 = r51; d61 = d51; }
if (r51 < r62) { r62 = r51; d62 = d51; }
}
if (rc.onTheMap(l30)) { // (3, 0) -> (2, 0), (2, 1)
r30 += cooldownInRubble[rc.senseRubble(l30)];
if (r30 < r20) { r20 = r30; d20 = d30; }
if (r30 < r21) { r21 = r30; d21 = d30; }
}
if (rc.onTheMap(l50)) { // (5, 0) -> (6, 0), (6, 1)
r50 += cooldownInRubble[rc.senseRubble(l50)];
if (r50 < r60) { r60 = r50; d60 = d50; }
if (r50 < r61) { r61 = r50; d61 = d50; }
}
if (rc.onTheMap(l20)) { // (2, 0) -> (1, 0), (1, 1), (2, 1)
r20 += cooldownInRubble[rc.senseRubble(l20)];
if (r20 < r10) { r10 = r20; d10 = d20; }
if (r20 < r11) { r11 = r20; d11 = d20; }
if (r20 < r21) { r21 = r20; d21 = d20; }
}
if (rc.onTheMap(l10)) { // (1, 0) -> (0, 0), (0, 1), (1, 1)
r10 += cooldownInRubble[rc.senseRubble(l10)];
if (r10 < r00) { r00 = r10; d00 = d10; }
if (r10 < r01) { r01 = r10; d01 = d10; }
if (r10 < r11) { r11 = r10; d11 = d10; }
}
if (rc.onTheMap(l00)) { // (0, 0) -> (0, 1), (*)
double d = Math.pow(Math.pow(target.x - l00.x, 4) + Math.pow(target.y - l00.y, 4), 0.25);
if (d < targetDist) { r00 += cooldownInRubble[rc.senseRubble(l00)]; double r = 30*d + r00;
if (r < bestR) { bestR = r; bestD = d00; bestL = l00; } }
if (r00 < r01) { r01 = r00; d01 = d00; }
}
if (rc.onTheMap(l60)) { // (6, 0) -> (7, 0), (6, 1), (7, 1)
r60 += cooldownInRubble[rc.senseRubble(l60)];
if (r60 < r70) { r70 = r60; d70 = d60; }
if (r60 < r61) { r61 = r60; d61 = d60; }
if (r60 < r71) { r71 = r60; d71 = d60; }
}
if (rc.onTheMap(l70)) { // (7, 0) -> (8, 0), (7, 1), (8, 1)
r70 += cooldownInRubble[rc.senseRubble(l70)];
if (r70 < r80) { r80 = r70; d80 = d70; }
if (r70 < r71) { r71 = r70; d71 = d70; }
if (r70 < r81) { r81 = r70; d81 = d70; }
}
if (rc.onTheMap(l80)) { // (8, 0) -> (8, 1), (*)
double d = Math.pow(Math.pow(target.x - l80.x, 4) + Math.pow(target.y - l80.y, 4), 0.25);
if (d < targetDist) { r80 += cooldownInRubble[rc.senseRubble(l80)]; double r = 30*d + r80;
if (r < bestR) { bestR = r; bestD = d80; bestL = l80; } }
if (r80 < r81) { r81 = r80; d81 = d80; }
}
if (rc.onTheMap(l21)) { // (2, 1) -> (1, 1), (1, 2), (2, 2)
r21 += cooldownInRubble[rc.senseRubble(l21)];
if (r21 < r11) { r11 = r21; d11 = d21; }
if (r21 < r12) { r12 = r21; d12 = d21; }
if (r21 < r22) { r22 = r21; d22 = d21; }
}
if (rc.onTheMap(l11)) { // (1, 1) -> (0, 1), (0, 2), (1, 2), (2, 2)
r11 += cooldownInRubble[rc.senseRubble(l11)];
if (r11 < r01) { r01 = r11; d01 = d11; }
if (r11 < r02) { r02 = r11; d02 = d11; }
if (r11 < r12) { r12 = r11; d12 = d11; }
if (r11 < r22) { r22 = r11; d22 = d11; }
}
if (rc.onTheMap(l01)) { // (0, 1) -> (0, 2), (1, 2), (*)
double d = Math.pow(Math.pow(target.x - l01.x, 4) + Math.pow(target.y - l01.y, 4), 0.25);
if (d < targetDist) { r01 += cooldownInRubble[rc.senseRubble(l01)]; double r = 30*d + r01;
if (r < bestR) { bestR = r; bestD = d01; bestL = l01; } }
if (r01 < r02) { r02 = r01; d02 = d01; }
if (r01 < r12) { r12 = r01; d12 = d01; }
}
if (rc.onTheMap(l61)) { // (6, 1) -> (7, 1), (6, 2), (7, 2)
r61 += cooldownInRubble[rc.senseRubble(l61)];
if (r61 < r71) { r71 = r61; d71 = d61; }
if (r61 < r62) { r62 = r61; d62 = d61; }
if (r61 < r72) { r72 = r61; d72 = d61; }
}
if (rc.onTheMap(l71)) { // (7, 1) -> (8, 1), (6, 2), (7, 2), (8, 2)
r71 += cooldownInRubble[rc.senseRubble(l71)];
if (r71 < r81) { r81 = r71; d81 = d71; }
if (r71 < r62) { r62 = r71; d62 = d71; }
if (r71 < r72) { r72 = r71; d72 = d71; }
if (r71 < r82) { r82 = r71; d82 = d71; }
}
if (rc.onTheMap(l81)) { // (8, 1) -> (7, 2), (8, 2), (*)
double d = Math.pow(Math.pow(target.x - l81.x, 4) + Math.pow(target.y - l81.y, 4), 0.25);
if (d < targetDist) { r81 += cooldownInRubble[rc.senseRubble(l81)]; double r = 30*d + r81;
if (r < bestR) { bestR = r; bestD = d81; bestL = l81; } }
if (r81 < r72) { r72 = r81; d72 = d81; }
if (r81 < r82) { r82 = r81; d82 = d81; }
}
if (rc.onTheMap(l22)) { // (2, 2) -> (1, 2), (1, 3), (2, 3), (3, 3)
r22 += cooldownInRubble[rc.senseRubble(l22)];
if (r22 < r12) { r12 = r22; d12 = d22; }
if (r22 < r13) { r13 = r22; d13 = d22; }
if (r22 < r23) { r23 = r22; d23 = d22; }
if (r22 < r33) { r33 = r22; d33 = d22; }
}
if (rc.onTheMap(l12)) { // (1, 2) -> (0, 2), (0, 3), (1, 3), (2, 3)
r12 += cooldownInRubble[rc.senseRubble(l12)];
if (r12 < r02) { r02 = r12; d02 = d12; }
if (r12 < r03) { r03 = r12; d03 = d12; }
if (r12 < r13) { r13 = r12; d13 = d12; }
if (r12 < r23) { r23 = r12; d23 = d12; }
}
if (rc.onTheMap(l02)) { // (0, 2) -> (0, 3), (1, 3), (*)
double d = Math.pow(Math.pow(target.x - l02.x, 4) + Math.pow(target.y - l02.y, 4), 0.25);
if (d < targetDist) { r02 += cooldownInRubble[rc.senseRubble(l02)]; double r = 30*d + r02;
if (r < bestR) { bestR = r; bestD = d02; bestL = l02; } }
if (r02 < r03) { r03 = r02; d03 = d02; }
if (r02 < r13) { r13 = r02; d13 = d02; }
}
if (rc.onTheMap(l62)) { // (6, 2) -> (7, 2), (5, 3), (6, 3), (7, 3)
r62 += cooldownInRubble[rc.senseRubble(l62)];
if (r62 < r72) { r72 = r62; d72 = d62; }
if (r62 < r53) { r53 = r62; d53 = d62; }
if (r62 < r63) { r63 = r62; d63 = d62; }
if (r62 < r73) { r73 = r62; d73 = d62; }
}
if (rc.onTheMap(l72)) { // (7, 2) -> (8, 2), (6, 3), (7, 3), (8, 3)
r72 += cooldownInRubble[rc.senseRubble(l72)];
if (r72 < r82) { r82 = r72; d82 = d72; }
if (r72 < r63) { r63 = r72; d63 = d72; }
if (r72 < r73) { r73 = r72; d73 = d72; }
if (r72 < r83) { r83 = r72; d83 = d72; }
}
if (rc.onTheMap(l82)) { // (8, 2) -> (7, 3), (8, 3), (*)
double d = Math.pow(Math.pow(target.x - l82.x, 4) + Math.pow(target.y - l82.y, 4), 0.25);
if (d < targetDist) { r82 += cooldownInRubble[rc.senseRubble(l82)]; double r = 30*d + r82;
if (r < bestR) { bestR = r; bestD = d82; bestL = l82; } }
if (r82 < r73) { r73 = r82; d73 = d82; }
if (r82 < r83) { r83 = r82; d83 = d82; }
}
if (rc.onTheMap(l43)) { // (4, 3) -> (3, 3), (5, 3), (3, 4), (4, 4), (5, 4)
r43 += cooldownInRubble[rc.senseRubble(l43)];
if (r43 < r33) { r33 = r43; d33 = d43; }
if (r43 < r53) { r53 = r43; d53 = d43; }
if (r43 < r34) { r34 = r43; d34 = d43; }
if (r43 < r44) { r44 = r43; d44 = d43; }
if (r43 < r54) { r54 = r43; d54 = d43; }
}
if (rc.onTheMap(l33)) { // (3, 3) -> (2, 3), (2, 4), (3, 4), (4, 4)
r33 += cooldownInRubble[rc.senseRubble(l33)];
if (r33 < r23) { r23 = r33; d23 = d33; }
if (r33 < r24) { r24 = r33; d24 = d33; }
if (r33 < r34) { r34 = r33; d34 = d33; }
if (r33 < r44) { r44 = r33; d44 = d33; }
}
if (rc.onTheMap(l23)) { // (2, 3) -> (1, 3), (1, 4), (2, 4), (3, 4)
r23 += cooldownInRubble[rc.senseRubble(l23)];
if (r23 < r13) { r13 = r23; d13 = d23; }
if (r23 < r14) { r14 = r23; d14 = d23; }
if (r23 < r24) { r24 = r23; d24 = d23; }
if (r23 < r34) { r34 = r23; d34 = d23; }
}
if (rc.onTheMap(l13)) { // (1, 3) -> (0, 3), (1, 4), (2, 4), (*)
double d = Math.pow(Math.pow(target.x - l13.x, 4) + Math.pow(target.y - l13.y, 4), 0.25);
if (d < targetDist) { r13 += cooldownInRubble[rc.senseRubble(l13)]; double r = 30*d + r13;
if (r < bestR) { bestR = r; bestD = d13; bestL = l13; } }
if (r13 < r03) { r03 = r13; d03 = d13; }
if (r13 < r14) { r14 = r13; d14 = d13; }
if (r13 < r24) { r24 = r13; d24 = d13; }
}
if (rc.onTheMap(l03)) { // (0, 3) -> (1, 4), (*)
double d = Math.pow(Math.pow(target.x - l03.x, 4) + Math.pow(target.y - l03.y, 4), 0.25);
if (d < targetDist) { r03 += cooldownInRubble[rc.senseRubble(l03)]; double r = 30*d + r03;
if (r < bestR) { bestR = r; bestD = d03; bestL = l03; } }
if (r03 < r14) { r14 = r03; d14 = d03; }
}
if (rc.onTheMap(l53)) { // (5, 3) -> (6, 3), (4, 4), (5, 4), (6, 4)
r53 += cooldownInRubble[rc.senseRubble(l53)];
if (r53 < r63) { r63 = r53; d63 = d53; }
if (r53 < r44) { r44 = r53; d44 = d53; }
if (r53 < r54) { r54 = r53; d54 = d53; }
if (r53 < r64) { r64 = r53; d64 = d53; }
}
if (rc.onTheMap(l63)) { // (6, 3) -> (7, 3), (5, 4), (6, 4), (7, 4)
r63 += cooldownInRubble[rc.senseRubble(l63)];
if (r63 < r73) { r73 = r63; d73 = d63; }
if (r63 < r54) { r54 = r63; d54 = d63; }
if (r63 < r64) { r64 = r63; d64 = d63; }
if (r63 < r74) { r74 = r63; d74 = d63; }
}
if (rc.onTheMap(l73)) { // (7, 3) -> (8, 3), (6, 4), (7, 4), (*)
double d = Math.pow(Math.pow(target.x - l73.x, 4) + Math.pow(target.y - l73.y, 4), 0.25);
if (d < targetDist) { r73 += cooldownInRubble[rc.senseRubble(l73)]; double r = 30*d + r73;
if (r < bestR) { bestR = r; bestD = d73; bestL = l73; } }
if (r73 < r83) { r83 = r73; d83 = d73; }
if (r73 < r64) { r64 = r73; d64 = d73; }
if (r73 < r74) { r74 = r73; d74 = d73; }
}
if (rc.onTheMap(l83)) { // (8, 3) -> (7, 4), (*)
double d = Math.pow(Math.pow(target.x - l83.x, 4) + Math.pow(target.y - l83.y, 4), 0.25);
if (d < targetDist) { r83 += cooldownInRubble[rc.senseRubble(l83)]; double r = 30*d + r83;
if (r < bestR) { bestR = r; bestD = d83; bestL = l83; } }
if (r83 < r74) { r74 = r83; d74 = d83; }
}
if (rc.onTheMap(l44)) { // (4, 4) -> (3, 4), (5, 4), (3, 5), (4, 5), (5, 5)
r44 += cooldownInRubble[rc.senseRubble(l44)];
if (r44 < r34) { r34 = r44; d34 = d44; }
if (r44 < r54) { r54 = r44; d54 = d44; }
if (r44 < r35) { r35 = r44; d35 = d44; }
if (r44 < r45) { r45 = r44; d45 = d44; }
if (r44 < r55) { r55 = r44; d55 = d44; }
}
if (rc.onTheMap(l34)) { // (3, 4) -> (2, 4), (2, 5), (3, 5), (4, 5)
r34 += cooldownInRubble[rc.senseRubble(l34)];
if (r34 < r24) { r24 = r34; d24 = d34; }
if (r34 < r25) { r25 = r34; d25 = d34; }
if (r34 < r35) { r35 = r34; d35 = d34; }
if (r34 < r45) { r45 = r34; d45 = d34; }
}
if (rc.onTheMap(l24)) { // (2, 4) -> (1, 4), (2, 5), (3, 5), (*)
double d = Math.pow(Math.pow(target.x - l24.x, 4) + Math.pow(target.y - l24.y, 4), 0.25);
if (d < targetDist) { r24 += cooldownInRubble[rc.senseRubble(l24)]; double r = 30*d + r24;
if (r < bestR) { bestR = r; bestD = d24; bestL = l24; } }
if (r24 < r14) { r14 = r24; d14 = d24; }
if (r24 < r25) { r25 = r24; d25 = d24; }
if (r24 < r35) { r35 = r24; d35 = d24; }
}
if (rc.onTheMap(l14)) { // (1, 4) -> (2, 5), (*)
double d = Math.pow(Math.pow(target.x - l14.x, 4) + Math.pow(target.y - l14.y, 4), 0.25);
if (d < targetDist) { r14 += cooldownInRubble[rc.senseRubble(l14)]; double r = 30*d + r14;
if (r < bestR) { bestR = r; bestD = d14; bestL = l14; } }
if (r14 < r25) { r25 = r14; d25 = d14; }
}
if (rc.onTheMap(l54)) { // (5, 4) -> (6, 4), (4, 5), (5, 5), (6, 5)
r54 += cooldownInRubble[rc.senseRubble(l54)];
if (r54 < r64) { r64 = r54; d64 = d54; }
if (r54 < r45) { r45 = r54; d45 = d54; }
if (r54 < r55) { r55 = r54; d55 = d54; }
if (r54 < r65) { r65 = r54; d65 = d54; }
}
if (rc.onTheMap(l64)) { // (6, 4) -> (7, 4), (5, 5), (6, 5), (*)
double d = Math.pow(Math.pow(target.x - l64.x, 4) + Math.pow(target.y - l64.y, 4), 0.25);
if (d < targetDist) { r64 += cooldownInRubble[rc.senseRubble(l64)]; double r = 30*d + r64;
if (r < bestR) { bestR = r; bestD = d64; bestL = l64; } }
if (r64 < r74) { r74 = r64; d74 = d64; }
if (r64 < r55) { r55 = r64; d55 = d64; }
if (r64 < r65) { r65 = r64; d65 = d64; }
}
if (rc.onTheMap(l74)) { // (7, 4) -> (6, 5), (*)
double d = Math.pow(Math.pow(target.x - l74.x, 4) + Math.pow(target.y - l74.y, 4), 0.25);
if (d < targetDist) { r74 += cooldownInRubble[rc.senseRubble(l74)]; double r = 30*d + r74;
if (r < bestR) { bestR = r; bestD = d74; bestL = l74; } }
if (r74 < r65) { r65 = r74; d65 = d74; }
}
if (rc.onTheMap(l45)) { // (4, 5) -> (3, 5), (5, 5), (*)
double d = Math.pow(Math.pow(target.x - l45.x, 4) + Math.pow(target.y - l45.y, 4), 0.25);
if (d < targetDist) { r45 += cooldownInRubble[rc.senseRubble(l45)]; double r = 30*d + r45;
if (r < bestR) { bestR = r; bestD = d45; bestL = l45; } }
if (r45 < r35) { r35 = r45; d35 = d45; }
if (r45 < r55) { r55 = r45; d55 = d45; }
}
if (rc.onTheMap(l35)) { // (3, 5) -> (2, 5), (*)
double d = Math.pow(Math.pow(target.x - l35.x, 4) + Math.pow(target.y - l35.y, 4), 0.25);
if (d < targetDist) { r35 += cooldownInRubble[rc.senseRubble(l35)]; double r = 30*d + r35;
if (r < bestR) { bestR = r; bestD = d35; bestL = l35; } }
if (r35 < r25) { r25 = r35; d25 = d35; }
}
if (rc.onTheMap(l25)) { // (2, 5) -> {}, (*)
double d = Math.pow(Math.pow(target.x - l25.x, 4) + Math.pow(target.y - l25.y, 4), 0.25);
if (d < targetDist) { r25 += cooldownInRubble[rc.senseRubble(l25)]; double r = 30*d + r25;
if (r < bestR) { bestR = r; bestD = d25; bestL = l25; } }
}
if (rc.onTheMap(l55)) { // (5, 5) -> (6, 5), (*)
double d = Math.pow(Math.pow(target.x - l55.x, 4) + Math.pow(target.y - l55.y, 4), 0.25);
if (d < targetDist) { r55 += cooldownInRubble[rc.senseRubble(l55)]; double r = 30*d + r55;
if (r < bestR) { bestR = r; bestD = d55; bestL = l55; } }
if (r55 < r65) { r65 = r55; d65 = d55; }
}
if (rc.onTheMap(l65)) { // (6, 5) -> {}, (*)
double d = Math.pow(Math.pow(target.x - l65.x, 4) + Math.pow(target.y - l65.y, 4), 0.25);
if (d < targetDist) { r65 += cooldownInRubble[rc.senseRubble(l65)]; double r = 30*d + r65;
if (r < bestR) { bestR = r; bestD = d65; bestL = l65; } }
}
}
Direction res;
switch(bestD) {
case 0: res = d0; break;
case 1: res = d1; break;
case 2: res = d2; break;
case 3: res = d3; break;
case 4: res = d4; break;
case 5: res = d5; break;
case 6: res = d6; break;
default: res = Direction.CENTER;
}
rc.setIndicatorDot(myLocation.add(res), 0,0,0);
rc.setIndicatorLine(myLocation, target, 255, 255, 0);
if(bestL != null) rc.setIndicatorLine(myLocation, bestL, 0,255,255);
return res;
(4, 2) -> (3, 3), (4, 3), (5, 3)
(3, 2) -> (2, 1), (2, 2), (2, 3), (3, 3), (4, 3)
(5, 2) -> (6, 1), (6, 2), (6, 3), (5, 3), (4, 3)
(3, 1) -> (2, 0), (2, 1), (2, 2)
(5, 1) -> (6, 0), (6, 1), (6, 2)
(3, 0) -> (2, 0), (2, 1)
(5, 0) -> (6, 0), (6, 1)
(2, 0) -> (1, 0), (1, 1), (2, 1)
(1, 0) -> (0, 0), (0, 1), (1, 1)
(0, 0) -> (0, 1), (*)
(6, 0) -> (7, 0), (6, 1), (7, 1)
(7, 0) -> (8, 0), (7, 1), (8, 1)
(8, 0) -> (8, 1), (*)
(2, 1) -> (1, 1), (1, 2), (2, 2)
(1, 1) -> (0, 1), (0, 2), (1, 2), (2, 2)
(0, 1) -> (0, 2), (1, 2), (*)
(6, 1) -> (7, 1), (6, 2), (7, 2)
(7, 1) -> (8, 1), (6, 2), (7, 2), (8, 2)
(8, 1) -> (7, 2), (8, 2), (*)
(2, 2) -> (1, 2), (1, 3), (2, 3), (3, 3)
(1, 2) -> (0, 2), (0, 3), (1, 3), (2, 3)
(0, 2) -> (0, 3), (1, 3), (*)
(6, 2) -> (7, 2), (5, 3), (6, 3), (7, 3)
(7, 2) -> (8, 2), (6, 3), (7, 3), (8, 3)
(8, 2) -> (7, 3), (8, 3), (*)
(4, 3) -> (3, 3), (5, 3), (3, 4), (4, 4), (5, 4)
(3, 3) -> (2, 3), (2, 4), (3, 4), (4, 4)
(2, 3) -> (1, 3), (1, 4), (2, 4), (3, 4)
(1, 3) -> (0, 3), (1, 4), (2, 4), (*)
(0, 3) -> (1, 4), (*)
(5, 3) -> (6, 3), (4, 4), (5, 4), (6, 4)
(6, 3) -> (7, 3), (5, 4), (6, 4), (7, 4)
(7, 3) -> (8, 3), (6, 4), (7, 4), (*)
(8, 3) -> (7, 4), (*)
(4, 4) -> (3, 4), (5, 4), (3, 5), (4, 5), (5, 5)
(3, 4) -> (2, 4), (2, 5), (3, 5), (4, 5)
(2, 4) -> (1, 4), (2, 5), (3, 5), (*)
(1, 4) -> (2, 5), (*)
(5, 4) -> (6, 4), (4, 5), (5, 5), (6, 5)
(6, 4) -> (7, 4), (5, 5), (6, 5), (*)
(7, 4) -> (6, 5), (*)
(4, 5) -> (3, 5), (5, 5), (*)
(3, 5) -> (2, 5), (*)
(2, 5) -> {}, (*)
(5, 5) -> (6, 5), (*)
(6, 5) -> {}, (*)