return;
getline(cin, input);
_name = value<string>(input);
- cerr << "Got name: " << _name << endl;
+ //cerr << "Got name: " << _name << endl;
getPlayers();
- cerr << "Got players, building graph." << endl;
+ //cerr << "Got players, building graph." << endl;
getline(cin, input);
buildGraph();
+ preGamePreparations();
+
while (true){
getline(cin, input);
if (input == "game-over")
return;
+ cerr << input << endl;
+ cerr << "Updating world" << endl;
updateWorld();
+ cerr << "Done updating world" << endl;
_type = _players[_name].type;
_location = _players[_name].location;
- cerr << "New turn" << endl;
+ //cerr << "New turn" << endl;
+ //
+ string input;
+
+ sendInformation();
+ //cerr << "Getting information " << endl;
+ getInformation();
+
+ sendPlan();
+ getPlans();
+
+ vote();
+ voteResult();
+
move(turn());
- cerr << "Done with turn." << endl;
+ //cerr << "Done with turn." << endl;
}
}
if (input != "nod\\")
return;
- cerr << "Getting intersections" << endl;
+ //cerr << "Getting intersections" << endl;
while (true){
getline(cin, input);
if (input == "nod/")
break;
istringstream node(input);
node >> input;
+ string name;
+ node >> name;
+ Intersection& inter = _intersections[name];
node >> input;
- Intersection& inter = _intersections[input];
- node >> input;
- if (input == "bank")
+ if (input == "bank"){
inter.type = bank;
- else if (input == "hq")
+ _banks[name] = 0;
+ }
+ else if (input == "hq"){
inter.type = hq;
- else if (input == "robber-start")
+ _copHq = name;
+ }
+ else if (input == "robber-start"){
inter.type = robber_start;
+ _robberLocation = name;
+ }
else
inter.type = ordinary;
node >> inter.x;
node >> inter.y;
}
- cerr << "Number of intersections: " << _intersections.size() << endl;
+ //cerr << "Number of intersections: " << _intersections.size() << endl;
getline(cin, input);
if (input != "edg\\")
return;
- cerr << "Getting streets" << endl;
+ //cerr << "Getting streets" << endl;
int streets = 0;
while (true){
getline(cin, input);
}else
_intersections[from].connections[to] = car;
}
- cerr << "Number of streets: " << streets << endl;
+ //cerr << "Number of streets: " << streets << endl;
getline(cin, input);
}
void Bot::updateWorld(){
+ cerr << "Entered updateWorld function" << endl;
string input;
getline(cin,input);
+ cerr << input << endl;
_world = value<int>(input);
- //cerr << "World: " << _world << endl;
+ cerr << "World: " << _world << endl;
getline(cin,input);
_robbed = value<int>(input);
//cerr << "Robbed: " << _robbed << endl;
+ //
+ getline(cin,input);
+ while (true){
+ getline(cin, input);
+ if (input == "dc/")
+ break;
+ istringstream dirtyCop(input);
+ }
+
+ getline(cin,input);
+ while (true){
+ getline(cin, input);
+ if (input == "sc/")
+ break;
+ istringstream controlledCop(input);
+ }
+
+ getline(cin,input);
+ while (true){
+ getline(cin, input);
+ if (input == "fac/")
+ break;
+ istringstream falseAccusation(input);
+ }
getline(cin,input);
while (true){
getline(cin,input);
_smell = value<int>(input);
+ _robberLocation = "";
getline(cin,input);
while (true){
getline(cin, input);
player >> pl.location;
player >> input;
pl.type = _playerTypes[input];
+ if (pl.type == robber)
+ _robberLocation = pl.location;
}
//cerr << "Number of players: " << _players.size() << endl;
getline(cin, input);
}
void Bot::move(std::string location){
- cerr << "Moving to: " << location << endl;
- cout << "mov: " << location << " " << _playerTypeNames[_type] << endl;
+ //cerr << "Moving to: " << location << endl;
+ cout << "mov: " << location << " " << _playerTypeNames[_type] << " " << _name << endl;
}
template<class T>
int g = 0;
bool hascar = type == cop_car;
+ ;
+ SPInfo* n = 0;
while(!pq.empty()){
node = pq.top();
pq.pop();
- //cerr << "Vector with size: " << w.size() << endl;
- //cerr << "Looking at: " << node->name << endl;
- //copy(w.begin(), w.end(), ostream_iterator<string>(cerr, " : "));
g = goal(node);
if (g < 0)
}
node->settled = true;
- Intersection& inter = _intersections[node->name];
- for (hash_map<string,StreetType>::const_iterator street = inter.connections.begin();
- street != inter.connections.end(); ++street){
+ hash_map<string,Intersection>::const_iterator intersection = _intersections.find(node->name);
+ if (intersection == _intersections.end()){ //Sanity check, should never be true..
+ cerr << "BUG: Could not find intersection: " << node->name << endl;
+ continue;
+ }
+ for (hash_map<string,StreetType>::const_iterator street = intersection->second.connections.begin();
+ street != intersection->second.connections.end(); ++street){
hash_map<string,SPInfo>::iterator newNode = nodes.find(street->first);
bool travelStreet = false;
if (hascar){
if (reverse){
if (street->second != foot){
- hash_map<string,StreetType>::const_iterator st = _intersections[street->first].connections.find(node->name);
- if (st != _intersections[street->first].connections.end())
- travelStreet = st->second != foot;
- else
- travelStreet = false;
+ hash_map<string,Intersection>::const_iterator newInter = _intersections.find(street->first);
+ if (newInter != _intersections.end()){
+ hash_map<string,StreetType>::const_iterator st = newInter->second.connections.find(node->name);
+ if (st != newInter->second.connections.end())
+ travelStreet = st->second != foot;
+ }
}else
travelStreet = true;
}else
}
if (travelStreet){
//cerr << "Adding street: " << street->first << endl;
- SPInfo* n = 0;
if (newNode == nodes.end()){
n = &nodes[street->first];
n->name = street->first;
}
return 0;
}
+
+void Bot::sendInformation(){
+ cout << "inf\\" << endl;
+ cout << "inf/" << endl;
+}
+
+void Bot::getInformation(){
+ string input;
+ do{
+ getline(cin,input);
+ }while(input != "from/");
+}
+
+void Bot::sendPlan(){
+ cout << "plan\\" << endl;
+ cout << "plan/" << endl;
+}
+
+void Bot::getPlans(){
+ string input;
+ //ignore From-plan
+ do{
+ getline(cin,input);
+ }while(input != "from/");
+}
+
+void Bot::vote(){
+ cout << "vote\\" << endl;
+ cout << "vote: " << _name << endl;
+ priority_queue<pair<int,string> > players;
+ for (hash_map<string,int>::const_iterator player = _winningPlans.begin();
+ player != _winningPlans.end(); ++player){
+ players.push(pair<int,string>(-player->second, player->first));
+ }
+ while (players.size() > 0){
+ const pair<int,string>& player = players.top();
+ cout << "vote: " << player.second << endl;
+ //cerr << "voted for " << player.second << " with " << player.first << " previously won plans" << endl;
+ players.pop();
+ }
+ cout << "vote/" << endl;
+}
+
+void Bot::voteResult(){
+ string input;
+ getline(cin,input);
+ if (input != "nowinner:"){
+ string winner = value<string>(input);
+ if (winner != _name)
+ ++_winningPlans[winner];
+ }
+}