Advertisement
autid

AoC 2019 Day2 FORTRAN

Dec 2nd, 2019
1,555
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROGRAM DAY2
  2.   INTEGER :: N,NOUN,VERB,IERR
  3.   CHARACTER(1) :: CHAR
  4.   INTEGER, ALLOCATABLE :: PROG(:)
  5.  
  6.   ! Input
  7.   OPEN(1,FILE="input.txt")
  8.   N=0
  9.   DO
  10.      READ(1,'(A1)',ADVANCE="NO",IOSTAT=IERR)CHAR
  11.      IF(IERR.NE.0)EXIT
  12.      IF(CHAR.EQ.',')N=N+1
  13.   END DO
  14.   ALLOCATE(PROG(0:N))
  15.   REWIND(1)
  16.   READ(1,*)PROG
  17.   CLOSE(1)
  18.  
  19.   ! Part 1
  20.   WRITE(*,'(A,I0)') "Part 1: ",RUN(PROG,12,02)
  21.  
  22.   ! PART 2
  23.   OUTER:DO NOUN = 0,99
  24.      DO VERB = 0,99
  25.         IF(RUN(PROG,NOUN,VERB).EQ.19690720)EXIT OUTER
  26.      END DO
  27.   END DO OUTER
  28.   WRITE(*,'(A,2I2.2)') "Part 2: ",NOUN,VERB
  29.   DEALLOCATE(PROG)
  30.  
  31. CONTAINS
  32.   FUNCTION RUN(IN,NOUN,VERB)
  33.     INTEGER :: IN(:),I,NOUN,VERB,RUN
  34.     INTEGER :: PROG(0:SIZE(IN,DIM=1)-1)
  35.     PROG=IN
  36.     PROG(1:2)=(/NOUN,VERB/)
  37.     I=0
  38.     DO
  39.        SELECT CASE (PROG(I))
  40.        CASE (1)
  41.           PROG(PROG(I+3))=PROG(PROG(I+1))+PROG(PROG(I+2))
  42.        CASE (2)
  43.           PROG(PROG(I+3))=PROG(PROG(I+1))*PROG(PROG(I+2))
  44.        CASE DEFAULT
  45.           EXIT
  46.        END SELECT
  47.        I=I+4
  48.     END DO
  49.     RUN = PROG(0)
  50.   END FUNCTION RUN
  51. END PROGRAM DAY2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement