tkm-ymmt
6/3/2015 - 11:57 AM

makePatterns.js

#!/usr/bin/env node

var oneToNine = [1,2,3,4,5,6,7,8,9];
// var patterns = makePatterns(oneToNine);

// patterns.filter(function(val, i, arr){
// 
// });


function makePatterns(arr){
  var len = arr.length;
  // パターンをまとめる配列の初期化
  var patterns = [];
  // このパターンの配列を初期化
  var n;

  // 配列の各要素ごとに行う
  for(var i=0;i<len;i++){
    var n = (i) ? 2 : 1;
    while(i+n<=len){
      var pattern = [];
      for(var j=0;j<len;j++){
        if(j >=i && j < i+n){
          if(j===i && n<len){
            var cloned = arr.concat();
            var combined = parseInt(cloned.splice(j, n).join(''));
            pattern.push(combined);
          }
        } else {
          pattern.push(arr[j]);
        }
      }
      if(pattern.length) patterns.push(pattern);
      n++;
    }
  }

  return patterns;
}

function calculate(arr){
  var intAr = arr.map(function(val){
    return parseInt(val);
  });
  var anss = [];
  for(var i=0,l=arr.length;i<l;i++){
    var n = (i) ? i-1:0;
    while(n<l-1){
      var ans = '';
      for(var j=0;j<l;j++){
        if(j == l-1) {
          ans += intAr[j];
          continue;
        }
        if(j >= i && j <= i+n){
          ans += intAr[j] + '+';
        }  else {
          ans += intAr[j] + '-';
        }
      }
      console.log('i', i, 'n', n, 'ans', ans);
      anss.push(ans);
      n++;
    }
  }
  return anss;
}


var ex = [1, 2, 3, 4];
var p = calculate(ex);
console.log(p);

/*
元の配列 [1 2 3] 
配列から切り分けられる要素 [1]
作成するpattern [1, 2, 3]

配列から切り分けられる要素 [12]
作成するpattern [12, 3]

配列から切り分けられる要素 [123]
作成するpattern [123]

配列から切り分けられる要素 [23]
作成するpattern [1, 23]


増えるもの
- 切り取る要素の数 n..len
- 対象となる要素   index..len



*/