127 lines
2.8 KiB
C++
127 lines
2.8 KiB
C++
|
#include <iostream>
|
||
|
#include <vector>
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
#include "Circle.h"
|
||
|
|
||
|
Circle::Circle(){}
|
||
|
|
||
|
vector<string> Circle::getNames() { //used to populate a vector with names
|
||
|
string special = "Josephus";
|
||
|
vector<string> names = {{
|
||
|
"Jacob",
|
||
|
"Isabella",
|
||
|
"Ethan",
|
||
|
"Sophia",
|
||
|
"Michael",
|
||
|
"Emma",
|
||
|
"Jayden",
|
||
|
"Olivia",
|
||
|
"William",
|
||
|
"Ava",
|
||
|
"Alexander",
|
||
|
"Emily",
|
||
|
"Noah",
|
||
|
"Abigail",
|
||
|
"Daniel",
|
||
|
"Madison",
|
||
|
"Aiden" ,
|
||
|
"Chloe",
|
||
|
"Anthony",
|
||
|
}};
|
||
|
return names;
|
||
|
}
|
||
|
|
||
|
vector<string> Circle::playGame(int n, int m) {
|
||
|
vector<string> names = getNames();
|
||
|
vector<string> temp;
|
||
|
if(n < 10 or n > 20){
|
||
|
names = {};
|
||
|
return names;
|
||
|
}
|
||
|
if(m < 0){
|
||
|
names = {};
|
||
|
return names;
|
||
|
}
|
||
|
for(int i = 0; i < 20 - n; i++) {
|
||
|
names.pop_back();
|
||
|
}
|
||
|
names.push_back("Josephus"); //insures that Josephus will be in the game
|
||
|
int count = 0;
|
||
|
int threshold = 0;
|
||
|
for(int i = 0; i < n; i++) {
|
||
|
int hits = 0;
|
||
|
while(hits < m) {
|
||
|
if(names[count] == ""){
|
||
|
}
|
||
|
else {
|
||
|
hits++;
|
||
|
}
|
||
|
if(hits == m) {
|
||
|
temp.push_back(names[count]);
|
||
|
names[count] = "";
|
||
|
hits = 100;
|
||
|
}
|
||
|
count++;
|
||
|
if(count+1 > names.size()) {
|
||
|
count = 0;
|
||
|
threshold++;
|
||
|
}
|
||
|
if(threshold > 100) { //threshold against infinite loop
|
||
|
hits = 100;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return temp;
|
||
|
}
|
||
|
|
||
|
int Circle::reportSafeIndex(int n, int m) { //uses similar function as playGame() to determine index
|
||
|
vector<string> names = getNames();
|
||
|
vector<string> temp;
|
||
|
int count = 0;
|
||
|
int threshold = 0;
|
||
|
if(n < 10 or n > 20){
|
||
|
return -1;
|
||
|
}
|
||
|
if(m < 0){
|
||
|
return -1;
|
||
|
}
|
||
|
for(int i = 0; i < 20 - n; i++) {
|
||
|
names.pop_back();
|
||
|
}
|
||
|
names.push_back("Josephus");
|
||
|
for(int i = 0; i < n; i++) {
|
||
|
int hits = 0;
|
||
|
while(hits < m) {
|
||
|
if(names[count] == ""){
|
||
|
}
|
||
|
else {
|
||
|
hits++;
|
||
|
}
|
||
|
if(hits == m) {
|
||
|
temp.push_back(names[count]);
|
||
|
names[count] = "";
|
||
|
hits = 100;
|
||
|
}
|
||
|
count++;
|
||
|
if(count+1 > names.size()) {
|
||
|
count = 0;
|
||
|
threshold++;
|
||
|
}
|
||
|
if(threshold > 100) { //incase of infinite loop due to improper input
|
||
|
hits = 100;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
string index_holder = temp[n-1];
|
||
|
int index = 0;
|
||
|
names = getNames();
|
||
|
for(unsigned int i = 0; i < names.size(); i++){
|
||
|
if(names[i] == index_holder) {
|
||
|
index = i+1;
|
||
|
}
|
||
|
}
|
||
|
return index;
|
||
|
}
|