Skip to content

Instantly share code, notes, and snippets.

Created May 6, 2014 23:17

Revisions

  1. @invalid-email-address Anonymous created this gist May 6, 2014.
    121 changes: 121 additions & 0 deletions untrusted-lvl14-solution.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,121 @@
    /********************
    * crispsContest.js *
    ********************
    *
    * The Algorithm is almost in our grasp!
    * At long last, we will definitively establish
    * that 3SAT is solvable in polynomial time. It's
    * been a long, strange journey, but it will all be
    * worth it.
    *
    * You have the red, green, and blue keys. Now you
    * just need to figure out how to unlock this thing.
    */

    function startLevel(map) {
    map.defineObject('redLock', {
    'symbol': String.fromCharCode(0x2297),
    'color': 'red',
    'impassable': function (player) {
    if (player.hasItem('redKey')) {
    player.removeItem('redKey');
    return false;
    } else {
    return true;
    }
    }
    });

    map.defineObject('blueLock', {
    'symbol': String.fromCharCode(0x2297),
    'color': '#06f',
    'impassable': function (player) {
    if (player.hasItem('blueKey')) {
    player.removeItem('blueKey');
    return false;
    } else {
    return true;
    }
    }
    });

    map.defineObject('greenLock', {
    'symbol': String.fromCharCode(0x2297),
    'color': '#0f0',
    'impassable': function (player) {
    if (player.hasItem('greenKey')) {
    player.removeItem('blueKey');
    return false;
    } else {
    return true;
    }
    }
    });

    map.defineObject('yellowLock', {
    'symbol': String.fromCharCode(0x2297),
    'color': 'yellow',
    'impassable': function (player) {
    if (player.hasItem('yellowKey')) {
    player.removeItem('yellowKey');
    return false;
    } else {
    return true;
    }
    }
    });

    map.createFromGrid(
    [' +++++ +++++ ',
    ' + b +++ r + ',
    ' + +E+ + ',
    '+++G+B+ +R+G+++',
    '+ y B R b +',
    '+ + + +',
    '+++++ @ +++++',
    '+ + + +',
    '+ y R B y +',
    '++++++Y+Y++++++',
    ' + + + ',
    ' + ABy + ',
    ' +++++++ '],
    {
    '@': 'player',
    'E': 'exit',
    'A': 'theAlgorithm',
    '+': 'block',
    'R': 'redLock',
    'G': 'greenLock',
    'B': 'blueLock',
    'Y': 'yellowLock',
    'r': 'redKey',
    'g': 'greenKey',
    'b': 'blueKey',
    'y': 'yellowKey'
    }, 17, 6);
    }

    function validateLevel(map) {
    map.validateExactlyXManyObjects(1, 'exit');
    map.validateAtMostXObjects(1, 'theAlgorithm');
    map.validateAtMostXObjects(4, 'yellowKey');
    map.validateAtMostXObjects(2, 'blueKey');
    map.validateAtMostXObjects(1, 'redKey');
    }

    function onExit(map) {
    // make sure we have all the items we need!
    if (!map.getPlayer().hasItem('theAlgorithm')) {
    map.writeStatus("You must get that Algorithm!!");
    return false;
    } else if (!map.getPlayer().hasItem('computer')) {
    map.writeStatus("You'll need your computer! [Ctrl-5 to restart]");
    return false;
    } else if (!map.getPlayer().hasItem('phone')) {
    map.writeStatus("You'll need your phone! [Ctrl-5 to restart]");
    return false;
    } else {
    return true;
    }
    }