Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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();
        }
    }
}
Ejemplo n.º 6
0
 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));
 }