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