Initial commit.
This commit is contained in:
commit
a7280c44a3
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*~
|
||||
a.out
|
82
main.cpp
Normal file
82
main.cpp
Normal file
@ -0,0 +1,82 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <cstdlib> // atoi
|
||||
|
||||
class Rate
|
||||
{
|
||||
public:
|
||||
Rate(int rate)
|
||||
: base_rate(rate), min_rate(rate)
|
||||
{ }
|
||||
|
||||
/*
|
||||
* This is the rate given to you by the user
|
||||
*/
|
||||
int BaseRate() const { return base_rate; }
|
||||
|
||||
/*
|
||||
* This is the least common multiple when compared to all the other rates
|
||||
*/
|
||||
int MinimumRate() const { return min_rate; }
|
||||
|
||||
/*
|
||||
* This tells you how many you'd need to build to achieve the minimum rate
|
||||
*/
|
||||
int QuantityToBuild() const
|
||||
{
|
||||
// TODO(dev): assert !(min_rate % rate), otherwise this shit's broken or not yet calculated
|
||||
return min_rate / base_rate;
|
||||
}
|
||||
|
||||
/*
|
||||
* This is used to step up to the next rate
|
||||
*/
|
||||
void Increment() { min_rate += base_rate; }
|
||||
|
||||
private:
|
||||
const int base_rate;
|
||||
|
||||
int min_rate; // needs to be incremented/calculated in the program loop
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if(argc < 3)
|
||||
{
|
||||
std::cout << "Usage: ./" << argv[0] << " rate1 rate2 [...] rateN" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
std::vector<Rate> rates;
|
||||
|
||||
// Add all command line parameters (rates) to the vector:
|
||||
for(auto i = 1; i < argc; ++i)
|
||||
rates.push_back(Rate(atoi(argv[i])));
|
||||
|
||||
// NOTE(dev): Run through all (2+) rates to determine the least common multiple.
|
||||
// Increment each rate until they all come out to the same value
|
||||
bool difference_found;
|
||||
do
|
||||
{
|
||||
difference_found = false;
|
||||
for(auto &rate : rates)
|
||||
{
|
||||
for(auto &other : rates) // sure it checks against itself, but this isn't optimized sooo
|
||||
{
|
||||
if(rate.MinimumRate() < other.MinimumRate())
|
||||
{
|
||||
difference_found = true;
|
||||
while(rate.MinimumRate() < other.MinimumRate())
|
||||
rate.Increment();
|
||||
}
|
||||
}
|
||||
}
|
||||
} while(difference_found);
|
||||
|
||||
for(auto rate : rates)
|
||||
std::cout << rate.QuantityToBuild() << " * " << rate.BaseRate() << " == "
|
||||
<< rate.MinimumRate() << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user