算法:解三階幻方

題目:3X3 的九宮格,每個(gè)橫豎斜相加都等于15,使用1-9數(shù)字。

要求:編程語(yǔ)言,1-9數(shù)字不重復(fù)。

function nMagic({ time = 3, sum = 15, from = 1, to = 9 } = {}) {
  const loop = ({
    results = [],
    arrs = [],
    time = 1,
    on = 1,
    from = 1,
    to = 4,
    fn = null
  }) => {
    for (let i = from; i <= to; i++) {
      let add = [].concat(arrs, i);
      if (on < time) {
        results = loop({
          results,
          arrs: add,
          time,
          on: on + 1,
          from,
          to,
          fn
        });
      } else {
        if (fn) {
          if (fn(add)) {
            results.push(add);
          }
        } else {
          results.push(add);
        }
      }
    }
    return results;
  };

  var expression = loop({
    time,
    from,
    to,
    fn(add) {
      let obc = {};
      let has = false;
      let n = 0;
      add.map(v => {
        if (obc[v]) has = true;
        else obc[v] = true;
        n += v;
      });
      return !has && n === sum;
    }
  });

  var combo = [];

  loop({
    time,
    from: 0,
    to: expression.length - 1,
    fn(add) {
      let no = false;

      let arr = [];
      let temp = [];
      let obc = {};
      add.map(v => {
        arr.push(expression[v]);
        temp = [].concat(temp, expression[v]);
      });

      // 是否重復(fù)項(xiàng)目
      temp.map(v => {
        if (obc[v]) no = true;
        else obc[v] = true;
      });
      if (no) return false;

      // 是否豎著的值滿足條件
      for (let i = 0; i < time; i++) {
        let n = 0;
        arr.map(item => {
          n += item[i];
        });
        if (n !== sum) return false;
      }

      // 是否斜著的值滿足條件
      let xiezhe1 = 0;
      let xiezhe2 = 0;
      arr.map((item, j) => {
        xiezhe1 += item[j];
        xiezhe2 += item[arr.length - j - 1];
      });
      if (xiezhe1 !== sum || xiezhe2 !== sum) return false;

      combo.push(arr);
      return true;
    }
  });

  return combo;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 作者:楊舸 跟數(shù)獨(dú)游戲的結(jié)緣,是一次次的空中飛行。經(jīng)常出差,如何消磨旅途時(shí)間?航空雜志都翻爛了,小說(shuō)也不是每次出差...
    Sting閱讀 13,553評(píng)論 1 8
  • 每次回家,迎接自己的那個(gè)女人,總是滿臉的笑容。而看到家里總是被她收拾得干干凈凈的,心里有種說(shuō)不出來(lái)的感覺(jué)。...
    魯廉羽昕閱讀 257評(píng)論 0 1
  • 文/寧宇霄 紀(jì)楠說(shuō),他已經(jīng)整整一年沒(méi)怎么見(jiàn)過(guò)姑娘了。所以看到晾衣桿上的那件紅裙,就像是在沙漠里瀕死的時(shí)候,看到了一...
    流噪閱讀 1,239評(píng)論 3 3
  • 1.剛剛做了個(gè)彩超,小生命挺好的,等著下午驗(yàn)血報(bào)告,我相信他跟他媽媽一樣,很厲害的。迫不及待的想跟老公分享… 2....
    蘇遠(yuǎn)1閱讀 147評(píng)論 0 1
  • https://a.meipian.cn/6cbhm4s
    一溪風(fēng)月閱讀 233評(píng)論 0 0

友情鏈接更多精彩內(nèi)容