packages feed

swarm-0.7.0.0: data/scenarios/Testing/144-subworlds/_subworld-mapped-robots/judges.sw

def getRobotNumber = \n.
    r <- robotnumbered n;
    if (r == self) {
        pure n;
    } {getRobotNumber $ n + 1};
    end;

def amLowestRecursive = \targetName. \idx.
    r <- robotnumbered idx;
    thisName <- as r {whoami};
    if (thisName == targetName) {
        pure $ r == self;
    } {amLowestRecursive targetName $ idx + 1};
    end;

/**
Iterates through robots by increasing index.
If we encounter a robot, fetched by index,
with the same name as me, but I am not that robot,
then we return false.
*/
def amFirstOfMyName =
    myName <- whoami;
    amLowestRecursive myName 0;
    end;

def waitToGiveThing = \thing.
    r <- meet;
    case r (\_. wait 1; waitToGiveThing thing) $ \b. give b thing;
    end;

def waitToGive =
    let thing = "bitcoin" in
    create thing;
    waitToGiveThing thing;
    end;

def waitToReceive =
    noop;
    end;

def go =
    myNumber <- getRobotNumber 0;
    log $ "My number: " ++ format myNumber;
    amFirst <- amFirstOfMyName;
    log $ "Am first with this name? " ++ format amFirst;

    if amFirst {waitToReceive} {waitToGive};
    end;

go;