Показать сообщение отдельно
  #7 (permalink)  
Старый 27.03.2020, 18:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

перебор вариантов с бору по сосенке лимит 2 x 10
Pavel_Meridian,
<script>
function permute(arr) {
  var l = arr.length,
      used = Array(l),
      data = Array(l);
  return function* backtracking(pos) {
    if(pos == l) yield data.slice();
    else for(var i=0; i<l; ++i) if(!used[i]) {
      used[i] = true;
      data[pos] = arr[i];
      yield* backtracking(pos+1);
      used[i] = false;
    }
  }(0);
}
function permutDevide(arr)
{
   if(arr.reduce((a, b) => a - b, 20)) return false;
   const gen = permute(arr);
   let current = gen.next();
   while(!current.done) {
   let temp = [], num = 0;
   const res = [temp];
   for(const elem of current.value) {
   temp.push(elem);
   num += elem;
   if(num == 10) {temp = [], res.push(temp)}
   }
   if(res.length == 2) return res;
   current = gen.next();
   }
   return false
}
const test = [[-2, 5, 5, 3, 2, 7], [10, 5, 5], [5, 3, 2, -1],
[7, 1, 3, 5, 2, 2], [1, 1, 10, 1, 1, 6], [8, 7, 5], [90, 10, -80]];
for(const arr of test) document.write(`${JSON.stringify(arr)} => ${JSON.stringify(permutDevide(arr))}<br>`)

</script>
Ответить с цитированием