Advertisement
autid

AoC 2019 Day8 FORTRAN

Dec 8th, 2019
1,750
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROGRAM DAY8
  2.   INTEGER :: I,IERR,N,NLAYERS,P1LAYER,PART1
  3.   INTEGER, ALLOCATABLE :: INPUT(:), IMAGE(:,:,:)
  4.   CHARACTER(LEN=1) :: PIXEL,PART2CHAR(25,6)
  5.   INTEGER :: PART2(25,6)
  6.  
  7.   ! Input
  8.   OPEN(1,FILE="input.txt")
  9.   N=0
  10.   DO
  11.      READ(1,'(A1)',ADVANCE="NO",IOSTAT=IERR)PIXEL
  12.      IF(IERR.NE.0)EXIT
  13.      N=N+1
  14.   END DO
  15.   REWIND(1)
  16.   NLAYERS=N/(25*6)
  17.   ALLOCATE(INPUT(N),IMAGE(25,6,NLAYERS))
  18.   DO I=1,N
  19.      READ(1,'(A1)',ADVANCE="NO")PIXEL
  20.      READ(PIXEL,*)INPUT(I)
  21.   END DO
  22.   CLOSE(1)
  23.   IMAGE=RESHAPE(INPUT,SHAPE(IMAGE))
  24.  
  25.   ! Part 1
  26.   P1LAYER=MINLOC((/(COUNT(IMAGE(:,:,I).EQ.0),I=1,NLAYERS)/),DIM=1)
  27.   PART1=COUNT(IMAGE(:,:,P1LAYER).EQ.1)*COUNT(IMAGE(:,:,P1LAYER).EQ.2)
  28.  
  29.   ! Part 2
  30.   PART2=2
  31.   DO I=1,NLAYERS
  32.      WHERE(PART2.EQ.2)
  33.         PART2=IMAGE(:,:,I)
  34.      END WHERE
  35.   END DO
  36.   WHERE(PART2.EQ.1)
  37.      PART2CHAR="#"
  38.   ELSEWHERE
  39.      PART2CHAR=" "
  40.   END WHERE
  41.  
  42.   WRITE(*,'("Part 1: ",I0)') PART1
  43.   WRITE(*,'(A)') "Part 2:"
  44.   WRITE(*,'(6(25A1,/))')PART2CHAR
  45.  
  46. END PROGRAM DAY8
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement