美文网首页
4、数字心灵感应游戏

4、数字心灵感应游戏

作者: 杀破狼real | 来源:发表于2019-11-25 20:46 被阅读0次

    五组数字,对方心里想一个数,依次询问是否在组中,之后即可知道对方所想数字

    // 比如说30以内数字:
    
    // 第1组: 5 27 3 21 11 9 25 29 15 1 7 19 13 17 23
    // 第2组: 6 19 30 7 3 26 23 14 10 11 27 2 22 15 18
    // 第3组: 29 12 20 23 13 5 30 7 4 22 6 28 15 21 14
    // 第4组: 8 29 11 9 10 25 28 26 30 15 12 27 13 14 24
    // 第5组: 25 19 18 22 30 27 21 20 17 16 28 23 26 24 29
    

    下面附代码,仅供参考!

    // 二进制十进制转换
    
    /**
     * 10进制转2进制
     * @param target
     * @returns {string}
     */
    function ten2two(target) {
      let yu_arr = [target % 2];
    
      let val = Math.floor(target / 2);
      while (val > 1) {
        yu_arr.push(val % 2);
        val = Math.floor(val / 2);
      }
    
      if (val === 1) {
        yu_arr.push(val);
      }
    
      return yu_arr.reverse().join('');
    }
    
    /**
     * 2进制转10进制
     * @param target
     * @returns {*}
     */
    function two2ten(target) {
      return [...(target + '')].reverse().reduce((origin, item, index) => {
        origin = origin + item * Math.pow(2, index);
        return origin;
      }, 0);
    }
    
    /**
     * 根据指定长度生成对应的数据
     * @param count 指定长度
     * @returns {Array} 分配好的数据数组
     */
    function factory(count) {
      // 生成二进制数组
      const results = [...new Array(count)].map((item, index) => Number(ten2two(index + 1)));
    
      // 获取二进制最大长度
      const maxLength = String(Math.max(...results)).length;
    
      // 生成对应长度的空数组
      const dataObj = [...new Array(maxLength)].reduce((origin, item, index) => {
        origin[index + 1] = [];
        return origin;
      }, {});
    
      // 将2进制数据对应位等于1的10进制数字放到同一个数组中
      results.forEach(result => {
        for (let i = 0; i < maxLength; i++) {
          const num = Math.floor(result / Math.pow(10, i) % 10);
          if (num === 1) {
            dataObj[i + 1].push(two2ten(result));
          }
        }
      });
    
      return Object.keys(dataObj).map(key => dataObj[key].sort(() => Math.random() - 0.5));
    }
    
    // 比如说30以内的数据
    const data = factory(30);
    data.forEach((item, index) => console.log(`第${index + 1}组:`, ...item));
    

    原理很简单,就是利用2进制,第一组代表1(2的零次方),后面依次2、4、8、16,把存在的对应组的数字相加即是答案,试试看!

    相关文章

      网友评论

          本文标题:4、数字心灵感应游戏

          本文链接:https://www.haomeiwen.com/subject/mttswctx.html