drop Subroutine

subroutine drop()

continue forward in time until all the bricks settle.

Arguments

None

Calls

proc~~drop~~CallsGraph proc~drop problem_22::drop proc~move_piece_down problem_22::move_piece_down proc~drop->proc~move_piece_down proc~get_pieces_below problem_22::get_pieces_below proc~move_piece_down->proc~get_pieces_below proc~update_array problem_22::update_array proc~move_piece_down->proc~update_array interface~unique~2 aoc_utilities::unique proc~get_pieces_below->interface~unique~2 proc~unique32 aoc_utilities::unique32 interface~unique~2->proc~unique32 proc~unique64 aoc_utilities::unique64 interface~unique~2->proc~unique64 interface~sort aoc_utilities::sort proc~unique32->interface~sort proc~unique64->interface~sort proc~sort_ascending aoc_utilities::sort_ascending interface~sort->proc~sort_ascending proc~sort_ascending_64 aoc_utilities::sort_ascending_64 interface~sort->proc~sort_ascending_64 interface~swap~2 aoc_utilities::swap proc~sort_ascending->interface~swap~2 proc~swap64 aoc_utilities::swap64 proc~sort_ascending_64->proc~swap64 interface~swap~2->proc~swap64 proc~swap32 aoc_utilities::swap32 interface~swap~2->proc~swap32 proc~swap_str aoc_utilities::swap_str interface~swap~2->proc~swap_str

Called by

proc~~drop~~CalledByGraph proc~drop problem_22::drop proc~initialize problem_22::initialize proc~initialize->proc~drop program~problem_22 problem_22 program~problem_22->proc~initialize

Source Code

    subroutine drop()
        !! continue forward in time until all the bricks settle.
        logical :: moved, tmp_moved
        integer(ip) :: i
        do
            moved = .false.
            do i = 1, n_lines
                call move_piece_down(i, tmp_moved)
                if (tmp_moved) moved = .true. ! at least one was moved
            end do
            if (.not. moved) exit ! done moving all the pieces
        end do
    end subroutine drop