EDIT:下にオリジナルテキストがあります。
わかりました。私はそれをしました。私はコードがどれほど大変なのか誇りに思っていません。それは約千の場所でより効率的にできると確信していますが、機能します。
//[A,B,C,D]
var skillLevel = 24;
numbers = [];
for (i=0;i<=3;i++){
numbers[i] = (Math.floor(Math.random() * skillLevel) + 1);
}
function permutateOperations(numberArray){//This function, given an array of the form [A,B,C,D] where ABCD are numbers, places operations [+,-,*,%] between the numbers in the array
var possibilities = [];
var splicednumbers = numberArray.slice();
var operations = ['+','-','*','%'];
for (var j=0;j<=3;j++){//[A,j,B,k,C,m,D]
for(k=0;k<=3;k++){
for(m=0;m<=3;m++){
splicednumbers.splice(3,0,operations[m]);
splicednumbers.splice(2,0,operations[k]);
splicednumbers.splice(1,0,operations[j]);
possibilities.push(splicednumbers);
splicednumbers=numberArray.slice();
}
}
}
return possibilities;
}
function permutateNumbers(numberArray){//This function, given an array of the form [A,B,C,D], returns an array of arrays that have all the possible orderings
var possibility = [];
var possibilities = [];
var remainingArray=[];
var splicednumbers = numberArray.slice();
for (var i=0;i<=3;i++){
threeRemain = splicednumbers.slice();//[A,B,C,D]
possibility[0]=splicednumbers.splice(i,1)[0];
for(var j=0;j<=2;j++){
twoRemain=splicednumbers.slice();//[A,B,C]
possibility[1]=splicednumbers.splice(j,1)[0];
for(var k=0;k<=1;k++){
oneRemain = splicednumbers.slice(); //[A,B]
possibility[2]=splicednumbers.splice(k,1)[0];
for(var m=0;m<=0;m++){
possibility[3]=splicednumbers.splice(m,1)[0]; //[A]
possibilities.push(possibility.slice());
}
splicednumbers=oneRemain.slice();
}
splicednumbers=twoRemain.slice();
}
splicednumbers=threeRemain.slice();
}
return possibilities;
}
function permutateParenthesis(operationArray){//I AM SORRY THIS IS AWFUL BUT I COULDN'T THINK OF ANYTHING ELSE
//Given an array like [A,&,B,&,C,&,D], where ABCD are numbers and & is any operation, returns the 5 possible arrays that result from having parenthesis in different positions within it.
saved = operationArray.slice();
//[A,&,B,&,C,&,D]
permutations = [];
//First option
operationArray.splice(0,0,"(");
operationArray.splice(4,0,")");
permutations.push(operationArray.slice());
operationArray = saved.slice();
//Second option
operationArray.splice(0,0,"(");
operationArray.splice(3,0,")");
operationArray.splice(4,0,"(");
operationArray.splice(10,0,")");
permutations.push(operationArray.slice());
operationArray = saved.slice();
//Third option
operationArray.splice(0,0,"(");
operationArray.splice(6,0,")");
permutations.push(operationArray.slice());
operationArray = saved.slice();
//Fourth option
operationArray.splice(2,0,"(");
operationArray.splice(7,0,")");
permutations.push(operationArray.slice());
operationArray = saved.slice();
//Fifth option
operationArray.splice(4,0,"(");
operationArray.splice(8,0,")");
permutations.push(operationArray.slice());
operationArray = saved.slice();
return permutations;
}
finalnumbers = permutateNumbers(numbers);
operationNumbers = [];
for (i=0;i<finalnumbers.length;i++){
operationNumbers.push(permutateOperations(finalnumbers[i]));
}
parenthesisNumbers=[];
//Showtime
for (var j=0;j<operationNumbers.length;j++){
for (var k=0;k<operationNumbers[j].length;k++){
parenthesisNumbers.push(permutateParenthesis(operationNumbers[j][k]));
if (eval(operationNumbers[j][k].join(""))===24){//get a string with the finished combination, eval it to perform the operation, see if it is 24
console.log(operationNumbers[j][k].join("") + " Is valid");
}
}
}
ORIGINAL:
私はここでほとんどの人が問題を欠けていると思います。
ここで問題となるのは、24以下の乱数を生成しないことです(これは、あなたがする必要のあるものでもありません)。[50,6,6,2]の数字が6 * 2 *(50%6)=あなたが上限を必要とすると思います。)
ここで問題となるのは、4つの数字を取得した後、それらをチェックすることです。それは、操作の組み合わせを考えれば24になる可能性があります。
あなたは[+、 - 、*、%]と4つの数字[A、B、C、D]の4つの操作を持っています。これらの2つのセットのすべての組み合わせをチェックする必要があります。 4 + 4 * 4([+、+、+、+]のすべての組み合わせを実行することを意味するので、 - 、*、%])は、[A、B、C、D]、4 * 3 * 2 * 1の可能な組み合わせのそれぞれについてチェックします。
次に、posisbilitiesをもう少し乗算する括弧を考慮しなければなりません。
私はイニシアチブに拍手を送っています。興味深い問題だと思いますが、ここでlibikに同意するつもりです。あなたが望むのは、javascriptを学ぶのが簡単なことです。
あなたが正しい方向を指していることを願ったら、私ができるなら助けてくれることを喜んで喜んでいます。私はそれが面白い問題だと思うので正直にそれを解決しようとするかもしれません。
'parseInt(Math.random()* 24)'は0から23までの整数を与えるべきです – Icepickle
与えられた数を得るための条件は何ですか? – menaka
乱数やソルバーがほしいのですか? –