/** * Time: 7 15 30 * Distance: 9 40 200 */ const example = [ { time: 71530, distance: 940200, } ] /** * Time: 58 99 64 69 * Distance: 478 2232 1019 1071 */ const input = [ { time: 58996469, distance: 478223210191071, }, ] function caculRangeOfBeatRecord(time: number, distance: number) { const mid = time / 2; const dist = Math.sqrt(Math.pow(time, 2) / 4 - distance); return { start: mid - dist, // include end: mid + dist, // exclude } } /** * count natrual numbers in the range. it could be real number. * @param {number} start * @param {number} end * @returns natrual numbers in the range */ function countRange(start: number, end: number) { return Math.ceil(end - 1) - Math.floor(start + 1) + 1 } const res = input.map(e => { const range = caculRangeOfBeatRecord(e.time, e.distance); const count = countRange(range.start, range.end); console.log(range, count) return count; }).reduce((a, b) => a * b, 1); console.log(res);