Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C++ by Gevorg ( 15 years ago )
//поиск решений задачи: из 123456789 получить target = 100

if(!window.console){ //для IE и отключенного Firebug
    console = {log: function(X){
            if(arguments.length <=1)
                alert&#40;X&#41;;
        },
        time: function(){
            dat=(new Date()).getTime();
        },
        tmeEnd: function(){
            alert&#40;(new Date(&#41;).getTime() - dat);
        }
    }
}
console.time('a'); //данные
s0 = '123456789';
x0 = [0,0,0,0,0,0,0,0, 4];
a = ['+','-','/','*',''];
var target = 100;

plus1 = function(x, i){ //5-ричный счётчик
    if(i==null) i=0;
    if(++x[i] >= 5){
        x[i] =0;
        if(++i >=8) return i;
        return plus1(x, i);
    }else return i;
}
window.sum =0; //поиск решений
var n=1, nn=0, leftPar, rightPar, wasLeftPar, wasDivide;
do{
    s='sum=';
    wasLeftPar = wasDivide =false;
    
    for(var i =0; i <=8; i++){
        if(x0[i]==3 && wasDivide){ //исправление приоритета деления
            wasLeftPar = true;
            var j = s.lastIndexOf('/') +1;
            s = s.substr(0, j) +'('+ s.substr(j) + s0.charAt(i) + a[x0[i]];
        }else if(wasLeftPar && x0[i] <3){
            wasLeftPar = false;
            s += s0.charAt(i) + ')' + a[x0[i]];
        }else
            s += s0.charAt(i) + a[x0[i]];
        if(x0[i]==2)
            wasDivide = true;
        else if(x0[i] !=4)
            wasDivide = false;
    }
    if(wasLeftPar) s+= ')';

    eval&#40;s&#41;;
    
    if(sum > 99.999 && sum < 100.001)
        console.log(++nn, n, s, sum);
    if(plus1(x0) ==8) break;
}while(++n <1000000);
console.log(n);
console.timeEnd('a');

 

Revise this Paste

Your Name: Code Language: