【问题标题】:How can this simple dice roller be optimized or cleaned up?如何优化或清理这个简单的骰子滚轮?
【发布时间】:2021-04-19 15:23:17
【问题描述】:

好吧,我终于做到了,我降低了期望值,并且能够创建一个掷 2 个骰子的简单应用程序。我的问题是,如何优化或清理它?代码似乎比它需要的要长,但也许可以清理一下。我也很高兴看到其他人如何编写相同的代码。如有任何建议,我将不胜感激。

谢谢

    function rollDice() {
      var d1Results = [];
      var d2Results = [];
      var diceSum = [];
      var twoTotal = [];
      var threeTotal = [];
      var fourTotal = [];
      var fiveTotal = [];
      var sixTotal = [];
      var sevenTotal = [];
      var eightTotal = [];
      var nineTotal = [];
      var tenTotal = [];
      var elevenTotal = [];
      var twelveTotal = [];
      var sum = 0;

      for (let i = 1; i <= 1000; i++) {
        dice1 = Math.trunc(Math.random() * 6) + 1;
        d1Results.push(dice1);
        dice2 = Math.trunc(Math.random() * 6) + 1;
        d2Results.push(dice2);

        sum = dice1 + dice2;
        diceSum.push(sum);

        if (sum == 2) {
          twoTotal.push(sum);
        }
        if (sum == 3) {
          threeTotal.push(sum);
        }
        if (sum == 4) {
          fourTotal.push(sum);
        }
        if (sum == 5) {
          fiveTotal.push(sum);
        }
        if (sum == 6) {
          sixTotal.push(sum);
        }
        if (sum == 7) {
          sevenTotal.push(sum);
        }
        if (sum == 8) {
          eightTotal.push(sum);
        }
        if (sum == 9) {
          nineTotal.push(sum);
        }
        if (sum == 10) {
          tenTotal.push(sum);
        }
        if (sum == 11) {
          elevenTotal.push(sum);
        }
        if (sum == 12) {
          twelveTotal.push(sum);
        }
      }
      console.log(d1Results);
      console.log(d2Results);
      console.log(diceSum);
      console.log(`
      2: ${twoTotal.length}
      3: ${threeTotal.length}
      4: ${fourTotal.length}
      5: ${fiveTotal.length}
      6: ${sixTotal.length}
      7: ${sevenTotal.length}
      8: ${eightTotal.length}
      9: ${nineTotal.length}
      10: ${tenTotal.length}
      11: ${elevenTotal.length}
      12: ${twelveTotal.length}
      `);
    }

    rollDice();

【问题讨论】:

    标签: javascript arrays optimization dice


    【解决方案1】:

    我首先添加一个块来创建一个新范围。

    然后我创建单一用途函数rollDie(掷一个骰子),rollDice(咖喱函数,我可以选择骰子上的面数,应该掷多少个骰子以及重复多少次)和sumDice

    console.clear();
    {
      "use strict";
      const results = [];
      
      const rollDie = faces => Math.ceil(Math.random() * faces)
      
      const rollDice = faces => many => times => {
        for (let i = 0; i < times; i++ ) {
          const temp = []      
          for (let j = 0; j < many; j++) {
            temp.push(rollDie(faces))
          }
          results.push(temp)
        }
        return results;
      }
      
      const sumDice = result => {
        return result.reduce((carry1, item1) => {
          const index = item1.reduce((carry2, item2) => carry2 + item2, 0);
          carry1[index] = (carry1[index] || 0) + 1;
          return carry1;
        }, {})
      }
      
      let result = rollDice(6)(2)(1000);
      let sum = sumDice(result);
      
      console.log({result}, {sum});
      
    }

    【讨论】:

      猜你喜欢
      • 2016-08-10
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 1970-01-01
      相关资源
      最近更新 更多