2023 Day 11
parent
2f569ceef6
commit
97d6c075f3
|
@ -2,7 +2,7 @@ FC:=gfortran
|
||||||
FFLAGS:=-Wall -Wno-maybe-uninitialized
|
FFLAGS:=-Wall -Wno-maybe-uninitialized
|
||||||
BIN:=./bin
|
BIN:=./bin
|
||||||
SRC:=./src
|
SRC:=./src
|
||||||
BINS:=./bin/day01.bin ./bin/day01b.bin ./bin/day02.bin ./bin/day03.bin ./bin/day04.bin ./bin/day05.bin ./bin/day05b.bin ./bin/day06.bin ./bin/day07.bin ./bin/day07b.bin ./bin/day08.bin ./bin/day08b.bin ./bin/day09.bin ./bin/day10.bin
|
BINS:=./bin/day01.bin ./bin/day01b.bin ./bin/day02.bin ./bin/day03.bin ./bin/day04.bin ./bin/day05.bin ./bin/day05b.bin ./bin/day06.bin ./bin/day07.bin ./bin/day07b.bin ./bin/day08.bin ./bin/day08b.bin ./bin/day09.bin ./bin/day10.bin ./bin/day11.bin
|
||||||
|
|
||||||
all: aoc19
|
all: aoc19
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
.......................................................................................#........................................#..........#
|
||||||
|
..........#.....#.........................#..................................#..............#...............................................
|
||||||
|
.......................#.........................#.....#......#....................................#.......................#................
|
||||||
|
............................................................................................................................................
|
||||||
|
........................................................................#...................................................................
|
||||||
|
.................................#...............................................#.............#...............#.......................#....
|
||||||
|
..#.............................................................#...........................................................................
|
||||||
|
..........................................#.......#........................................................#................................
|
||||||
|
....................................................................#...............................#....................#..................
|
||||||
|
......#......................#..............................................................................................................
|
||||||
|
...........................................................#....................................................................#...........
|
||||||
|
#................#...........................................................#......#.....#.....#....................#......................
|
||||||
|
.......................#.............#...............#..................#...................................................................
|
||||||
|
..........#....................#..............................................................................#............#............#...
|
||||||
|
.............................................#.....................................................................................#........
|
||||||
|
......#............................................................................................................#........................
|
||||||
|
...................................#................................#......................#................................................
|
||||||
|
..#..........#......#.......................................................................................................................
|
||||||
|
.......................................................#.....#..................................#....................................#......
|
||||||
|
.................................................#......................................#.............#.........................#...........
|
||||||
|
.......................................#...................................#...................................#............................
|
||||||
|
....#...............................................................................................................#......#...............#
|
||||||
|
...........#.........................................#.............................#........................................................
|
||||||
|
................................#...........................................................................#...............................
|
||||||
|
.......#.............................#........................#...............................#.........................................#...
|
||||||
|
..............#..........#.................#............#.....................#.............................................................
|
||||||
|
...#..............................................................#.....................................................#...................
|
||||||
|
............................................................................................................................................
|
||||||
|
................................................#................................#............................................#.............
|
||||||
|
..........#.....................................................................................................#...........................
|
||||||
|
......................#.................................................#................................#.........................#........
|
||||||
|
......#..........................#......................................................................................................#...
|
||||||
|
..........................#...............#..........#.....................................#................................................
|
||||||
|
..............................................................................#.................#...........................................
|
||||||
|
....................#................#.......................#.......#....................................................#................#
|
||||||
|
....#.............................................................................#.................................#.......................
|
||||||
|
................#.......................................#.............................................#......#..............................
|
||||||
|
........#...................................................................#...............................................................
|
||||||
|
..........................................#.......#.........................................................................#...............
|
||||||
|
....................................................................#...........................#.....................#.....................
|
||||||
|
.#.................#.....#............#........................#.................................................................#......#...
|
||||||
|
.............................................#........#...................#........#........................................................
|
||||||
|
...............#........................................................................#...................................................
|
||||||
|
....#............................................#......................................................#...........................#.......
|
||||||
|
...........#.........#............#..........................#.................#................................#.........#.................
|
||||||
|
.............................#.............#......................#.........................#...................................#...........
|
||||||
|
#.....................................#.....................................................................................................
|
||||||
|
...................................................................................#..............#....................#..................#.
|
||||||
|
..........................#...........................................#...................................#.................................
|
||||||
|
............................................................................................................................................
|
||||||
|
......................................................#.......................#.......#.....................................................
|
||||||
|
....................................#.......#....................#..........................................................................
|
||||||
|
...#................#.......................................................................#................#.................#............
|
||||||
|
.............................#........................................................................#...................#............#....
|
||||||
|
..........#..............................#.......#.....................#........#...............#...........................................
|
||||||
|
..............................................................#...................................................................#.........
|
||||||
|
...........................................................................................................#.................#..............
|
||||||
|
.................#......#...........#.................#............#..................#............................#........................
|
||||||
|
.....#...............................................................................................#......................................
|
||||||
|
............#..................................................................................................#.......#...............#....
|
||||||
|
................................#.........#.................................#...............................................................
|
||||||
|
................................................#..........#.......................#........................................................
|
||||||
|
.#.................#.............................................................................#..................#.............#.........
|
||||||
|
........................#............#..................................#................#..................................................
|
||||||
|
......#...............................................................................................#......#...........................#..
|
||||||
|
.....................................................................................#..................................#...................
|
||||||
|
..........#..........................................#...........#............................................................#.............
|
||||||
|
.............................................................................................#....................#.........................
|
||||||
|
.......................................................................................................................................#....
|
||||||
|
....#................#.................#........#...........................................................#..............#................
|
||||||
|
............................................................................................................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
..............#.........#............................................................#.................................#....................
|
||||||
|
.............................#................................#....................................#........................................
|
||||||
|
.......................................................#...................................#.................#..............................
|
||||||
|
.....................#..................................................................................................................#...
|
||||||
|
...#.................................#.............#................................................................#........#..............
|
||||||
|
............................................................#...............................................................................
|
||||||
|
.......#....................................................................................................................................
|
||||||
|
.............................#.........................................................................................#..........#.......#.
|
||||||
|
.....................................................#...........................................#..........................................
|
||||||
|
..........................................#...........................#.........#...........................................................
|
||||||
|
..................#...................................................................#......................#..............................
|
||||||
|
.......................#.......................#...................................................................#......#.................
|
||||||
|
#............#..................#...........................................#........................#......................................
|
||||||
|
.....................................#............................#.........................................................................
|
||||||
|
............................................................................................#............#.....#..................#.........
|
||||||
|
..........................................#...................#....................#........................................#...............
|
||||||
|
..................................................#.........................................................................................
|
||||||
|
.....#............#...............................................................................................#....................#....
|
||||||
|
......................................................#.......................................#.............................................
|
||||||
|
..............................#..............#..............................................................................................
|
||||||
|
......................................#................................#.................................#............#........#...........#
|
||||||
|
...#..........#.....#...........................................................#...........................................................
|
||||||
|
.....................................................................................#.....#......#........................#................
|
||||||
|
.......................................................#...........#..............................................................#.........
|
||||||
|
............................................#..............................#.............................................................#..
|
||||||
|
................#..........#.................................................................................#..............................
|
||||||
|
......................................#..............................................................#......................................
|
||||||
|
#.......#...............................................................#.............................................#...............#.....
|
||||||
|
..........................................#....................................................#............................................
|
||||||
|
....#.................#................................................................#....................................................
|
||||||
|
...............#.............#..................................................................................#.........#..............#..
|
||||||
|
....................................#..............................................................#...............................#........
|
||||||
|
............................................................................................................................................
|
||||||
|
......#.............#.............................................#.............#...........................................................
|
||||||
|
...........................#............................................................................#.........#.........................
|
||||||
|
#......................................#....................................................#...........................#..............#....
|
||||||
|
...............................................#.....#......................................................................................
|
||||||
|
.............#.........#......#....................................................................................................#........
|
||||||
|
..............................................................#.....#............#..........................................................
|
||||||
|
.........#...............................................................................................................................#..
|
||||||
|
......................................#.....#...............................#...........#....................#..............................
|
||||||
|
.....................................................................................................#..............#.......................
|
||||||
|
....#.......................#.....#.................................................#.......................................................
|
||||||
|
...........................................................................................................................#.....#..........
|
||||||
|
.................#........................#......................................................................#..........................
|
||||||
|
.#.................................................................#..........#..........#..............#...................................
|
||||||
|
.......................................................#.....#..............................................................................
|
||||||
|
.........#.....................................#...................................................#.........#..............................
|
||||||
|
.................................#...............................................#.....................................#.............#.....#
|
||||||
|
.........................#..................................................................................................................
|
||||||
|
....................#.................................................#.....#...................................#...............#...........
|
||||||
|
...................................................#...........#.............................#..............................................
|
||||||
|
....................................................................................#..................#....................................
|
||||||
|
....#...........#......................#...............#....................................................................................
|
||||||
|
.........#........................................................................................#...................#...................#.
|
||||||
|
......................#......#.............................................................#................................................
|
||||||
|
#..............................................................................#............................................................
|
||||||
|
..............#....................#.........................................................................................#......#.......
|
||||||
|
.................................................#...................#...............................#......................................
|
||||||
|
....................#......#..................................#...........#.......#....................................#....................
|
||||||
|
..........#.....................................................................................................#...........................
|
||||||
|
.....#...................................................#.....................................................................#............
|
||||||
|
........................#.......#......#......#..................#........................................................................#.
|
||||||
|
.............................................................................#.............................#................................
|
||||||
|
..............#........................................................................#....................................................
|
||||||
|
.....................#.............#...................#.........................#..........#...............................................
|
||||||
|
.............................#............#....................#.........#.......................#..................................#.......
|
||||||
|
........................................................................................................#...................................
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#.....
|
|
@ -0,0 +1,118 @@
|
||||||
|
program day
|
||||||
|
implicit none
|
||||||
|
integer, parameter :: max_chars = 300
|
||||||
|
integer, parameter :: i_kind = selected_int_kind(15)
|
||||||
|
integer, parameter :: max_rows = 300
|
||||||
|
integer, parameter :: max_galaxies = 500
|
||||||
|
character(200) :: fname
|
||||||
|
character(max_chars) :: fline
|
||||||
|
integer :: n_arguments
|
||||||
|
integer :: istat
|
||||||
|
character(len=max_chars) :: map(1:max_rows)
|
||||||
|
integer :: galaxy_y(1:max_galaxies), galaxy_x(1:max_galaxies)
|
||||||
|
logical :: row_empty(1:max_rows), col_empty(1:max_chars)
|
||||||
|
integer :: n_cols, n_rows, n_galaxies, temp, t2
|
||||||
|
integer :: i, i2, i3, strlen
|
||||||
|
logical :: is_empty
|
||||||
|
integer :: dist, total_distance, x1, x2, y1, y2
|
||||||
|
integer(kind=i_kind) :: dist_2, total_distance_2
|
||||||
|
|
||||||
|
n_arguments = command_argument_count()
|
||||||
|
if (n_arguments .eq. 1) then
|
||||||
|
call get_command_argument(1, fname)
|
||||||
|
print *, "File: ", trim(fname)
|
||||||
|
print *
|
||||||
|
else
|
||||||
|
print *, "Wrong number of arguments: ", n_arguments
|
||||||
|
stop
|
||||||
|
end if
|
||||||
|
n_rows = 0
|
||||||
|
n_galaxies = 0
|
||||||
|
open(10, file=fname)
|
||||||
|
row_empty = .false.
|
||||||
|
do i=1,max_rows
|
||||||
|
read(10, "(a)", iostat=istat) fline
|
||||||
|
strlen = len_trim(fline)
|
||||||
|
if ((strlen .eq. 0) .or. (is_iostat_end(istat))) then
|
||||||
|
exit
|
||||||
|
end if
|
||||||
|
temp = scan(fline(1:strlen), '#')
|
||||||
|
if (temp .eq. 0) then
|
||||||
|
row_empty(i) = .true.
|
||||||
|
print *, "Empty row: ", i
|
||||||
|
else
|
||||||
|
t2 = temp
|
||||||
|
do
|
||||||
|
if (t2 .eq. 0) then
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
n_galaxies = n_galaxies + 1
|
||||||
|
galaxy_y(n_galaxies) = i
|
||||||
|
galaxy_x(n_galaxies) = temp
|
||||||
|
print *, "Galaxy ", n_galaxies, ": ", i, temp
|
||||||
|
end if
|
||||||
|
if (temp .ge. strlen) then
|
||||||
|
exit
|
||||||
|
end if
|
||||||
|
t2 = scan(fline((temp+1):strlen), '#')
|
||||||
|
temp = t2 + temp
|
||||||
|
end do
|
||||||
|
end if
|
||||||
|
map(i) = fline
|
||||||
|
n_rows = n_rows + 1
|
||||||
|
end do
|
||||||
|
close(10)
|
||||||
|
n_cols = len_trim(map(1))
|
||||||
|
col_empty = .true.
|
||||||
|
do i = 1, n_cols
|
||||||
|
is_empty = .true.
|
||||||
|
do i2 = 1, n_rows
|
||||||
|
if (map(i2)(i:i) .eq. '#') then
|
||||||
|
col_empty(i) = .false.
|
||||||
|
is_empty = .false.
|
||||||
|
exit
|
||||||
|
end if
|
||||||
|
end do
|
||||||
|
if (is_empty) then
|
||||||
|
print *, "Empty column: ", i
|
||||||
|
end if
|
||||||
|
end do
|
||||||
|
print *, "Columns: ", n_cols
|
||||||
|
print *, "Rows: ", n_rows
|
||||||
|
print *, "Galaxies: ", n_galaxies
|
||||||
|
print *
|
||||||
|
total_distance = 0
|
||||||
|
total_distance_2 = 0_i_kind
|
||||||
|
do i=1,(n_galaxies-1)
|
||||||
|
do i2=(i+1), n_galaxies
|
||||||
|
y1 = galaxy_y(i)
|
||||||
|
y2 = galaxy_y(i2)
|
||||||
|
x1 = galaxy_x(i)
|
||||||
|
x2 = galaxy_x(i2)
|
||||||
|
dist = abs(y1 - y2) + abs(x1 - x2)
|
||||||
|
dist_2 = dist
|
||||||
|
if (y1 .ne. y2) then
|
||||||
|
do i3=min(y1,y2), max(y1,y2)
|
||||||
|
if (row_empty(i3)) then
|
||||||
|
dist = dist + 1
|
||||||
|
dist_2 = dist_2 + 999999
|
||||||
|
end if
|
||||||
|
end do
|
||||||
|
end if
|
||||||
|
if (x1 .ne. x2) then
|
||||||
|
do i3=min(x1,x2), max(x1, x2)
|
||||||
|
if (col_empty(i3)) then
|
||||||
|
dist = dist + 1
|
||||||
|
dist_2 = dist_2 + 999999
|
||||||
|
end if
|
||||||
|
end do
|
||||||
|
end if
|
||||||
|
total_distance = total_distance + dist
|
||||||
|
total_distance_2 = total_distance_2 + dist_2
|
||||||
|
end do
|
||||||
|
end do
|
||||||
|
print *
|
||||||
|
print *, "Total distance: ", total_distance
|
||||||
|
print *, "Total distance (Expanded): ", total_distance_2
|
||||||
|
end program day
|
||||||
|
|
Loading…
Reference in New Issue