]> ruin.nu Git - icfp05.git/blob - bot/bot.h
more sane shortest path implementation and more tuning of the robber algorithm
[icfp05.git] / bot / bot.h
1 #ifndef __BOT_H__
2 #define __BOT_H__
3
4 #include <ext/hash_map>
5 #include <list>
6 #include <string>
7 #include <locale>
8 #include <map>
9 // These are needed to be able to use std::string as key in a hash_map.
10 namespace __gnu_cxx {
11         template< typename CharT, typename Traits, typename Alloc >
12                 struct hash< std::basic_string<CharT, Traits, Alloc> > {
13                         size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
14
15                                 const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
16
17                                 return c.hash(s.c_str(), s.c_str() + s.size());
18
19                         }
20
21                 };
22
23         template< typename CharT, typename Traits, typename Alloc >
24                 struct hash< const std::basic_string<CharT, Traits, Alloc> > { //yes you need this version aswell!
25
26                         size_t operator()(const std::basic_string<CharT, Traits, Alloc>& s) const {
27
28                                 const std::collate<CharT>& c = std::use_facet< std::collate<CharT> >(std::locale());
29
30                                 return c.hash(s.c_str(), s.c_str() + s.size());
31                         }
32
33                 };
34 };
35
36 enum StreetType{foot, car, both};
37 enum PlayerType{robber, cop_foot, cop_car};
38 enum IntersectionType{hq, bank, robber_start, ordinary};
39
40 struct Intersection{
41         __gnu_cxx::hash_map<std::string,StreetType> connections;
42         std::string type;
43         int x;
44         int y;
45 };
46
47 struct Player{
48         PlayerType type;
49         std::string location;
50 };
51
52 struct Bank{
53         std::string location;
54         int value;
55 };
56
57 template<class T>
58 T value(std::string input);
59
60 class Bot {
61         public:
62                 Bot(const std::string& name, PlayerType type);
63                 virtual ~Bot();
64
65                 virtual void play();
66
67         protected:
68                 void buildGraph();
69                 void updateWorld();
70                 virtual std::string turn();
71                 void move(std::string location);
72                 std::list<std::string> shortestPath(const std::string& from, const std::string& to, PlayerType type);
73
74         __gnu_cxx::hash_map<std::string, Intersection> _intersections;
75         __gnu_cxx::hash_map<std::string, Player> _players;
76         __gnu_cxx::hash_map<std::string, int> _banks;
77         std::map<PlayerType, std::string> _playerTypeNames;
78         std::map<std::string, PlayerType> _playerTypes;
79         std::string _name;
80         PlayerType _type;
81         std::string _location;
82         int _world;
83         int _robbed;
84         int _smell;
85 };
86
87
88 #endif