class program { define a(n) { iterate(n) if (frontIsClear) move(); } define c(n) { if (iszero(n)) while (nextToABeeper) pickbeeper(); else iterate(n) if (nextToABeeper) pickbeeper(); } define d(n) { if (iszero(n)) while (anyBeepersInBeeperBag) putbeeper(); else iterate(n) if (anyBeepersInBeeperBag) putbeeper(); } define g(n) { iterate(n) turnleft(); } define n() { while (!facingNorth) turnleft(); } define s() { while (!facingSouth) turnleft(); } define o() { while (!facingWest) turnleft(); } define e() { while (!facingEast) turnleft(); } define put3() { d(1); g(3); if (frontIsClear) { if (rightIsBlocked) { g(1); a(1); put3(); } else if (leftIsBlocked) { a(1); put3(); } else { a(1); } } else { g(1); a(1); put3(); } } define put1() { d(1); g(1); if (frontIsClear) { if (leftIsBlocked) { g(3); a(1); put1(); } else if (rightIsBlocked) { a(1); put1(); } else { a(1); } } else { g(3); a(1); put1(); } } define decide3(n) { if (nextToABeeper) { c(1); if (iszero(n)) { put3(); } else { g(2); put1(); } } else { if (rightIsClear) g(3); a(1); if (iszero(n)) { decide3(n); } else { decide3(pred(n)); } } } define decide2(n) { if (rightIsClear) { if (frontIsBlocked) { g(3); a(1); decide2(n); } else { a(1); decide3(pred(n)); } } else { a(1); decide2(n); } } define decide(n) { if (rightIsClear) { if (frontIsBlocked) { g(3); a(1); decide(succ(n)); } else { a(1); decide2(n); } } else { a(1); decide(succ(n)); } } define orientate(n) { if (frontIsClear) { a(1); orientate(succ(n)); } else { if (rightIsClear) { g(2); a(n); g(1); } else { g(2); a(n); g(3); } } } program() { while (frontIsClear) { g(1); } while (frontIsBlocked) g(3); orientate(0); if (rightIsBlocked) { g(1); d(1); a(1); decide(1); } else if (leftIsBlocked) { d(1); a(1); decide(1); } while (rightIsClear || leftIsClear) { while (frontIsClear) { d(1); a(1); if (nextToABeeper) { turnoff(); } } if (nextToABeeper) turnoff(); g(1); d(1); decide(0); } turnoff(); } }