算法:解三階幻方

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

要求:編程語言,1-9數字不重復。

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]);
      });

      // 是否重復項目
      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;
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

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