summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBond_009 <bond.009@outlook.com>2020-12-10 21:26:04 +0100
committerBond_009 <bond.009@outlook.com>2020-12-10 21:26:04 +0100
commit9940ce72851363be6e45163eb82f7dfa637cf13f (patch)
tree085fcf8af833f9f39bb91ba644db2f86038efd52
parent4454a3060b525e274a1c4bfd7c3d4b9224668461 (diff)
Add day 9 Fortran
-rw-r--r--9/part1.f9045
-rw-r--r--9/part2.f9060
2 files changed, 105 insertions, 0 deletions
diff --git a/9/part1.f90 b/9/part1.f90
new file mode 100644
index 0000000..a89ee41
--- /dev/null
+++ b/9/part1.f90
@@ -0,0 +1,45 @@
+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, tmp
+ integer (kind=8), dimension(input_len) :: input
+
+ 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
+ print *, input(i)
+ stop
+ end if
+ end do
+
+end program day9
diff --git a/9/part2.f90 b/9/part2.f90
new file mode 100644
index 0000000..b7e65de
--- /dev/null
+++ b/9/part2.f90
@@ -0,0 +1,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