Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PROGRAM DAY4
- INTEGER :: A,B,C,D,E,F,PASSWORD(6)
- INTEGER :: LOWER, UPPER,PART1,PART2,POWERS(6)
- LOGICAL :: OK(2)
- CHARACTER(LEN=13) :: INLINE
- OPEN(1,FILE="input.txt")
- READ(1,*)INLINE
- CLOSE(1)
- READ(INLINE(1:6),*)LOWER
- READ(INLINE(8:),*)UPPER
- PART1=0
- PART2=0
- POWERS=(/(10**I,I=5,0,-1)/)
- OUTER:DO A=LOWER/10**5,UPPER/10**5
- DO B=A,9
- DO C=B,9
- DO D=C,9
- DO E=D,9
- DO F=E,9
- PASSWORD=(/A,B,C,D,E,F/)
- IF(SUM(PASSWORD*POWERS)<LOWER)CYCLE
- IF(SUM(PASSWORD*POWERS)>UPPER)EXIT OUTER
- OK=CHECK(PASSWORD)
- IF(OK(1))PART1=PART1+1
- IF(OK(2))PART2=PART2+1
- END DO
- END DO
- END DO
- END DO
- END DO
- END DO OUTER
- WRITE(*,'("Part 1: ",I0)') PART1
- WRITE(*,'("Part 2: ",I0)') PART2
- CONTAINS
- FUNCTION CHECK(PASSDIGITS) RESULT(RES)
- INTEGER :: PASSDIGITS(6),I
- LOGICAL :: RES(2)
- RES=.FALSE.
- DO I=1,5
- IF(PASSDIGITS(I).EQ.PASSDIGITS(I+1))THEN
- RES(1)=.TRUE.
- IF(I.EQ.1.OR.PASSDIGITS(I-1).NE.PASSDIGITS(I))THEN
- IF(I.EQ.5.OR.PASSDIGITS(I+2).NE.PASSDIGITS(I))THEN
- RES(2)=.TRUE.
- EXIT
- END IF
- END IF
- END IF
- END DO
- END FUNCTION CHECK
- END PROGRAM DAY4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement