Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
</body>
</html>
 
function bitTest(num, bit){
  return ((num>>bit) % 2 != 0)
}
function bitSet(num, bit){
  return num | 1<<bit;
}
function isDisarmed(input, rules) {
  var result = { disarm: true };
  
  for (var i=0; i<input.length; i++) {
    var wire = input[i];
    var rule = rules[wire];
    var isPos = rule.p > 0;
    var ruleVal = rule.p || rule.n;
    
    if (ruleVal) {
      if (i + 1 < input.length) {
        var nextWire = input[i + 1];
        var wireCut = bitTest(ruleVal, nextWire);
        
        if ((isPos && !wireCut) || (!isPos && wireCut)) {
          result = { disarm: false, wire: names[wire], next: names[nextWire] };
          break;
        }
      }
      else if (isPos) {
        result = { disarm: false, wire: wire };
        break;
      }
    }
  }
  
  return result;
}
//
// Bit array order: white, black, purple, red, green, orange.
//                    5      4      3      2     1      0
var names = ['orange', 'green', 'red', 'purple', 'black', 'white'];
var rules = [
  { p: 20, n: 0 },
  { p: 33, n: 0 },
  { p: 2, n: 0 },
  { p: 0, n: 43 },
  { p: 0, n: 35 },
  { p: 0, n: 48 }
]
var input1 = [5, 2, 1, 5];
var input2 = [5, 0, 1, 5];
function driver(input) {
  var result = isDisarmed(input, rules);
  if (result.disarm) {
    console.log('Bomb defused');
  }
  else {
    console.log('Boom');
    console.log(result);
  }  
}
driver(input1);
driver(input2);
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers