y1 및 y2 좌표로 정의된 수직 영역 세트가 있습니다. 여기서 y1은 시작점이고 y2는 각 영역의 끝점입니다.
좌표계의 원점은 왼쪽 위 모서리이므로 y2는 항상 y1보다 큽니다.
이것은 예입니다 -
const regions = [ [10, 100], [50, 120], [60, 180], [140, 220] ];
우리는 하나의 영역 배열을 첫 번째 인수로, 숫자를 두 번째 인수로 취하는 JavaScript 함수를 작성해야 합니다.
특정 크기(함수의 두 번째 인수로 지정됨)보다 큰 모든 분리된 교차점을 찾고 싶습니다.
예를 들어 20단위라고 가정해 보겠습니다.
그러면 위 배열의 출력은 다음과 같아야 합니다. -
const output = [ [60, 100], [140, 180] ];
단순화된 알고리즘을 사용하고 제품 전체에서 중복 항목을 검색하는 데 사용할 수 있습니다.
그런 다음 알 수 없는 일치 항목만 반복하고 필터링하여 공통 부분을 가져옵니다.
예
이에 대한 코드는 -
const regions = [ [10, 100], [50, 120], [60, 180], [140, 220] ]; const getIntersections = (arr,num) => { let disjoint, res; return arr.reduce((acc,val,ind,array) => { if (val.used){ return acc; }; res = array.map((el, index) => array[(ind + index) % array.length]) .reduce((s,e) => { disjoint = [Math.max(s[0],e[0]), Math.min(s[1],e[1])]; return disjoint[0] < disjoint[1] ? (e.used = true, disjoint) : s; }); res[1] - res[0] > num && acc.push(res); return acc; },[]); } console.log(getIntersections(regions, 20));
출력
콘솔의 출력은 -
[ [ 60, 100 ], [ 140, 180 ] ]