Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <random>
- #include <chrono>
- void trial(int denominator, int loops) {
- std::random_device rd; // obtain a random number from hardware
- std::mt19937 rng(rd()); // seed the generator
- std::uniform_int_distribution<> oneToX(1, denominator); // define the range
- std::uniform_int_distribution<> oneTo2(1, 2); // define the range
- int fishMale[10] = {0,0,0,0,0,0,0,0,0,0};
- int fishFemale[10] = {0,0,0,0,0,0,0,0,0,0};
- int totalRanges = 0; // total times the range has been counted and resetted
- double averageTotalRares = 0;
- auto startTime = std::chrono::steady_clock::now();
- for (int i=0; i<loops; ++i) {
- int value = oneToX(rng);
- //std::cout<<value<<std::endl;
- if (value <= 5 ) {//rare fish
- int fish1Rand = oneTo2(rng);
- if(fish1Rand==1) fishMale[0]++; if(fish1Rand==2)fishFemale[0]++;
- }
- else if (value > 5 && value <=10) {
- int fish2Rand = oneTo2(rng);
- if(fish2Rand==1) fishMale[1]++; if(fish2Rand==2)fishFemale[1]++;
- }
- else if (value > 10 && value <=15) {
- int fish3Rand = oneTo2(rng);
- if(fish3Rand==1) fishMale[2]++; if(fish3Rand==2)fishFemale[2]++;
- }
- else if (value > 15 && value <=30) {//dominant fish
- int fish4Rand = oneTo2(rng);
- if(fish4Rand==1) fishMale[3]++; if(fish4Rand==2)fishFemale[3]++;
- }
- else if (value > 30 && value <=45) {
- int fish5Rand = oneTo2(rng);
- if(fish5Rand==1) fishMale[4]++; if(fish5Rand==2)fishFemale[4]++;
- }
- else if (value > 45 && value <=60) {
- int fish6Rand = oneTo2(rng);
- if(fish6Rand==1) fishMale[5]++; if(fish6Rand==2)fishFemale[5]++;
- }
- else if (value > 60 && value <=70) {//remaining fish
- int fish7Rand = oneTo2(rng);
- if(fish7Rand==1) fishMale[6]++; if(fish7Rand==2)fishFemale[6]++;
- }
- else if (value > 70 && value <=80) {
- int fish8Rand = oneTo2(rng);
- if(fish8Rand==1) fishMale[7]++; if(fish8Rand==2)fishFemale[7]++;
- }
- else if (value > 80 && value <=90) {
- int fish9Rand = oneTo2(rng);
- if(fish9Rand==1) fishMale[8]++; if(fish9Rand==2)fishFemale[8]++;
- }
- else if (value > 90 && value <=100) {
- int fish10Rand = oneTo2(rng);
- if(fish10Rand==1) fishMale[9]++; if(fish10Rand==2)fishFemale[9]++;
- }
- else
- std::cout<<"Out of bounds!"<<std::endl;
- if ( (fishMale[0]>=1 || fishMale[0]+fishFemale[0]>=2) &&
- (fishMale[1]>=1 || fishMale[1]+fishFemale[1]>=2) &&
- (fishMale[2]>=1 || fishMale[2]+fishFemale[2]>=2) &&
- (fishMale[3]>=1 || fishMale[3]+fishFemale[3]>=2) &&
- (fishMale[4]>=1 || fishMale[4]+fishFemale[4]>=2) &&
- (fishMale[5]>=1 || fishMale[5]+fishFemale[5]>=2) &&
- (fishMale[6]>=1 || fishMale[6]+fishFemale[6]>=2) &&
- (fishMale[7]>=1 || fishMale[7]+fishFemale[7]>=2) &&
- (fishMale[8]>=1 || fishMale[8]+fishFemale[8]>=2) &&
- (fishMale[9]>=1 || fishMale[9]+fishFemale[9]>=2)
- ) {
- for(int j=0; j<10; ++j){
- fishMale[j] = 0;
- fishFemale[j] = 0;
- }
- totalRanges += 1;
- }
- }
- auto endTime = std::chrono::steady_clock::now();
- std::cout <<"loops : " << loops <<std::endl;
- std::cout <<"totalRanges : " << totalRanges <<std::endl;
- averageTotalRares = (double) loops / (double) totalRanges;
- std::cout << "loops / totalRanges : " << averageTotalRares << std::endl << "time elapsed in seconds : " << std::chrono::duration_cast<std::chrono::seconds>(endTime - startTime).count() << "s" << std::endl;
- };
- int main() {
- trial(100, 1e7);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement