Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solve(args) {
- let moves = {
- 'u': {
- row: -1,
- col: 0
- },
- 'r': {
- row: 0,
- col: 1
- },
- 'd': {
- row: 1,
- col: 0
- },
- 'l': {
- row: 0,
- col: -1
- }
- };
- let boardSizeArr = args[0].split(' ').map(Number);
- let startingString = args[1].split(';');
- let rows = boardSizeArr[0];
- let cols = boardSizeArr[1];
- let woobPos = extractStarting(startingString[0]);
- let nbsPos = extractStarting(startingString[1]);
- let princessLPos = extractStarting(startingString[2]);
- let layedTraps = {};
- let commads = args.slice(2);
- let isWoobTrapped = false;
- let isNbsTrapped = false;
- let move, currCommand;
- for (let i = 0; i < commads.length; i += 1) {
- currCommand = extractCommand(commads[i]);
- if (currCommand[0] === 'lay') {
- layedTraps[[princessLPos.row, princessLPos.col]] = true;
- // escaped from maze or 2 trolls are caught
- if ((princessLPos.col == cols - 1 && princessLPos.row == rows - 1) ||
- (isWoobTrapped && isNbsTrapped)) {
- console.log("Lsjtujzbo is saved! " + woobPos.row + ' ' + woobPos.col + ' ' + nbsPos.row
- + ' ' + nbsPos.col);
- return;
- }
- } else {
- move = moves[currCommand[2]];
- }
- if (currCommand[1] === 'Wboup') {
- debugger
- if (insideField(woobPos.row + move.row, woobPos.col + move.col) && !isWoobTrapped) {
- woobPos.col += move.col;
- woobPos.row += move.row;
- } else {
- continue;
- }
- if (layedTraps[[woobPos.row, woobPos.col]] === true) {
- if (isNbsTrapped) {
- isNbsTrapped = false;
- layedTraps[[woobPos.col, woobPos.row]] = false;
- } else {
- isWoobTrapped = true;
- }
- }
- } else if (currCommand[1] === 'Nbslbub') {
- if (insideField(nbsPos.row + move.row, nbsPos.col + move.col) && !isNbsTrapped) {
- nbsPos.col += move.col;
- nbsPos.row += move.row;
- } else {
- continue;
- }
- if (layedTraps[[nbsPos.row, nbsPos.col]] === true) {
- if (isWoobTrapped) {
- isWoobTrapped = false;
- layedTraps[[nbsPos.col, nbsPos.row]] = false;
- } else {
- isNbsTrapped = true;
- }
- }
- } else if (currCommand[1] === 'Lsjtujzbo') {
- if (insideField(princessLPos.row + move.row, princessLPos.col + move.col))
- princessLPos.col += move.col;
- princessLPos.row += move.row;
- }
- // check if queen is trapped
- if (checkTrollOnOneCellWithPrincess(woobPos, nbsPos, princessLPos)) {
- console.log('The trolls caught Lsjtujzbo' + ' at ' + princessLPos.row + ' ' +princessLPos.col);
- return;
- }
- if (checkTrollOnNeighborCell(woobPos,nbsPos,princessLPos)){
- console.log('The trolls caught Lsjtujzbo' + ' at ' + princessLPos.row + ' ' +princessLPos.col);
- return;
- }
- }
- console.log("Lsjtujzbo is saved! " + woobPos.row + ' ' + woobPos.col + ' ' + nbsPos.row + ' ' + nbsPos.col);
- function checkTrollOnNeighborCell(trollOne, trollTwo, princess) {
- let trollOneToPrincess =
- Math.abs(trollOne.row - princess.row) <= 1 &&
- Math.abs(trollOne.col - princess.col) <= 1;
- let trollTwoToPrincess =
- Math.abs(trollTwo.row - princess.row) <= 1 &&
- Math.abs(trollTwo.col - princess.col) <= 1;
- return trollOneToPrincess || trollTwoToPrincess;
- }
- function checkTrollOnOneCellWithPrincess(trollOne, trollTwo, priness) {
- return (trollOne.row === priness.row && trollOne.col === priness.col) ||
- (trollTwo.row === priness.row && trollTwo.col === priness.col);
- }
- function insideField(r, c) {
- return r >= 0 && r < rows && c >= 0 && c < cols;
- }
- function extractCommand(commandAsStr) {
- return commandAsStr.split(' ');
- }
- function extractStarting(arrayOfCoords) {
- arrayOfCoords = arrayOfCoords.split(' ').map(Number);
- let r = arrayOfCoords[0];
- let c = arrayOfCoords[1];
- return {
- row: r,
- col: c
- };
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement