Initial commit.
This commit is contained in:
		
							
								
								
									
										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;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user