How to resolve the algorithm Bin given limits step by step in the Lua programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Bin given limits step by step in the Lua programming language

Table of Contents

Problem Statement

You are given a list of n ascending, unique numbers which are to form limits for n+1 bins which count how many of a large set of input numbers fall in the range of each bin. (Assuming zero-based indexing) The task is to create a function that given the ascending limits and a stream/ list of numbers, will return the bins; together with another function that given the same list of limits and the binning will print the limit of each bin together with the count of items that fell in the range. Assume the numbers to bin are too large to practically sort. Part 1: Bin using the following limits the given input data Part 2: Bin using the following limits the given input data Show output here, on this page.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Bin given limits step by step in the Lua programming language

Source code in the lua programming language

function binner(limits, data)
  local bins = setmetatable({}, {__index=function() return 0 end})
  local n, flr = #limits+1, math.floor
  for _, x in ipairs(data) do
    local lo, hi = 1, n
    while lo < hi do 
      local mid = flr((lo + hi) / 2)
      if not limits[mid] or x < limits[mid] then hi=mid else lo=mid+1 end
    end
    bins[lo] = bins[lo] + 1
  end
  return bins
end

function printer(limits, bins)
  for i = 1, #limits+1 do
    print(string.format("[%3s,%3s) : %d", limits[i-1] or " -∞", limits[i] or " +∞", bins[i]))
  end
end

print("PART 1:")
limits = {23, 37, 43, 53, 67, 83}
data = {95,21,94,12,99,4,70,75,83,93,52,80,57,5,53,86,65,17,92,83,71,61,54,58,47,
        16, 8, 9,32,84,7,87,46,19,30,37,96,6,98,40,79,97,45,64,60,29,49,36,43,55}
bins = binner(limits, data)
printer(limits, bins)

print("\nPART 2:")          
limits = {14, 18, 249, 312, 389, 392, 513, 591, 634, 720}
data = {445,814,519,697,700,130,255,889,481,122,932, 77,323,525,570,219,367,523,442,933,
        416,589,930,373,202,253,775, 47,731,685,293,126,133,450,545,100,741,583,763,306,
        655,267,248,477,549,238, 62,678, 98,534,622,907,406,714,184,391,913, 42,560,247,
        346,860, 56,138,546, 38,985,948, 58,213,799,319,390,634,458,945,733,507,916,123,
        345,110,720,917,313,845,426,  9,457,628,410,723,354,895,881,953,677,137,397, 97,
        854,740, 83,216,421, 94,517,479,292,963,376,981,480, 39,257,272,157,  5,316,395,
        787,942,456,242,759,898,576, 67,298,425,894,435,831,241,989,614,987,770,384,692,
        698,765,331,487,251,600,879,342,982,527,736,795,585, 40, 54,901,408,359,577,237,
        605,847,353,968,832,205,838,427,876,959,686,646,835,127,621,892,443,198,988,791,
        466, 23,707,467, 33,670,921,180,991,396,160,436,717,918,  8,374,101,684,727,749}
bins = binner(limits, data)
printer(limits, bins)


  

You may also check:How to resolve the algorithm Binary digits step by step in the PicoLisp programming language
You may also check:How to resolve the algorithm Create a file on magnetic tape step by step in the UNIX Shell programming language
You may also check:How to resolve the algorithm Compiler/lexical analyzer step by step in the Standard ML programming language
You may also check:How to resolve the algorithm XML/Output step by step in the Fantom programming language
You may also check:How to resolve the algorithm Palindromic gapful numbers step by step in the Crystal programming language