A compact inventory case can scan in-memory tables and decide how many units to reorder.

Program

Play the program to choose an item id and compute the matching reorder quantity.

query_id
inventory_reorder_case.f90
Replay: real traced execution (multi-file project)
program inventory_reorder_case_demo
    implicit none
    integer :: ids(3)
    integer :: stock(3)
    integer :: minimums(3)
    integer :: query_id
    integer :: i
    integer :: reorder

    ids = [101, 102, 103]
    stock = [5, 12, 2]
    minimums = [8, 10, 6]
    query_id = 103
    reorder = 0
    do i = 1, 3
        if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    end do
    print '(I0, 1X, I0)', query_id, reorder
end program inventory_reorder_case_demo
program inventory_reorder_case_demo
    implicit none
    integer :: ids(3)
    integer :: stock(3)
    integer :: minimums(3)
    integer :: query_id
    integer :: i
    integer :: reorder

    ids = [101, 102, 103]
    stock = [5, 12, 2]
    minimums = [8, 10, 6]
    query_id = 101
    reorder = 0
    do i = 1, 3
        if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    end do
    print '(I0, 1X, I0)', query_id, reorder
end program inventory_reorder_case_demo
program inventory_reorder_case_demo
    implicit none
    integer :: ids(3)
    integer :: stock(3)
    integer :: minimums(3)
    integer :: query_id
    integer :: i
    integer :: reorder

    ids = [101, 102, 103]
    stock = [5, 12, 2]
    minimums = [8, 10, 6]
    query_id = 102
    reorder = 0
    do i = 1, 3
        if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    end do
    print '(I0, 1X, I0)', query_id, reorder
end program inventory_reorder_case_demo
  1. ids ← [101, 102, 103]

    10ids = [101, 102, 103]11stock = [5, 12, 2]
    values this step[101, 102, 103]ids
  2. stock ← [5, 12, 2]

    10ids = [101, 102, 103]11stock = [5, 12, 2]12minimums = [8, 10, 6]
    values this step[5, 12, 2]stock
  3. minimums ← [8, 10, 6]

    11stock = [5, 12, 2]12minimums = [8, 10, 6]13query_id = 103
    values this step[8, 10, 6]minimums
  4. query_id ← 103

    12minimums = [8, 10, 6]13query_id = 10314reorder = 0
    values this step103query_id
  5. reorder ← 0

    13query_id = 10314reorder = 015do i = 1, 3
    values this step0reorder
  6. i ← 1

    14reorder = 015do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    values this step1i
  7. if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))

    15do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end do
    values this step.false.ids(1) == query_id
  8. i ← 2

    14reorder = 015do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    values this step2i
  9. if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))

    15do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end do
    values this step.false.ids(2) == query_id
  10. i ← 3

    14reorder = 015do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    values this step3i
  11. reorder ← 4

    15do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end do
    values this step4reorder.true.ids(3) == query_id
  12. print '(I0, 1X, I0)', query_id, reorder

    17    end do18    print '(I0, 1X, I0)', query_id, reorder19end program inventory_reorder_case_demo
    output103 4
    values this step103query_id4reorder
  1. ids ← [101, 102, 103]

    10ids = [101, 102, 103]11stock = [5, 12, 2]
    values this step[101, 102, 103]ids
  2. stock ← [5, 12, 2]

    10ids = [101, 102, 103]11stock = [5, 12, 2]12minimums = [8, 10, 6]
    values this step[5, 12, 2]stock
  3. minimums ← [8, 10, 6]

    11stock = [5, 12, 2]12minimums = [8, 10, 6]13query_id = 101
    values this step[8, 10, 6]minimums
  4. query_id ← 101

    12minimums = [8, 10, 6]13query_id = 10114reorder = 0
    values this step101query_id
  5. reorder ← 0

    13query_id = 10114reorder = 015do i = 1, 3
    values this step0reorder
  6. i ← 1

    14reorder = 015do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    values this step1i
  7. reorder ← 3

    15do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end do
    values this step3reorder.true.ids(1) == query_id
  8. i ← 2

    14reorder = 015do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    values this step2i
  9. if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))

    15do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end do
    values this step.false.ids(2) == query_id
  10. i ← 3

    14reorder = 015do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    values this step3i
  11. if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))

    15do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end do
    values this step.false.ids(3) == query_id
  12. print '(I0, 1X, I0)', query_id, reorder

    17    end do18    print '(I0, 1X, I0)', query_id, reorder19end program inventory_reorder_case_demo
    output101 3
    values this step101query_id3reorder
  1. ids ← [101, 102, 103]

    10ids = [101, 102, 103]11stock = [5, 12, 2]
    values this step[101, 102, 103]ids
  2. stock ← [5, 12, 2]

    10ids = [101, 102, 103]11stock = [5, 12, 2]12minimums = [8, 10, 6]
    values this step[5, 12, 2]stock
  3. minimums ← [8, 10, 6]

    11stock = [5, 12, 2]12minimums = [8, 10, 6]13query_id = 102
    values this step[8, 10, 6]minimums
  4. query_id ← 102

    12minimums = [8, 10, 6]13query_id = 10214reorder = 0
    values this step102query_id
  5. reorder ← 0

    13query_id = 10214reorder = 015do i = 1, 3
    values this step0reorder
  6. i ← 1

    14reorder = 015do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    values this step1i
  7. if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))

    15do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end do
    values this step.false.ids(1) == query_id
  8. i ← 2

    14reorder = 015do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    values this step2i
  9. reorder ← 0

    15do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end do
    values this step0reorder.true.ids(2) == query_id
  10. i ← 3

    14reorder = 015do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))
    values this step3i
  11. if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))

    15do i = 1, 316    if (ids(i) == query_id) reorder = max(0, minimums(i) - stock(i))17end do
    values this step.false.ids(3) == query_id
  12. print '(I0, 1X, I0)', query_id, reorder

    17    end do18    print '(I0, 1X, I0)', query_id, reorder19end program inventory_reorder_case_demo
    output102 0
    values this step102query_id0reorder
lookup table Parallel arrays hold item ids, current stock, and minimum stock.
bounded reorder `max(0, minimums(i) - stock(i))` prevents negative orders.
scan The loop checks each row and updates the result when the id matches.