bool simulation::match(const state &left, const state &right) { assert(left.size() == right.size()); for (size_t i = 0; i < left.size(); i++) { if (!is_variable(left[i]) && !is_variable(right[i]) && left[i] != right[i]) { return false; } } return true; }
state next_state(const state &s) { auto state_size = s.size(); state ret; ret.reserve(state_size); if (!state_size) { throw std::runtime_error("empty state"); } // trivial case if (state_size == 1) { ret.push_back(false); return ret; } // Left border ret.push_back(s[1] != s[state_size - 1]); for (std::vector<bool>::size_type i = 1; i < state_size - 1; ++i) { ret.push_back(s[i - 1] != s[i + 1]); } // Right border ret.push_back(s[state_size - 2] != s[0]); return ret; }
double GTPWrapper::countBlack(state bboard){ double ret=0; for(unsigned int i=0;i<(bboard.size()/2);i++) if(bboard[2*i]==0 && bboard[(2*i)+1]==1) ret++; return ret; }
int hash(state& s) { int l=0; for(int i=0;i<s.size();i++) { l+=primes[i]*hash(s[i]); l%=32609; } return l; }
void recurse(state& s,int pts) { // cout<<"RECURSE"<<' '<<pts; if(done) return; int l=hash(s); for(set<gstate>::iterator it=MHASH[l].begin();it!=MHASH[l].end();++it) { if((*it).first==s) { const_cast<int&>((*it).second)=min((*it).second,pts); return; } } if(l==superhash) { if(m==s) { done=1; MHASH[l].insert(make_pair(s,pts)); return; } } MHASH[l].insert(make_pair(s,pts)); for(int i=1;i<s.size();i++) { int maxV=0,maxW=0; if(s[i].size()) maxV=s[i].back(); if(s[i-1].size()) maxW=s[i-1].back(); if( ((maxV>maxW)&&maxW) || (!maxV&&maxW)) { //add to s[i] s[i].push_back(s[i-1].back()); s[i-1].pop_back(); Q.push_back(make_pair(s,pts+1));/* recurse(s,pts+1);*/ s[i-1].push_back(s[i].back()); s[i].pop_back(); } if( ((maxW>maxV)&&maxV) || (!maxW&&maxV)) { //add to [s-1] s[i-1].push_back(s[i].back()); s[i].pop_back(); Q.push_back(make_pair(s,pts+1));/* recurse(s,pts+1);*/ s[i].push_back(s[i-1].back()); s[i-1].pop_back(); } } }
friend void foreach(state const& st, Lambda l) { const auto L = st.size(); for (size_t i = 0; i < L; ++i) l(i, st(i)); }