TTTTT2

by AntonLapshin

HTML

<!DOCTYPE html>
<html>

  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Coding challenge</title>
    <link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.9.2.css">
  </head>

  <body>
    <div id="qunit"></div>
    <div id="qunit-fixture"></div>
    <script src="https://code.jquery.com/qunit/qunit-2.9.2.js"></script>
  </body>

</html>

JavaScript

/* const findNumberOfFairIndexes = ({ A, B }) => {
  const sumA = [];
  const sumB = [];
  
  for(let i = 0; i < A.length; i++){
    sumA[i] = (i === 0 ? 0 : sumA[i - 1]) + A[i];
    sumB[i] = (i === 0 ? 0 : sumB[i - 1]) + B[i];
  }
  
  const mean = sumA[A.length - 1] / 2;
  
  const numberOfFairIndexes = sumA.filter((a, i) => {
    return a === mean && sumB[i] === mean && i !== sumA.length - 1;
  }).length;
  
  return numberOfFairIndexes;
}; */

const findNumberOfFairIndexes = ({ A, B }) => {
  const sumA = [];
  const sumB = [];
  const map = {};
  
  for(let i = 0; i < A.length; i++){
    sumA[i] = (i === 0 ? 0 : sumA[i - 1]) + A[i];
    sumB[i] = (i === 0 ? 0 : sumB[i - 1]) + B[i];
    if (sumA[i] === sumB[i] && i !== A.length - 1){
    	map[sumA[i]] = ++map[sumA[i]] || 1;
    }
  }
  
  const mean = sumA[A.length - 1] / 2;
  return map[mean] || 0;
};

function solution({ A, B }) {
    var ltA = [];
    var ltB = [];
    var rtA = [];
    var rtB = [];
    const N = A.length;
    let answer = 0;
    
    for (let li = 0; li < N; li++) {
        const ri = N - 1 - li;
        if (li == 0) {
            ltA[li] = A[li];
            ltB[li] = B[li];
            rtA[li] = A[ri];
            rtB[li] = B[ri];
        }
        else {
            ltA[li] = A[li] + ltA[li - 1];
            ltB[li] = B[li] + ltB[li - 1];
            rtA[li] = A[ri] + rtA[li - 1];
            rtB[li] = B[ri] + rtB[li - 1];
        }
    }
    
    /*
    for (let i = 0; i < N; i++)
        if (ltA[i] == ltB[i] && ltB[i] == rtA[N - 1 - i] && rtA[N - 1 - i] == rtB[N - 1 - i])
            answer++;
    */
    for (let i = 0; i < N; i++)
        if (ltA[i] == ltB[i] && ltB[i] == rtA[i] && rtA[i] == rtB[i] && i !== N - 1)
            answer++;
    
    console.log({ ltA, ltB, rtA, rtB });
    return answer;
}

[
  [{ A: [4, -1, 0, 3], B: [-2, 5, 0, 3]}, 2],
	[{ A: [2, -2, -3, 3], B: [0, 0, 4, -4]}, 1],
  [{ A: [4, -1, 0, 3], B: [-2, 6, 0, 4]}, 0],
  [{ A: [3, 2, 6], B: [4, 1, 6]}, 0],
 ...