TypeScript Peaks
function peaks(a: number[]): number {
  const n = a.length;
  if (n <= 2) {
    return 0;
  }

  const sum: number[] = new Array(n).fill(0);
  let last = -1;
  let dist = 0;

  for (let i = 1; i + 1 < n; ++i) {
    sum[i] = sum[i - 1];
    if (a[i] > a[i - 1] && a[i] > a[i + 1]) {
      dist = Math.max(dist, i - last);
      last = i;
      ++sum[i];
    }
  }

  sum[n - 1] = sum[n - 2];
  if (sum[n - 1] === 0) {
    return 0;
  }

  dist = Math.max(dist, n - last);

  for (let i = (dist >> 1) + 1; i < dist; ++i) {
    if (n % i === 0) {
      last = 0;
      let j = i;
      for (; j <= n; j += i) {
        if (sum[j - 1] <= last) {
          break;
        }
        last = sum[j - 1];
      }
      if (j > n) {
        return n / i;
      }
    }
  }

  for (last = dist; n % last; ) {
    ++last;
  }

  return Math.trunc(n / last);
}

This finds the peak positions, then tests how many equal blocks can each contain at least one peak.