From 97d6c075f34b83171460d40273fdf1837ecf778a Mon Sep 17 00:00:00 2001 From: Petra Date: Mon, 11 Dec 2023 19:47:29 +1300 Subject: [PATCH] 2023 Day 11 --- 2023/Makefile | 2 +- 2023/data/day11.txt | 141 +++++++++++++++++++++++++++++++++++++++++ 2023/data/day11ex1.txt | 10 +++ 2023/src/day11.f90 | 118 ++++++++++++++++++++++++++++++++++ 4 files changed, 270 insertions(+), 1 deletion(-) create mode 100644 2023/data/day11.txt create mode 100644 2023/data/day11ex1.txt create mode 100644 2023/src/day11.f90 diff --git a/2023/Makefile b/2023/Makefile index 75778e4..b2dd23a 100644 --- a/2023/Makefile +++ b/2023/Makefile @@ -2,7 +2,7 @@ FC:=gfortran FFLAGS:=-Wall -Wno-maybe-uninitialized BIN:=./bin 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 diff --git a/2023/data/day11.txt b/2023/data/day11.txt new file mode 100644 index 0000000..3d2c461 --- /dev/null +++ b/2023/data/day11.txt @@ -0,0 +1,141 @@ +.......................................................................................#........................................#..........# +..........#.....#.........................#..................................#..............#............................................... +.......................#.........................#.....#......#....................................#.......................#................ +............................................................................................................................................ +........................................................................#................................................................... +.................................#...............................................#.............#...............#.......................#.... +..#.............................................................#........................................................................... +..........................................#.......#........................................................#................................ +....................................................................#...............................#....................#.................. +......#......................#.............................................................................................................. +...........................................................#....................................................................#........... +#................#...........................................................#......#.....#.....#....................#...................... +.......................#.............#...............#..................#................................................................... +..........#....................#..............................................................................#............#............#... +.............................................#.....................................................................................#........ +......#............................................................................................................#........................ +...................................#................................#......................#................................................ +..#..........#......#....................................................................................................................... +.......................................................#.....#..................................#....................................#...... +.................................................#......................................#.............#.........................#........... +.......................................#...................................#...................................#............................ +....#...............................................................................................................#......#...............# +...........#.........................................#.............................#........................................................ +................................#...........................................................................#............................... +.......#.............................#........................#...............................#.........................................#... +..............#..........#.................#............#.....................#............................................................. +...#..............................................................#.....................................................#................... +............................................................................................................................................ +................................................#................................#............................................#............. +..........#.....................................................................................................#........................... +......................#.................................................#................................#.........................#........ +......#..........................#......................................................................................................#... +..........................#...............#..........#.....................................#................................................ +..............................................................................#.................#........................................... +....................#................#.......................#.......#....................................................#................# +....#.............................................................................#.................................#....................... +................#.......................................#.............................................#......#.............................. +........#...................................................................#............................................................... +..........................................#.......#.........................................................................#............... +....................................................................#...........................#.....................#..................... +.#.................#.....#............#........................#.................................................................#......#... +.............................................#........#...................#........#........................................................ +...............#........................................................................#................................................... +....#............................................#......................................................#...........................#....... +...........#.........#............#..........................#.................#................................#.........#................. +.............................#.............#......................#.........................#...................................#........... +#.....................................#..................................................................................................... +...................................................................................#..............#....................#..................#. +..........................#...........................................#...................................#................................. +............................................................................................................................................ +......................................................#.......................#.......#..................................................... +....................................#.......#....................#.......................................................................... +...#................#.......................................................................#................#.................#............ +.............................#........................................................................#...................#............#.... +..........#..............................#.......#.....................#........#...............#........................................... +..............................................................#...................................................................#......... +...........................................................................................................#.................#.............. +.................#......#...........#.................#............#..................#............................#........................ +.....#...............................................................................................#...................................... +............#..................................................................................................#.......#...............#.... +................................#.........#.................................#............................................................... +................................................#..........#.......................#........................................................ +.#.................#.............................................................................#..................#.............#......... +........................#............#..................................#................#.................................................. +......#...............................................................................................#......#...........................#.. +.....................................................................................#..................................#................... +..........#..........................................#...........#............................................................#............. +.............................................................................................#....................#......................... +.......................................................................................................................................#.... +....#................#.................#........#...........................................................#..............#................ +............................................................................................................................................ +............................................................................................................................................ +..............#.........#............................................................#.................................#.................... +.............................#................................#....................................#........................................ +.......................................................#...................................#.................#.............................. +.....................#..................................................................................................................#... +...#.................................#.............#................................................................#........#.............. +............................................................#............................................................................... +.......#.................................................................................................................................... +.............................#.........................................................................................#..........#.......#. +.....................................................#...........................................#.......................................... +..........................................#...........................#.........#........................................................... +..................#...................................................................#......................#.............................. +.......................#.......................#...................................................................#......#................. +#............#..................#...........................................#........................#...................................... +.....................................#............................#......................................................................... +............................................................................................#............#.....#..................#......... +..........................................#...................#....................#........................................#............... +..................................................#......................................................................................... +.....#............#...............................................................................................#....................#.... +......................................................#.......................................#............................................. +..............................#..............#.............................................................................................. +......................................#................................#.................................#............#........#...........# +...#..........#.....#...........................................................#........................................................... +.....................................................................................#.....#......#........................#................ +.......................................................#...........#..............................................................#......... +............................................#..............................#.............................................................#.. +................#..........#.................................................................................#.............................. +......................................#..............................................................#...................................... +#.......#...............................................................#.............................................#...............#..... +..........................................#....................................................#............................................ +....#.................#................................................................#.................................................... +...............#.............#..................................................................................#.........#..............#.. +....................................#..............................................................#...............................#........ +............................................................................................................................................ +......#.............#.............................................#.............#........................................................... +...........................#............................................................................#.........#......................... +#......................................#....................................................#...........................#..............#.... +...............................................#.....#...................................................................................... +.............#.........#......#....................................................................................................#........ +..............................................................#.....#............#.......................................................... +.........#...............................................................................................................................#.. +......................................#.....#...............................#...........#....................#.............................. +.....................................................................................................#..............#....................... +....#.......................#.....#.................................................#....................................................... +...........................................................................................................................#.....#.......... +.................#........................#......................................................................#.......................... +.#.................................................................#..........#..........#..............#................................... +.......................................................#.....#.............................................................................. +.........#.....................................#...................................................#.........#.............................. +.................................#...............................................#.....................................#.............#.....# +.........................#.................................................................................................................. +....................#.................................................#.....#...................................#...............#........... +...................................................#...........#.............................#.............................................. +....................................................................................#..................#.................................... +....#...........#......................#...............#.................................................................................... +.........#........................................................................................#...................#...................#. +......................#......#.............................................................#................................................ +#..............................................................................#............................................................ +..............#....................#.........................................................................................#......#....... +.................................................#...................#...............................#...................................... +....................#......#..................................#...........#.......#....................................#.................... +..........#.....................................................................................................#........................... +.....#...................................................#.....................................................................#............ +........................#.......#......#......#..................#........................................................................#. +.............................................................................#.............................#................................ +..............#........................................................................#.................................................... +.....................#.............#...................#.........................#..........#............................................... +.............................#............#....................#.........#.......................#..................................#....... +........................................................................................................#................................... + diff --git a/2023/data/day11ex1.txt b/2023/data/day11ex1.txt new file mode 100644 index 0000000..986aad4 --- /dev/null +++ b/2023/data/day11ex1.txt @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... diff --git a/2023/src/day11.f90 b/2023/src/day11.f90 new file mode 100644 index 0000000..8953a6f --- /dev/null +++ b/2023/src/day11.f90 @@ -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 +