function expSwap(e) {
var v,s,l;
v = this.val;
s = this.str;
l = this.level;
this.val = e.val;
this.str = e.str;
this.level = e.level;
e.val = v;
e.str = s;
e.level = l;
}
function expNew(val, str, level) {
var obj = new Object;
obj.val = val;
obj.str = str;
obj.level = level;
obj.swap = expSwap;
return obj
}
function genExp(val, e1, e2, symbol, level, rule) {
if (e1.level < level)
str1 = "(" + e1.str + ")";
else
str1 = e1.str;
if (e2.level < level || e2.level <= level && rule == 0)
str2 = "(" + e2.str + ")";
else
str2 = e2.str;
return expNew(val, str1+symbol+str2, level);
}
function calc(num, len, r) {
var i, j, t;
if (len == 1)
if (Math.abs(num[0].val - r) > 1e-8)
return false;
else {
this.answer = num[0].str + "";
return true;
}
for (i = len - 1; i >= 0; --i) {
num[len - 1].swap(num[i]);
for (j = len - 2; j >= 0; --j) {
num[len - 2].swap(num[j]);
t = num[len - 2];
num[len - 2] = genExp(t.val + num[len - 1].val,
t, num[len - 1], "+", 4, 1); if (calc(num, len - 1, r)) return true; num[len - 2] = genExp(t.val - num[len - 1].val, t, num[len - 1], "-", 4, 0); if (calc(num, len - 1, r)) return true; num[len - 2] = genExp(t.val * num[len - 1].val, t, num[len - 1], "*", 5, 1); if (calc(num, len - 1, r)) return true; if (Math.abs(num[len - 1].val) > 1e-8) { num[len - 2] = genExp(t.val / num[len - 1].val, t, num[len - 1], "/", 5, 0); if (calc(num, len - 1, r)) return true; } num[len - 2] = t; num[len - 2].swap(num[j]); } num[len - 1].swap(num[i]); } return false;}
function calc24() { var e, str, i; e = new Array(4); for (i = 0; i < 4; ++i) { str = document.getElementById("num"+(i+1)).value; e[i] = expNew(parseFloat(str), str, 100); } var ansval = parseFloat(document.getElementById("numcalc").value); if (calc(e, 4, ansval)) { document.getElementById("ans").innerHTML = this.answer + "=" + ansval; } else { document.getElementById("ans").innerHTML = "No answer"; }}
document.getElementById("ans").innerHTML = "Loading finish"
