Created
July 14, 2023 02:30
-
-
Save Untrusted-Game/209a2b7a97ed8a23666ca487175dcbe6 to your computer and use it in GitHub Desktop.
Solution to level 14 in Untrusted: http://alex.nisnevich.com/untrusted/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************** | |
* 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; | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment