packages feed

swarm-0.7.0.0: data/scenarios/Challenges/_combo-lock/solution.sw

def moveToLock =
    emptyHere <- isempty;
    if emptyHere {move; moveToLock} {};
    end;

def cycleCombos = \n.
    entityNorth <- scan north;
    let hasGate = case entityNorth (\_. false) (\x. x == "gate") in
    if hasGate {
        if (n > 0) {
            drill down;
            maybeNextEnt <- scan east;
            case maybeNextEnt pure (\_. turn east; move; cycleCombos 3);
            cycleCombos $ n - 1;
        } {
            turn west;
            move;
        };
    } {}
    end;

def moveUntilBlocked =
    isblocked <- blocked;
    if isblocked {} {
        move;
        moveUntilBlocked;
    };
    end;

def toLeftEdge =
    turn north;
    move;
    turn left;
    moveUntilBlocked;
    turn north;
    end;

def goUp =
    toLeftEdge;
    move; move; move;
    end;

def grabBitcoin =
    move; move;
    turn right;
    move; move;
    grab;
    end;

def go =
    moveToLock;
    cycleCombos 3;
    goUp;
    cycleCombos 3;
    goUp;
    cycleCombos 3;
    goUp;
    cycleCombos 3;

    toLeftEdge;
    grabBitcoin;
    end;

go;