Javascriptで乱数と演算子を使用してランダムな数式を生成します

デビッドワーン

(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]

編集
0

コメントを追加

0

関連記事

分類Dev

javascript関数を使用してランダムな文字列を生成します

分類Dev

OR演算子を使用したラムダ式

分類Dev

乱数を生成しますが、LUA / Love2dではランダムな秒ごとに生成されます

分類Dev

Javascriptでランダムなx座標とy座標を使用して行列を生成します

分類Dev

Pythonで同じ演算子を使用してラムダ関数を追加する

分類Dev

ランダムを使用して、小数のない疑似乱数をどのように生成しますか?

分類Dev

乱数に基づいてランダムな背景画像を生成します

分類Dev

論理演算子と演算子を使用してパンダでDataFrameを作成する

分類Dev

コンマ演算子はラムダ式を非constexprにします

分類Dev

このラムダ関数がパターンマッチングと短所演算子を使用した解析エラーであるのはなぜですか?

分類Dev

C ++ 11ランダムライブラリを使用して乱数を生成する

分類Dev

RxJava-「サブスクライブ」ラムダ内で異なるタイプの変数(複数のチェーン演算子の結果)を使用します

分類Dev

比較演算子として変数を使用できますか?

分類Dev

C#を使用してFsCheckでランダムな文字列を生成します

分類Dev

ラムダ式の引数としての述語の演算子

分類Dev

ランダムな時間間隔で乱数を追加します

分類Dev

算術演算子をランダムに生成して検証する方法はありますか?

分類Dev

ラムダ内の「or」演算子を理解しようとしています

分類Dev

Javascript &&および|| 演算子とインライン三項関数はINSANEの結果を生成します

分類Dev

NumPyランダムシードは異なる乱数を生成します

分類Dev

2項演算子と単項演算子、予約語を使用し、括弧を使用しない式を解析します

分類Dev

パンダはLOC関数で使用し、演算子を使用します

分類Dev

C#-ラムダ式で「is」演算子を使用できません

分類Dev

Where句でOrとSelectを使用して、すべてのエントリをint、ラムダ式と比較します

分類Dev

乱数を設定し、0に達するまで5秒ごとにランダムに減らします(javascript)

分類Dev

ストリームとラムダ式を使用して1から10までの数値を出力する

分類Dev

乱数とランダムな数学記号を使用したPHP数学

分類Dev

パンダ-関数を適用し、ラムダ関数を使用して複数の行を生成します

分類Dev

Scala:関数の引数として使用されるラムダ式本体として `_`を使用しても機能しないのはなぜですか?

Related 関連記事

  1. 1

    javascript関数を使用してランダムな文字列を生成します

  2. 2

    OR演算子を使用したラムダ式

  3. 3

    乱数を生成しますが、LUA / Love2dではランダムな秒ごとに生成されます

  4. 4

    Javascriptでランダムなx座標とy座標を使用して行列を生成します

  5. 5

    Pythonで同じ演算子を使用してラムダ関数を追加する

  6. 6

    ランダムを使用して、小数のない疑似乱数をどのように生成しますか?

  7. 7

    乱数に基づいてランダムな背景画像を生成します

  8. 8

    論理演算子と演算子を使用してパンダでDataFrameを作成する

  9. 9

    コンマ演算子はラムダ式を非constexprにします

  10. 10

    このラムダ関数がパターンマッチングと短所演算子を使用した解析エラーであるのはなぜですか?

  11. 11

    C ++ 11ランダムライブラリを使用して乱数を生成する

  12. 12

    RxJava-「サブスクライブ」ラムダ内で異なるタイプの変数(複数のチェーン演算子の結果)を使用します

  13. 13

    比較演算子として変数を使用できますか?

  14. 14

    C#を使用してFsCheckでランダムな文字列を生成します

  15. 15

    ラムダ式の引数としての述語の演算子

  16. 16

    ランダムな時間間隔で乱数を追加します

  17. 17

    算術演算子をランダムに生成して検証する方法はありますか?

  18. 18

    ラムダ内の「or」演算子を理解しようとしています

  19. 19

    Javascript &&および|| 演算子とインライン三項関数はINSANEの結果を生成します

  20. 20

    NumPyランダムシードは異なる乱数を生成します

  21. 21

    2項演算子と単項演算子、予約語を使用し、括弧を使用しない式を解析します

  22. 22

    パンダはLOC関数で使用し、演算子を使用します

  23. 23

    C#-ラムダ式で「is」演算子を使用できません

  24. 24

    Where句でOrとSelectを使用して、すべてのエントリをint、ラムダ式と比較します

  25. 25

    乱数を設定し、0に達するまで5秒ごとにランダムに減らします(javascript)

  26. 26

    ストリームとラムダ式を使用して1から10までの数値を出力する

  27. 27

    乱数とランダムな数学記号を使用したPHP数学

  28. 28

    パンダ-関数を適用し、ラムダ関数を使用して複数の行を生成します

  29. 29

    Scala:関数の引数として使用されるラムダ式本体として `_`を使用しても機能しないのはなぜですか?

ホットタグ

アーカイブ