diff options
Diffstat (limited to '2024/day_02.f90')
| -rw-r--r-- | 2024/day_02.f90 | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/2024/day_02.f90 b/2024/day_02.f90 new file mode 100644 index 0000000..f60a9bb --- /dev/null +++ b/2024/day_02.f90 @@ -0,0 +1,54 @@ +program day_02 + implicit none + logical :: is_decrement, fail + integer :: io, i,x, spaces, res + integer, dimension(:), allocatable :: list + character(len=100) :: line + + open(newunit=io, file='./day_02_input.txt', status='old', action='read') + + res = 0 + do i = 1, 1000 + read(io, '(a)') line ! reading the line + spaces = 1 ! reset space count + do x = 1, len(trim(line)) + ! counting spaces to see how big of an array we need to allocate + if(iachar(line(x:x))== 32 ) then + spaces = spaces+1 + end if + end do + + allocate(list(spaces)) + read(line, *) list !reading the ints into an array + fail = .false. + + do x = 1, size(list) -1 + if (list(x) == list(x+1)) then + fail = .true. + exit + end if + if(x == 1 .and. list(x) > list(x+1)) then + is_decrement = .true. + else if (x==1 .and. list(x) < list(x+1)) then + is_decrement = .false. + end if + + if(is_decrement) then + if (list(x) < list(x+1) .or. abs(list(x) - list(x+1)) > 3) then + fail = .true. + exit + end if + else + if (list(x) > list(x+1) .or. abs(list(x) - list(x+1)) > 3) then + fail = .true. + exit + end if + end if + end do + if (fail .eqv. .false.) then + res = res + 1 + endif + deallocate(list) + end do + print*, res +end program day_02 |
