packages feed

swarm-0.3.0.0: data/scenarios/Challenges/_wolf-goat-cabbage/unattended-together.sw

def get_x_coord = \r.
    as r {
        pos <- whereami;
        return $ fst pos;
    };
    end;

def is_unattended_together = \baseX. \robotName.
    r <- robotnamed robotName;
    thisX <- get_x_coord r;

    if (baseX == thisX) {
        return false;
    } {
        as r {
            try {grab; return ()} {};
            move;
            try {grab; return ()} {};
            move;
            try {grab; return ()} {};

            has_wolf <- has "wolf";
            has_goat <- has "goat";
            has_cabbage <- has "cabbage";
            return $ (has_wolf && has_goat) || (has_goat && has_cabbage);
        };        
    }
    end;

baseX <- get_x_coord base;

west_bad <- is_unattended_together baseX "west_detector";
east_bad <- is_unattended_together baseX "east_detector";

return $ west_bad || east_bad;