(21 + 13)* 56のような最も単純な数式をランダム番号を使用して出力するプログラムを作成したいと思います。1〜100、プログラムは、レベルパラメータを取る必要があり、レベルを決定する長さ、例えば、生成された式を:
ゲームは、(21 + 13)* 56のような加算+および乗算*演算子を使用して方程式を生成する必要があります。(括弧を使用)
----level 2
75 - 54 = 21
62 + 15 = 77
88 / 22 = 4
93 + 22 = 115
90 * 11 = 990
--level 3
( 21 + 13 ) * 56 = 1904
82 - 19 + 16 = 79
51 * ( 68 - 2 ) = 3366
入力は次のようになります:たとえば
level 3
出力は次のようになります。
( 21 + 13 ) * 56 // Simple expression using Random no.s
これまでのところ、角かっこなしで方程式を作成できますが、信頼できる解決策を提供するヘルプが必要です
これは私がこれまでに行ったことです:
var input = 'level 3'
input = input.split(' ')
var n = Number(input[1])
var x = ['/','*','-','+']
function randomNumberRange(min, max) {
return Math.floor(Math.random() * (max - min) + min);
}
var a = ''
for(var i=0;i<n;i++){
if(i !== n-1){
var n1 = randomNumberRange(1, 100)
var m = randomNumberRange(0, x.length);
var str = x[m];
a += n1
a +=' '+str+' '
}else{
a += n1
}
}
@plamutのアイデアを取り入れて、各ノードが左側と右側の演算子を表すバイナリツリーを作成しました。
たとえば、方程式2 * (3 + 4)
は次のように見ることができます
*
/ \
2 +
/ \
3 4
次のようにオブジェクトを使用して、これを非常に簡単に表すことができます。
var TreeNode = function(left, right, operator) {
this.left = left;
this.right = right;
this.operator = operator;
this.toString = function() {
return '(' + left + ' ' + operator + ' ' + right + ')';
}
}
次に、再帰関数を作成してそのようなツリーを構築できます。この場合、1つのサブツリーには、必要なノードの総数(=方程式の長さ)の半分が含まれます。
function buildTree(numNodes) {
if (numNodes === 1)
return randomNumberRange(1, 100);
var numLeft = Math.floor(numNodes / 2);
var leftSubTree = buildTree(numLeft);
var numRight = Math.ceil(numNodes / 2);
var rightSubTree = buildTree(numRight);
var m = randomNumberRange(0, x.length);
var str = x[m];
return new TreeNode(leftSubTree, rightSubTree, str);
}
ここだJSFiddle実施例では。
トップレベルでブラケットを避けるなど、特別な場合を気にしたいかもしれませんが、ここからはそれほど難しいことではありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加