簡單的24點小遊戲


簡單的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章