[ya-day1] swimmer problem WIP
parent
89a0abcbaf
commit
643d42c748
@ -0,0 +1,3 @@
|
|||||||
|
import { toGetClosestPoint } from "./toGetClosestPoint";
|
||||||
|
|
||||||
|
export default toGetClosestPoint;
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
import { describe, it, expect } from "vitest";
|
||||||
|
import { toGetClosestPoint } from "./toGetClosestPoint.ts";
|
||||||
|
|
||||||
|
describe("toGetClosestPoint", () => {
|
||||||
|
it("toGetClosestPoint equale NW", () => {
|
||||||
|
expect(toGetClosestPoint(-1, -2, 5, 3, -4, 6)).toBe("NW");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("toGetClosestPoint equale N", () => {
|
||||||
|
expect(toGetClosestPoint(-1, -2, 5, 3, 4, 5)).toBe("N");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("toGetClosestPoint equale NE", () => {
|
||||||
|
expect(toGetClosestPoint(-1, -2, 5, 3, 9, 3)).toBe("NE");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("toGetClosestPoint equale E", () => {
|
||||||
|
expect(toGetClosestPoint(-1, -2, 5, 3, 7, 0)).toBe("E");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("toGetClosestPoint equale SE", () => {
|
||||||
|
expect(toGetClosestPoint(-1, -2, 5, 3, 8, -4)).toBe("SE");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("toGetClosestPoint equale S", () => {
|
||||||
|
expect(toGetClosestPoint(-1, -2, 5, 3, 2, -4)).toBe("S");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("toGetClosestPoint equale SW", () => {
|
||||||
|
expect(toGetClosestPoint(-1, -2, 5, 3, -5, -2)).toBe("SW");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("toGetClosestPoint equale W", () => {
|
||||||
|
expect(toGetClosestPoint(-1, -2, 5, 3, -5, 2)).toBe("W");
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
type Direction = "N" | "E" | "S" | "W" | "NW" | "NE" | "SW" | "SE";
|
||||||
|
export function toGetClosestPoint(
|
||||||
|
x1: number,
|
||||||
|
y1: number,
|
||||||
|
x2: number,
|
||||||
|
y2: number,
|
||||||
|
sx: number,
|
||||||
|
sy: number,
|
||||||
|
) {
|
||||||
|
let direction: Direction = "N";
|
||||||
|
|
||||||
|
const sectors: Record<Direction, number[]> = {
|
||||||
|
NW: [x1, y2],
|
||||||
|
N: [x1, y2],
|
||||||
|
NE: [x2, y2],
|
||||||
|
E: [x2, y2],
|
||||||
|
SE: [x2, y1],
|
||||||
|
S: [x1, y1],
|
||||||
|
SW: [x1, y1],
|
||||||
|
W: [x1, y2],
|
||||||
|
};
|
||||||
|
|
||||||
|
for (let key in sectors) {
|
||||||
|
const [x, y] = sectors[key];
|
||||||
|
|
||||||
|
if (sx <= x && sy >= y) {
|
||||||
|
direction = "NW";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (sx >= x && sy > y && sx <= x2) {
|
||||||
|
direction = "N";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (sx >= x && sy >= y) {
|
||||||
|
direction = "NE";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sx >= x && sy <= y && sy >= y1) {
|
||||||
|
direction = "E";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sx >= x && sy <= y && sx <= x2) {
|
||||||
|
direction = "S";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sx >= x && sy <= y) {
|
||||||
|
direction = "SE";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sy <= y && sx <= x) {
|
||||||
|
direction = "SW";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sy <= y2 && sy >= y1 && sx <= x) {
|
||||||
|
direction = "W";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return direction;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue