Add day 3 part 2 in awk

This commit is contained in:
kageru 2019-12-03 09:57:09 +01:00
parent 45b7008afd
commit 8a2b531c3f
2 changed files with 30 additions and 9 deletions

View File

@ -27,33 +27,51 @@ function changePosition(dir) {
y--; y--;
} }
function calculateDistances() {
if (grid[x,y] == "X" && x+y != 0)
intersectionPaths[x,y] += steps;
steps++;
}
function markCollisions() {
if (grid[x,y] != "" && grid[x,y] != wirenum) {
grid[x,y] = "X";
manhattan = abs(x) + abs(y);
if (manhattan < closestCollision && manhattan != 0)
closestCollision = manhattan;
}
else
grid[x,y] = wirenum;
}
BEGIN { BEGIN {
closestCollision = 1000000000; closestCollision = 1000000000;
shortestPath = 1000000000;
} }
{ {
wirenum++; wirenum++;
x = 0; x = 0;
y = 0; y = 0;
steps = 0;
len = separateCommands($1); len = separateCommands($1);
for (i=1; i<=len; i++) { for (i=1; i<=len; i++) {
dir = direction(arr[i]) dir = direction(arr[i])
dis = distance(arr[i]) dis = distance(arr[i])
for (j=0; j<dis; j++) { for (j=0; j<dis; j++) {
if (grid[x,y] != "" && grid[x,y] != wirenum) { # First pass
grid[x,y] = "X"; if (wirenum <= 2)
printf("Collision at %d,%d\n", x, y); markCollisions();
manhattan = abs(x) + abs(y); # Second pass
if (manhattan < closestCollision && manhattan != 0)
closestCollision = manhattan;
}
else else
grid[x,y] = wirenum; calculateDistances();
changePosition(dir); changePosition(dir);
} }
} }
} }
END { END {
printf("Closest collision at %d\n", closestCollision); printf("Part 1: %d\n", closestCollision);
asort(intersectionPaths);
printf("Part 2: %d\n", intersectionPaths[1]);
} }

3
2019/03/run_day3_awk.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
cat input input | awk -f day3.awk