」 feat: added ex01, might need adjustments :c

This commit is contained in:
y-syo
2025-08-26 18:58:54 +02:00
parent fd0bfc5420
commit 021636df08
4 changed files with 167 additions and 0 deletions

74
ex01/Span.cpp Normal file
View File

@@ -0,0 +1,74 @@
#include <stdexcept>
#include <algorithm>
#include <limits>
#include <iostream>
#include "Span.hpp"
Span::Span(void)
: _size(0), _max_size(0)
{
}
Span::Span(unsigned int size)
: _size(0), _max_size(size)
{
}
Span::Span(Span &other)
: _size(other._size), _max_size(other._max_size)
{
this->_data = other._data;
}
Span &Span::operator=(Span &other)
{
this->_max_size = other._max_size;
this->_size = other._size;
this->_data = other._data;
return *this;
}
Span::~Span(void)
{
}
void Span::addNumber(int value)
{
if (_size == _max_size)
throw std::runtime_error("max span size reached");
_size++;
_data.push_back(value);
}
int Span::shortestSpan(void)
{
if (_size < 2)
throw std::runtime_error("not enough values in the span");
std::vector<int> sorted = _data;
size_t shortest = std::numeric_limits<size_t>::max();
std::sort(sorted.begin(), sorted.end());
for (unsigned int i = 0; i < _size - 1; i++)
{
if ((unsigned int)(sorted[i + 1] - sorted[i]) < shortest)
shortest = sorted[i + 1] - sorted[i];
}
return shortest;
}
int Span::longestSpan(void)
{
if (_size < 2)
throw std::runtime_error("not enough values in the span");
std::vector<int>::iterator min = std::min_element(_data.begin(), _data.end());
std::vector<int>::iterator max = std::max_element(_data.begin(), _data.end());
return (*max - *min);
}