summaryrefslogtreecommitdiff
path: root/2020/09/part2.f90
blob: b7e65deb7b991419b2fa5c70b74356f8875702df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
integer function has_sum(arg, arr)
    implicit none

    integer, parameter :: arr_len = 25

    integer (kind=8) :: arg
    integer (kind=8), dimension(25) :: arr
    integer :: i, j

    do i = 1, arr_len
        do j = 1, arr_len
            if (arr(i) + arr(j) == arg) then
                has_sum = 1
                return
            end if
        end do
    end do

    has_sum = 0
    return
end function has_sum

program day9
    implicit none

    integer, parameter :: input_len = 1000

    integer :: has_sum, i, j, tmp
    integer (kind=8), dimension(input_len) :: input
    integer (kind=8) :: search = -1, sum

    open(10, file='input', status='old')
    do i = 1, input_len
        read(10, *) input(i)
    end do
    close(10)

    do i = 26, input_len
        tmp = has_sum(input(i), input(i - 25))
        if (tmp == 0) then
            search = input(i)
            exit
        end if
    end do

    do i = 1, input_len
        sum = 0
        do j = i, input_len
            sum = sum + input(j)
            if (sum >= search) then
                exit
            end if
        end do
        if (sum == search) then
            print *, minval(input(i:j)) + maxval(input(i:j))
            stop
        end if
    end do

end program day9