problem_6 Program

Uses

  • program~~problem_6~~UsesGraph program~problem_6 problem_6 iso_fortran_env iso_fortran_env program~problem_6->iso_fortran_env module~aoc_utilities aoc_utilities program~problem_6->module~aoc_utilities module~aoc_utilities->iso_fortran_env

Calls

program~~problem_6~~CallsGraph program~problem_6 problem_6 proc~clock_end aoc_utilities::clock%clock_end program~problem_6->proc~clock_end proc~clock_start aoc_utilities::clock%clock_start program~problem_6->proc~clock_start proc~go~7 problem_6::go program~problem_6->proc~go~7

Variables

Type Attributes Name Initial
integer(kind=ip), parameter, dimension(*) :: time_a = [60, 94, 78, 82]
integer(kind=ip), parameter, dimension(*) :: distance_a = [475, 2138, 1015, 1650]
integer(kind=ip), parameter, dimension(*) :: time_b = [60947882_ip]
integer(kind=ip), parameter, dimension(*) :: distance_b = [475213810151650_ip]

Functions

function go(time, distance) result(iproduct)

Arguments

Type IntentOptional Attributes Name
integer(kind=ip), intent(in), dimension(:) :: time
integer(kind=ip), intent(in), dimension(:) :: distance

Return Value integer(kind=ip)


Source Code

program problem_6

use iso_fortran_env
use aoc_utilities

implicit none

! just copy and paste the inputs here:

! a
integer(ip),dimension(*),parameter :: time_a      = [ 60  ,   94 ,    78 ,    82]
integer(ip),dimension(*),parameter :: distance_a  = [475  , 2138 ,  1015 ,  1650]

! b
integer(ip),dimension(*),parameter :: time_b      = [ 60947882_ip]
integer(ip),dimension(*),parameter :: distance_b  = [475213810151650_ip]

call clk%tic()

print*, '6a: ways to win:', go(time_a, distance_a)
print*, '6b: ways to win:', go(time_b, distance_b)

call clk%toc('6')

contains

function go(time, distance) result(iproduct)
    integer(ip),dimension(:),intent(in) :: time
    integer(ip),dimension(:),intent(in) :: distance
    integer(ip) :: iproduct
    integer(ip) :: i, ihold, iways, idistance
    iproduct = 1
    do i = 1, size(time)
        iways = 0
        do ihold = 1, time(i) ! time to hold the button
            idistance = ihold * (time(i)-ihold)
            if (idistance > distance(i)) iways = iways + 1
        end do
        iproduct = iproduct * iways
    end do
end function go

end program problem_6