adding cs142 code
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
#include "util.h"
|
||||
|
||||
ostream & operator<<(ostream & os, vector<int> & v) {
|
||||
os << "[";
|
||||
for(unsigned int i = 0; i < v.size(); i++) {
|
||||
os << v[i];
|
||||
if(i != v.size() - 1) {
|
||||
os << ", ";
|
||||
}
|
||||
}
|
||||
os << "]";
|
||||
return os;
|
||||
}
|
||||
|
||||
int _increment_to_next_looser(const vector<bool> & players,
|
||||
int start, const int step) {
|
||||
int counter = 0;
|
||||
// the test examples in the pdf have us start by killing the m-1th person
|
||||
// offset by one for some dumb reason
|
||||
int attempt = start - 1;
|
||||
while(counter != step) {
|
||||
attempt = (attempt + 1) % players.size();
|
||||
if(players[attempt]) {
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
return attempt;
|
||||
}
|
||||
|
||||
vector<int> _play_game(vector<bool> & players, int step) {
|
||||
vector<int> loosers;
|
||||
int token = 0;
|
||||
while(loosers.size() < players.size()) {
|
||||
token = _increment_to_next_looser(players, token, step);
|
||||
players[token] = false;
|
||||
loosers.push_back(token);
|
||||
}
|
||||
return loosers;
|
||||
}
|
||||
|
||||
int _test_run(int n, int m, bool verbose) {
|
||||
if(m < 1) {
|
||||
throw string("rule violation: m > 0");
|
||||
}
|
||||
vector<bool> players(n, true);
|
||||
vector<int> loosers = _play_game(players, m);
|
||||
if(verbose) {
|
||||
cout << loosers << endl;
|
||||
}
|
||||
return loosers[loosers.size()-1];
|
||||
}
|
||||
Reference in New Issue
Block a user