首页 > 其他分享 >简单的24点小游戏

简单的24点小游戏

时间:2023-01-08 13:56:24浏览次数:108  
标签:24 arr const idx 小游戏 w3 w2 简单


简单的24点小游戏

游戏规则

随机生成4个数字(1-10),通过+-*/四则运算将4个数字算出24即可

游戏设计

生成4个数字,并给出参考答案

  • 随机生成0-10之间的4个整数
  • 穷举4个数所有四则运算得出24点的所有组合
  • 无法得到24点则重复上述两点重新生成

游戏实现

随机生成4个整数

function createNums() {
	return Array(4).fill('').map(item => Math.ceil(Math.random() * 10));
}

穷举所有组合场景

  1. 列出4个数字所有的排列方式
  2. 列出4组数字间的3个运算符的所有排列方式
  3. 列出4组数字间存在括号的所有场景
  4. 将上面3种排列组合方式进行组合排列,计算值为24的组合方式

生成4组数字的排列方式

将4组数字放置到数组内,通过递归方式得出所有排列方式的数组集合

function swap(arr, idx1, idx2) {
    const temp = arr[idx1]
    arr[idx1] = arr[idx2]
    arr[idx2] = temp
}

function createArr(_arr) {
    const tempArr = []
    function getArr(arr, idx) {
      if (idx >= arr.length - 1) {
        tempArr.push([...arr])
      } else {
        for (let index = idx; index < arr.length; index++) {
          swap(arr, index, idx)
          getArr(arr, idx + 1)
          swap(arr, index, idx)      
        }
      }
    }
    getArr(_arr, 0);
    return tempArr;
}

生成3个运算符的所有排列方式

排列方式为4的3次方,通过4进制的方式进行排列

function getOperator () {
  let i = 0
  const wArr = []
  while(i < 64) {
    wArr.push([Math.floor(i / 16), Math.floor((i % 16) / 4), i % 4])
    i++
  }
  return wArr
}

列出4组数字间存在括号的所有场景

a b c d
(a b) c d
a (b c) d
a b (c d)
(a b c) d
a (b c d)
(a b) (c d)

组合所有计算场景

计算得出可以算出成24点的组合就return

function run(arr) {
  const tempArr = createArr(arr)
  const wArr = getOperator()
  for (let idx = 0; idx < tempArr.length; idx++) {
    const [n1, n2, n3, n4] = tempArr[idx];
    
    for (let idx2 = 0; idx2 < wArr.length; idx2++) {
      const [w1, w2, w3] = wArr[idx2];
      const arr2 = [
        `${n1}${o[w1]}${n2}${o[w2]}${n3}${o[w3]}${n4}`,
        `${n1}${o[w1]}(${n2}${o[w2]}${n3})${o[w3]}${n4}`,
        `${n1}${o[w1]}(${n2}${o[w2]}${n3}${o[w3]}${n4})`,
        `${n1}${o[w1]}${n2}${o[w2]}(${n3}${o[w3]}${n4})`,
        `(${n1}${o[w1]}${n2})${o[w2]}${n3}${o[w3]}${n4}`,
        `(${n1}${o[w1]}${n2})${o[w2]}(${n3}${o[w3]}${n4})`,
        `(${n1}${o[w1]}${n2}${o[w2]}${n3})${o[w3]}${n4}`,
      ]
      for (let idx3 = 0; idx3 < arr2.length; idx3++) {
        const str = arr2[idx3];
        if (eval(str) === 24) {
          console.log(str)
          return str
        }
      }
    }
  }
}

游戏预览

地址:https://code.juejin.cn/pen/7186132764352053281

<iframe height="400" src="https://code.juejin.cn/pen/7186132764352053281" width="100%"></iframe>

标签:24,arr,const,idx,小游戏,w3,w2,简单
From: https://www.cnblogs.com/suyuanli/p/17034596.html

相关文章

  • neon serverless postgres 简单试用
    内容来自官方的docker-compose内容,主要是测试试用参考架构  从以上图可以看出,neon应该包含了几个组件,safekeeper,pageserver,计算节点,以及对象存储,运行的服务也是参......
  • UI Automation PowerShell Extensions使用,编写powershell脚本实现ui自动化操作 简单实
    借鉴这几个网站。使用PowerShellUI自动扩展操作应用(自动化)-PMP风格(hatenablog.com)UIAutomationPowerShellExtensions的Download(再分发)–code-lab.netPowe......
  • idea的简单介绍
    上一篇博客中只是了解一下java文件是怎么编译的,但是一般来说大家都是使用编程软件来进行开发,我是使用IntelliJIDEA进行开发的官网下载IDEA(自行安装哈):地址:https://www.jetb......
  • Phaser的简单使用
    Phaser属于jdk1.7新增的同步工具类 使用CountDownLatch,主线程执行的任务要等副线程执行完毕才可执行Phaser达到同等的效果  packagecom.java.test.phaser;im......
  • CMake简单教程
    title:CMake学习date:2023-01-07T20:29:55Zlastmod:2023-01-07T22:33:31ZCMake学习主要就是学习如何写CMakeList.txt,直接从项目实战项目结构common:制......
  • powershell简单的使用gui
    powershell作为win的官方shell,可以调用.net对象。让它可以无所不能。例如给脚本加上图形界面更直观。而且这是win占用文件体积最小的图形程序。几行文本就能构建一个gui程......
  • 适合编程初学者的开源项目:小游戏2048(Go语言版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。2048游戏规则一共16个单元格,初始时由2或者4构成。1、手指向一个方向滑动,所有格子会向那个方向运动。2......
  • 牛客进阶刷题8:非整数倍数据位宽转换24to128
    第一阶段:120bit+8bit第二阶段:16bit+96bit+16bit第三阶段:8bit+120bit所以相当于发送了16个24bit数据,作为一个循环。第6、第11两个数据被拆开使用。根据上述分析可知,缓存......
  • p24-p25参数返回值局部变量以及堆排序代码实现
    函数的返回值8位(一个字节)则放到al16位放ax32位放eax64位放raxoffset偏移(可看作一个具体的地址参数传递的办法:1.寄存器2.堆栈整数类型的参数,一律使用int类型:无论......
  • java中String类型的相关知识的简单总结
    java中String类型的相关知识总结一、常用方法:1.构造方法:byte数组可指定offset和length可指定charsetchar数组可指定offset和count字符序列String......