#include "histogram.h"
#include "histogram_internal.h"
#include <vector>
#include <cstddef>

using namespace std;

void find_minmax(const vector<double>& numbers, double& min, double& max) {
    if (numbers.empty()) {
        return;
    }
    min = numbers[0];
    max = numbers[0];

    for (double x : numbers) {
        if (x < min) min = x;
        if (x > max) max = x;
    }
}

vector<size_t> make_histogram(const vector<double>& numbers, size_t bin_count) {
    double min, max;
    find_minmax(numbers, min, max);

    vector<size_t> bins(bin_count);
    for (double x : numbers) {
        size_t bin_index = (x - min) / (max - min) * bin_count;
        if (bin_index == bin_count) bin_index--;
        bins[bin_index]++;
    }
    return bins;
}
