JavaScript Misdirection Contest #0
See http://misdirect.ion.land
HTML
<!-- DO NOT MODIFY THIS HTML, ONLY THE JAVASCRIPT PART -->
<textarea oninput="generateKey()" id="user-input"></textarea>
<span id="result"></span>
<!-- DO NOT MODIFY THIS HTML, ONLY THE JAVASCRIPT PART -->
CSS
/* DO NOT MODIFY THIS CSS, ONLY THE JAVASCRIPT PART */
JavaScript
// *** Multi-precision arithmetic ***
// Compare x and y. Return -1 if x < y; 0 if x = y; and 1 if x > y.
function mp_cmp(x, y) {
for (var x_top = x.length - 1; x_top > 0; --x_top)
if (x[x_top])
break;
for (var y_top = y.length - 1; y_top > 0; --y_top)
if (y[y_top])
break;
if (x_top > y_top)
return 1;
if (x_top < y_top)
return -1;
for (; x_top >= 0; --x_top) {
if (x[x_top] > y[x_top])
return 1;
if (x[x_top] < y[x_top])
return -1;
}
return 0;
}
// Add a list of numbers together.
function mp_sum(xs) {
if (xs.length == 0)
return [0];
var z = xs[0].slice();
for (var i = 1; i < xs.length; ++i) {
var x = xs[i];
for (var j = 0; j < Math.min(z.length, x.length); ++j)
z[j] += x[j];
for (; j < x.length; ++j)
z[j] = x[j];
}
var r = 0;
for (var i = 0; i < z.length; ++i) {
z[i] += r;
r = Math.floor(z[i] / 0x100000000);
z[i] = z[i] >>> 0; // Convert to 32-bit unsigned integer!
}
if (r > 0)
z.push(r);
return z;
}
// Return x + y.
function mp_add(x, y) { return mp_sum([x, y]); }
// Return x - y. Requires x > y.
function mp_sub(x, y) {
var z = new Array(x.length);
var c = 0;
for (var i = 0; i < y.length; ++i) {
z[i] = (x[i] - y[i] - c) >>> 0;
if (x[i] != y[i])
c = x[i] < y[i];
}
for (; i < x.length; ++i) {
z[i] = (x[i] - c) >>> 0;
if (x[i] != 0)
c = 0;
}
return z;
}
// Return x * y.
function mp_mul(x, y) {
var xe = new Array(2*x.length);
var ye = new Array(2*y.length);
var a = new Array(xe.length + ye.length);
for (var i = 0; i < x.length; ++i) {
xe[2*i] = x[i] & 0xffff;
xe[2*i + 1] = x[i] >>> 16;
}
for (var i = 0; i < y.length; ++i) {
ye[2*i] = y[i] & 0xffff;
ye[2*i + 1] = y[i] >>>...