Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PROGRAM DAY3
- INTEGER :: N,L,I,J,K,IERR,X,Y,MAXX=0,MAXY=0,MINX=0,MINY=0,T,STEP
- INTEGER :: X1,X2,Y1,Y2
- CHARACTER(LEN=9),ALLOCATABLE :: INPUTA(:),INPUTB(:)
- CHARACTER(LEN=:), ALLOCATABLE :: INLINE
- CHARACTER(LEN=1) :: CHAR
- INTEGER, ALLOCATABLE :: WIREA(:,:),WIREB(:,:),DIST(:,:)
- OPEN(1,FILE="input.txt")
- L=0
- N=1
- DO
- READ(1,'(A)',ADVANCE="NO",IOSTAT=IERR)CHAR
- IF(IERR.NE.0)EXIT
- L=L+1
- IF(CHAR.EQ.',')N=N+1
- END DO
- ALLOCATE(INPUTA(N))
- ALLOCATE(CHARACTER(LEN=L) :: INLINE)
- REWIND(1)
- READ(1,'(A)')INLINE
- I=1
- DO J=1,N-1
- INPUTA(J)=INLINE(I:I+SCAN(INLINE(I:),",")-2)
- I=I+SCAN(INLINE(I:),",")
- END DO
- INPUTA(N)=INLINE(I:)
- DEALLOCATE(INLINE)
- REWIND(1)
- L=0
- N=1
- READ(1,*)
- DO
- READ(1,'(A)',ADVANCE="NO",IOSTAT=IERR)CHAR
- IF(IERR.NE.0)EXIT
- L=L+1
- IF(CHAR.EQ.',')N=N+1
- END DO
- ALLOCATE(INPUTB(N))
- ALLOCATE(CHARACTER(LEN=L) :: INLINE)
- REWIND(1)
- READ(1,*)
- READ(1,'(A)')INLINE
- I=1
- DO J=1,N-1
- INPUTB(J)=INLINE(I:I+SCAN(INLINE(I:),",")-2)
- I=I+SCAN(INLINE(I:),",")
- END DO
- INPUTB(N)=INLINE(I:)
- CLOSE(1)
- X=0
- Y=0
- DO I=1,SIZE(INPUTA)
- READ(INPUTA(I)(2:),*)J
- SELECT CASE (INPUTA(I)(1:1))
- CASE ("U")
- Y=Y+J
- MAXY=MAX(MAXY,Y)
- CASE ("D")
- Y=Y-J
- MINY=MIN(MINY,Y)
- CASE ("R")
- X=X+J
- MAXX=MAX(MAXX,X)
- CASE ("L")
- X=X-J
- MINX=MIN(X,MINX)
- END SELECT
- END DO
- X=0
- Y=0
- DO I=1,SIZE(INPUTB)
- READ(INPUTB(I)(2:),*)J
- SELECT CASE (INPUTB(I)(1:1))
- CASE ("U")
- Y=Y+J
- MAXY=MAX(MAXY,Y)
- CASE ("D")
- Y=Y-J
- MINY=MIN(MINY,Y)
- CASE ("R")
- X=X+J
- MAXX=MAX(MAXX,X)
- CASE ("L")
- X=X-J
- MINX=MIN(X,MINX)
- END SELECT
- END DO
- ALLOCATE(WIREA(MINX:MAXX,MINY:MAXY),WIREB(MINX:MAXX,MINY:MAXY),DIST(MINX:MAXX,MINY:MAXY))
- WIREA=0
- WIREB=0
- DO Y=MINY,MAXY
- DO X=MINX,MAXX
- DIST(X,Y)=ABS(X)+ABS(Y)
- END DO
- END DO
- T=0
- X=0
- Y=0
- DO I=1,SIZE(INPUTA)
- READ(INPUTA(I)(2:),*)K
- DO J=1,K
- T=T+1
- SELECT CASE (INPUTA(I)(1:1))
- CASE ("U")
- Y=Y+1
- CASE ("D")
- Y=Y-1
- CASE ("L")
- X=X-1
- CASE ("R")
- X=X+1
- END SELECT
- WIREA(X,Y)=T
- END DO
- END DO
- T=0
- X=0
- Y=0
- DO I=1,SIZE(INPUTB)
- READ(INPUTB(I)(2:),*)K
- DO J=1,K
- T=T+1
- SELECT CASE (INPUTB(I)(1:1))
- CASE ("U")
- Y=Y+1
- CASE ("D")
- Y=Y-1
- CASE ("L")
- X=X-1
- CASE ("R")
- X=X+1
- END SELECT
- WIREB(X,Y)=T
- END DO
- END DO
- WRITE(*,'("Part 1: ",I0)') MINVAL(DIST,MASK=(WIREA>0.AND.WIREB>0.AND.DIST>0))
- WRITE(*,'("Part 2: ",I0)') MINVAL(WIREA+WIREB,MASK=(WIREA>0.AND.WIREB>0))
- END PROGRAM DAY3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement