Skip to content

Instantly share code, notes, and snippets.

@ifnull
Created July 31, 2015 17:04
Show Gist options
  • Save ifnull/160017b578967a9eb814 to your computer and use it in GitHub Desktop.
Save ifnull/160017b578967a9eb814 to your computer and use it in GitHub Desktop.
Crack Master Combo Locks in 8 Tries - samy kamkar
// l1 - 1st locking position
// l2 - 2nd locking position
// rl - resistant location
// x - the result of testing 3rd position
function combo(x)
{
var second = [];
var third = [];
var l1 = parseInt($('input#l1').val());
var l2 = parseInt($('input#l2').val());
var first = (Math.ceil($('input#rl').val()) + 5) % 40;
$('input#d1').val(first);
var mod = first % 4;
for (var i = 0; i < 4; i++)
{
if (((10 * i) + l1) % 4 == mod)
third.push((10 * i) + l1);
if (((10 * i) + l2) % 4 == mod)
third.push((10 * i) + l2);
}
$('a#t1').text(third[0]);
$('a#t2').text(third[1]);
$('input#d3').val(x ? third[x-1] : third.join(', '));
for (var i = 0; i < 10; i++)
{
var tmp = ((mod + 2) % 4) + (4 * i);
if (!x || ( (third[x-1]+2)%40 != tmp && (third[x-1]-2)%40 != tmp))
second.push(tmp);
}
$('input#d2').val(second.join(', '));
console.log(first);
console.log(second);
console.log(third);
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex, nofollow">
<title>Crack Master Combo Locks in 8 Tries - samy kamkar</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body role="document">
<div class="container theme-showcase" role="main">
<div class="row">
<div class="" role="main">
<form class="bs-example bs-example-form" data-example-id="simple-input-groups">
<div class="input-group">
<span class="input-group-addon" id="basic-addon1">First Locked Position </span>
<input autofocus id=l1 type="text" class="form-control" placeholder="whole # under 11" aria-describedby="basic-addon1">
</div>
<div>&nbsp;</div>
<div class="input-group">
<span class="input-group-addon" id="basic-addon2">Second Locked Position </span>
<input id=l2 type="text" class="form-control" placeholder="whole # under 11" aria-describedby="basic-addon1">
</div>
<div>&nbsp;</div>
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">Resistant Location</span>
<input id=rl type="text" class="form-control" placeholder="whole or half # (eg 4 or 4.5)" aria-describedby="basic-addon1">
</div>
<div>&nbsp;</div>
<div class="input-group">
<a href="#" class="btn btn-primary" role="button" onclick="combo(); return false;">Find Combos</a>
</div>
<div>&nbsp;<br><br><b>Your Combination:</b><br>&nbsp;</div>
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">First Digit</span>
<input id=d1 type="text" class="form-control" disabled placeholder="" aria-describedby="basic-addon1">
</div>
<div>&nbsp;</div>
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">Second Digit(s)</span>
<input id=d2 type="text" class="form-control" disabled placeholder="" aria-describedby="basic-addon1">
</div>
<div>&nbsp;</div>
<div class="input-group">
<span class="input-group-addon" id="basic-addon3">Third Digit</span>
<input id=d3 type="text" class="form-control" disabled placeholder="" aria-describedby="basic-addon1">
</div>
<div>&nbsp;</div>
<div class="input-group">
Third digit:
<a id=t1 href="#" class="btn btn-primary" role="button" onclick="combo(1); return false">?</a> or
<a id=t2 href="#" class="btn btn-primary" role="button" onclick="combo(2); return false">?</a>
</div>
</form>
</div>
</div>
</div> <!-- /container -->
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
//for (var i = 0; i < 40; i++)
// $('table > tbody').append('<tr><td id=td1_'+i+'>'+i+'</td><td id=td2_'+i+'>'+i+'</td><td id=td3_'+i+'>'+i+'</td></tr>');
function combo(x)
{
var second = [];
var third = [];
var l1 = parseInt($('input#l1').val());
var l2 = parseInt($('input#l2').val());
var first = (Math.ceil($('input#rl').val()) + 5) % 40;
$('input#d1').val(first);
var mod = first % 4;
for (var i = 0; i < 4; i++)
{
if (((10 * i) + l1) % 4 == mod)
third.push((10 * i) + l1);
if (((10 * i) + l2) % 4 == mod)
third.push((10 * i) + l2);
}
$('a#t1').text(third[0]);
$('a#t2').text(third[1]);
$('input#d3').val(x ? third[x-1] : third.join(', '));
for (var i = 0; i < 10; i++)
{
var tmp = ((mod + 2) % 4) + (4 * i);
if (!x || ( (third[x-1]+2)%40 != tmp && (third[x-1]-2)%40 != tmp))
second.push(tmp);
}
$('input#d2').val(second.join(', '));
console.log(first);
console.log(second);
console.log(third);
}
</script>
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment