#include "histogram.h"
#include <vector>
using namespace std;

bool
find_minmax(const std::vector<double>& numbers, double& Min, double& Max) {
    bool flag=true;
    if(numbers.size()==0 ){
        flag=false;}else
        {
    Min = numbers[0];
    Max = numbers[0];

    for(double x : numbers)
    {
        if(x < Min)
        {
            Min = x;
        }else
        {
            if(x > Max)
            {
                Max = x;
            }
        }
    }
    }
    return flag;
}

std::vector<size_t> make_histogram(std::vector<double> numbers, size_t bin_count)
{
    std::vector<size_t> bins(bin_count);
    double Min, Max;
    find_minmax(numbers, Min, Max);
    double bin_size = (Max - Min) / bin_count;
    for (double x : numbers)
        {
            bool found = false;
            for (size_t j = 0; (j < bin_count - 1) && !found; j++)
            {
                auto lo = Min + j * bin_size;
                auto hi = Min + (j + 1) * bin_size;
                if ((lo <= x) && (x < hi))
                {
                    bins[j]++;
                    found = true;
                }
            }
            if (!found)
            {
                bins[bin_count - 1]++;
            }
        }
    return bins;
}