2023 Day 11
This commit is contained in:
		
							parent
							
								
									2f569ceef6
								
							
						
					
					
						commit
						97d6c075f3
					
				@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										141
									
								
								2023/data/day11.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								2023/data/day11.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,141 @@
 | 
			
		||||
.......................................................................................#........................................#..........#
 | 
			
		||||
..........#.....#.........................#..................................#..............#...............................................
 | 
			
		||||
.......................#.........................#.....#......#....................................#.......................#................
 | 
			
		||||
............................................................................................................................................
 | 
			
		||||
........................................................................#...................................................................
 | 
			
		||||
.................................#...............................................#.............#...............#.......................#....
 | 
			
		||||
..#.............................................................#...........................................................................
 | 
			
		||||
..........................................#.......#........................................................#................................
 | 
			
		||||
....................................................................#...............................#....................#..................
 | 
			
		||||
......#......................#..............................................................................................................
 | 
			
		||||
...........................................................#....................................................................#...........
 | 
			
		||||
#................#...........................................................#......#.....#.....#....................#......................
 | 
			
		||||
.......................#.............#...............#..................#...................................................................
 | 
			
		||||
..........#....................#..............................................................................#............#............#...
 | 
			
		||||
.............................................#.....................................................................................#........
 | 
			
		||||
......#............................................................................................................#........................
 | 
			
		||||
...................................#................................#......................#................................................
 | 
			
		||||
..#..........#......#.......................................................................................................................
 | 
			
		||||
.......................................................#.....#..................................#....................................#......
 | 
			
		||||
.................................................#......................................#.............#.........................#...........
 | 
			
		||||
.......................................#...................................#...................................#............................
 | 
			
		||||
....#...............................................................................................................#......#...............#
 | 
			
		||||
...........#.........................................#.............................#........................................................
 | 
			
		||||
................................#...........................................................................#...............................
 | 
			
		||||
.......#.............................#........................#...............................#.........................................#...
 | 
			
		||||
..............#..........#.................#............#.....................#.............................................................
 | 
			
		||||
...#..............................................................#.....................................................#...................
 | 
			
		||||
............................................................................................................................................
 | 
			
		||||
................................................#................................#............................................#.............
 | 
			
		||||
..........#.....................................................................................................#...........................
 | 
			
		||||
......................#.................................................#................................#.........................#........
 | 
			
		||||
......#..........................#......................................................................................................#...
 | 
			
		||||
..........................#...............#..........#.....................................#................................................
 | 
			
		||||
..............................................................................#.................#...........................................
 | 
			
		||||
....................#................#.......................#.......#....................................................#................#
 | 
			
		||||
....#.............................................................................#.................................#.......................
 | 
			
		||||
................#.......................................#.............................................#......#..............................
 | 
			
		||||
........#...................................................................#...............................................................
 | 
			
		||||
..........................................#.......#.........................................................................#...............
 | 
			
		||||
....................................................................#...........................#.....................#.....................
 | 
			
		||||
.#.................#.....#............#........................#.................................................................#......#...
 | 
			
		||||
.............................................#........#...................#........#........................................................
 | 
			
		||||
...............#........................................................................#...................................................
 | 
			
		||||
....#............................................#......................................................#...........................#.......
 | 
			
		||||
...........#.........#............#..........................#.................#................................#.........#.................
 | 
			
		||||
.............................#.............#......................#.........................#...................................#...........
 | 
			
		||||
#.....................................#.....................................................................................................
 | 
			
		||||
...................................................................................#..............#....................#..................#.
 | 
			
		||||
..........................#...........................................#...................................#.................................
 | 
			
		||||
............................................................................................................................................
 | 
			
		||||
......................................................#.......................#.......#.....................................................
 | 
			
		||||
....................................#.......#....................#..........................................................................
 | 
			
		||||
...#................#.......................................................................#................#.................#............
 | 
			
		||||
.............................#........................................................................#...................#............#....
 | 
			
		||||
..........#..............................#.......#.....................#........#...............#...........................................
 | 
			
		||||
..............................................................#...................................................................#.........
 | 
			
		||||
...........................................................................................................#.................#..............
 | 
			
		||||
.................#......#...........#.................#............#..................#............................#........................
 | 
			
		||||
.....#...............................................................................................#......................................
 | 
			
		||||
............#..................................................................................................#.......#...............#....
 | 
			
		||||
................................#.........#.................................#...............................................................
 | 
			
		||||
................................................#..........#.......................#........................................................
 | 
			
		||||
.#.................#.............................................................................#..................#.............#.........
 | 
			
		||||
........................#............#..................................#................#..................................................
 | 
			
		||||
......#...............................................................................................#......#...........................#..
 | 
			
		||||
.....................................................................................#..................................#...................
 | 
			
		||||
..........#..........................................#...........#............................................................#.............
 | 
			
		||||
.............................................................................................#....................#.........................
 | 
			
		||||
.......................................................................................................................................#....
 | 
			
		||||
....#................#.................#........#...........................................................#..............#................
 | 
			
		||||
............................................................................................................................................
 | 
			
		||||
............................................................................................................................................
 | 
			
		||||
..............#.........#............................................................#.................................#....................
 | 
			
		||||
.............................#................................#....................................#........................................
 | 
			
		||||
.......................................................#...................................#.................#..............................
 | 
			
		||||
.....................#..................................................................................................................#...
 | 
			
		||||
...#.................................#.............#................................................................#........#..............
 | 
			
		||||
............................................................#...............................................................................
 | 
			
		||||
.......#....................................................................................................................................
 | 
			
		||||
.............................#.........................................................................................#..........#.......#.
 | 
			
		||||
.....................................................#...........................................#..........................................
 | 
			
		||||
..........................................#...........................#.........#...........................................................
 | 
			
		||||
..................#...................................................................#......................#..............................
 | 
			
		||||
.......................#.......................#...................................................................#......#.................
 | 
			
		||||
#............#..................#...........................................#........................#......................................
 | 
			
		||||
.....................................#............................#.........................................................................
 | 
			
		||||
............................................................................................#............#.....#..................#.........
 | 
			
		||||
..........................................#...................#....................#........................................#...............
 | 
			
		||||
..................................................#.........................................................................................
 | 
			
		||||
.....#............#...............................................................................................#....................#....
 | 
			
		||||
......................................................#.......................................#.............................................
 | 
			
		||||
..............................#..............#..............................................................................................
 | 
			
		||||
......................................#................................#.................................#............#........#...........#
 | 
			
		||||
...#..........#.....#...........................................................#...........................................................
 | 
			
		||||
.....................................................................................#.....#......#........................#................
 | 
			
		||||
.......................................................#...........#..............................................................#.........
 | 
			
		||||
............................................#..............................#.............................................................#..
 | 
			
		||||
................#..........#.................................................................................#..............................
 | 
			
		||||
......................................#..............................................................#......................................
 | 
			
		||||
#.......#...............................................................#.............................................#...............#.....
 | 
			
		||||
..........................................#....................................................#............................................
 | 
			
		||||
....#.................#................................................................#....................................................
 | 
			
		||||
...............#.............#..................................................................................#.........#..............#..
 | 
			
		||||
....................................#..............................................................#...............................#........
 | 
			
		||||
............................................................................................................................................
 | 
			
		||||
......#.............#.............................................#.............#...........................................................
 | 
			
		||||
...........................#............................................................................#.........#.........................
 | 
			
		||||
#......................................#....................................................#...........................#..............#....
 | 
			
		||||
...............................................#.....#......................................................................................
 | 
			
		||||
.............#.........#......#....................................................................................................#........
 | 
			
		||||
..............................................................#.....#............#..........................................................
 | 
			
		||||
.........#...............................................................................................................................#..
 | 
			
		||||
......................................#.....#...............................#...........#....................#..............................
 | 
			
		||||
.....................................................................................................#..............#.......................
 | 
			
		||||
....#.......................#.....#.................................................#.......................................................
 | 
			
		||||
...........................................................................................................................#.....#..........
 | 
			
		||||
.................#........................#......................................................................#..........................
 | 
			
		||||
.#.................................................................#..........#..........#..............#...................................
 | 
			
		||||
.......................................................#.....#..............................................................................
 | 
			
		||||
.........#.....................................#...................................................#.........#..............................
 | 
			
		||||
.................................#...............................................#.....................................#.............#.....#
 | 
			
		||||
.........................#..................................................................................................................
 | 
			
		||||
....................#.................................................#.....#...................................#...............#...........
 | 
			
		||||
...................................................#...........#.............................#..............................................
 | 
			
		||||
....................................................................................#..................#....................................
 | 
			
		||||
....#...........#......................#...............#....................................................................................
 | 
			
		||||
.........#........................................................................................#...................#...................#.
 | 
			
		||||
......................#......#.............................................................#................................................
 | 
			
		||||
#..............................................................................#............................................................
 | 
			
		||||
..............#....................#.........................................................................................#......#.......
 | 
			
		||||
.................................................#...................#...............................#......................................
 | 
			
		||||
....................#......#..................................#...........#.......#....................................#....................
 | 
			
		||||
..........#.....................................................................................................#...........................
 | 
			
		||||
.....#...................................................#.....................................................................#............
 | 
			
		||||
........................#.......#......#......#..................#........................................................................#.
 | 
			
		||||
.............................................................................#.............................#................................
 | 
			
		||||
..............#........................................................................#....................................................
 | 
			
		||||
.....................#.............#...................#.........................#..........#...............................................
 | 
			
		||||
.............................#............#....................#.........#.......................#..................................#.......
 | 
			
		||||
........................................................................................................#...................................
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								2023/data/day11ex1.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								2023/data/day11ex1.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
...#......
 | 
			
		||||
.......#..
 | 
			
		||||
#.........
 | 
			
		||||
..........
 | 
			
		||||
......#...
 | 
			
		||||
.#........
 | 
			
		||||
.........#
 | 
			
		||||
..........
 | 
			
		||||
.......#..
 | 
			
		||||
#...#.....
 | 
			
		||||
							
								
								
									
										118
									
								
								2023/src/day11.f90
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								2023/src/day11.f90
									
									
									
									
									
										Normal file
									
								
							@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user