Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PROGRAM DAY2
- INTEGER :: N,NOUN,VERB,IERR
- CHARACTER(1) :: CHAR
- INTEGER, ALLOCATABLE :: PROG(:)
- ! Input
- OPEN(1,FILE="input.txt")
- N=0
- DO
- READ(1,'(A1)',ADVANCE="NO",IOSTAT=IERR)CHAR
- IF(IERR.NE.0)EXIT
- IF(CHAR.EQ.',')N=N+1
- END DO
- ALLOCATE(PROG(0:N))
- REWIND(1)
- READ(1,*)PROG
- CLOSE(1)
- ! Part 1
- WRITE(*,'(A,I0)') "Part 1: ",RUN(PROG,12,02)
- ! PART 2
- OUTER:DO NOUN = 0,99
- DO VERB = 0,99
- IF(RUN(PROG,NOUN,VERB).EQ.19690720)EXIT OUTER
- END DO
- END DO OUTER
- WRITE(*,'(A,2I2.2)') "Part 2: ",NOUN,VERB
- DEALLOCATE(PROG)
- CONTAINS
- FUNCTION RUN(IN,NOUN,VERB)
- INTEGER :: IN(:),I,NOUN,VERB,RUN
- INTEGER :: PROG(0:SIZE(IN,DIM=1)-1)
- PROG=IN
- PROG(1:2)=(/NOUN,VERB/)
- I=0
- DO
- SELECT CASE (PROG(I))
- CASE (1)
- PROG(PROG(I+3))=PROG(PROG(I+1))+PROG(PROG(I+2))
- CASE (2)
- PROG(PROG(I+3))=PROG(PROG(I+1))*PROG(PROG(I+2))
- CASE DEFAULT
- EXIT
- END SELECT
- I=I+4
- END DO
- RUN = PROG(0)
- END FUNCTION RUN
- END PROGRAM DAY2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement