1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- const util = require("util");
- const input = [
- "<x=14, y=15, z=-2>",
- "<x=17, y=-3, z=4>",
- "<x=6, y=12, z=-13>",
- "<x=-2, y=10, z=-8>",
- ];
- class Vector3 {
- /**
- * A 3D vector
- *
- * @param {number} x The X value of this vector
- * @param {number} y The Y value of this vector
- * @param {number} z The Z value of this vector
- */
- constructor(x, y, z) {
- this.x = x;
- this.y = y;
- this.z = z;
- }
- /**
- * Add another vector to this one
- *
- * @param {Vector3} operand The vector to add to this one
- * @returns {void}
- */
- add(operand) {
- this.x += operand.x;
- this.y += operand.y;
- this.z += operand.z;
- }
- }
- /**
- * Find the gravitational influence two moons have on each other
- *
- * @param {Vector3} moonA The first moon to consider
- * @param {Vector3} moonB The second moon to consider
- *
- * @returns {void}
- */
- function calculateGravity(moonA, moonB) {
- // The gravitational pull on Moon A caused by Moon B
- const gravityA = new Vector3(
- // eslint-disable-next-line no-nested-ternary
- moonB.x > moonA.x ? 1 : (moonB.x < moonA.x ? -1 : 0),
- // eslint-disable-next-line no-nested-ternary
- moonB.y > moonA.y ? 1 : (moonB.y < moonA.y ? -1 : 0),
- // eslint-disable-next-line no-nested-ternary
- moonB.z > moonA.z ? 1 : (moonB.z < moonA.z ? -1 : 0),
- );
- }
- /**
- * @param {string[]} inputs The day's input
- * @returns {Vector3[]} An array of Vector3's representing the positions of moons
- */
- function parseInput(inputs) {
- const moons = [];
- const parseRegex = new RegExp(/x=(-?\d+), y=(-?\d+), z=(-?\d+)/);
- for (const position of inputs) {
- // eslint-disable-next-line no-shadow-restricted-names
- const [undefined, x, y, z] = position.match(parseRegex);
- moons.push(new Vector3(parseInt(x, 10), parseInt(y, 10), parseInt(z, 10)));
- }
- return moons;
- }
- console.log(util.inspect(parseInput(input)));
|