Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const wire1 = 'Your input here'.split(',');
- const wire2 = 'Your input here'.split(',');
- const convertToCoordinates = (wirePath) => {
- let currentX = 0;
- let currentY = 0;
- const coordinates = [];
- wirePath.forEach(step => {
- const direction = step.substring(0, 1);
- const distance = parseInt(step.substring(1));
- for (var i = 1; i <= distance; i++) {
- switch (direction) {
- case 'R':
- currentY++;
- coordinates.push({ x: currentX, y: currentY });
- break;
- case 'L':
- currentY--;
- coordinates.push({ x: currentX, y: currentY });
- break;
- case 'U':
- currentX++;
- coordinates.push({ x: currentX, y: currentY });
- break;
- case 'D':
- currentX--;
- coordinates.push({ x: currentX, y: currentY });
- break;
- }
- }
- });
- return coordinates;
- };
- const findWireCrossings = (wire1Coordinates, wire2Coordinates) => {
- return wire1Coordinates.reduce((crossings, wire1Coord) => {
- const crossed = wire2Coordinates.find(wire2Coord => wire2Coord.x === wire1Coord.x && wire2Coord.y === wire1Coord.y);
- if (crossed) {
- crossings.push(crossed);
- return crossings;
- }
- return crossings;
- }, []);
- };
- const findShortestDistance = (crossings) => {
- return crossings.reduce((shortestDistance, crossing) => {
- const distanceFromCentralPort = Math.abs(crossing.x) + Math.abs(crossing.y);
- if (distanceFromCentralPort < shortestDistance) {
- return distanceFromCentralPort;
- }
- return shortestDistance;
- }, Infinity);
- };
- const stepsToCrossing = (wirePath, target) => {
- let currentX = 0;
- let currentY = 0;
- let steps = 0;
- outer:
- for (var i = 0; i < wirePath.length; i++) {
- const direction = wirePath[i].substring(0, 1);
- const distance = parseInt(wirePath[i].substring(1));
- for (var j = 1; j <= distance; j++) {
- if (currentX === target.x && currentY === target.y) {
- break outer;
- }
- steps++;
- switch (direction) {
- case 'R':
- currentY++;
- break;
- case 'L':
- currentY--;
- break;
- case 'U':
- currentX++;
- break;
- case 'D':
- currentX--;
- break;
- }
- }
- }
- return steps;
- };
- const findMinimalSignalDelay = (crossings, wire1Path, wire2Path) => {
- return crossings.reduce((steps, crossing) => {
- const totalSteps = stepsToCrossing(wire1Path, crossing) + stepsToCrossing(wire2Path, crossing);
- if (totalSteps < steps) {
- return totalSteps;
- }
- return steps;
- }, Infinity);
- };
- const program = () => {
- const wire1Coordinates = convertToCoordinates(wire1);
- const wire2Coordinates = convertToCoordinates(wire2);
- const crossings = findWireCrossings(wire1Coordinates, wire2Coordinates);
- const shortestDistance = findShortestDistance(crossings);
- console.log(shortestDistance);
- const minimalSignalDelay = findMinimalSignalDelay(crossings, wire1, wire2);
- console.log(minimalSignalDelay);
- };
- program();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement