#include <bits/stdc++.h>
#include "vision.h"

using namespace std;

vector<int> getVisionPattern1d()
{
    return {1,2,1,3,1,1,2};
}
int getMove1d(vector<int> v)
{
    int n=v.size(),put,mijl;
    vector<int> poz[20];
    for(int i=0;i<v.size();i++)
        poz[v[i]].push_back(i);
    mijl=(v.size()-1)/2;
    put=v[mijl];
    if(put==1)
    {
        if(v[mijl+1]==2)
            return mijl+1;
        if(v[mijl-1]==2)
            return mijl-1;
        if(v[mijl+1]==3)
            return mijl+1;
        return mijl-1;
    }
    if(put==2)
    {
        if(v[mijl+2]==3 || v[mijl-2]==3)
        {
            if(v[mijl+2]==3)
                return mijl+2;
            return mijl-2;
        }
        if(v[mijl+2]==2)
            return mijl+2;
        return mijl-2;
    }
    if(put==3)
    {
        if(v[mijl+3]==2)
            return mijl+3;
        return mijl-3;
    }
}
int dx[4]={1,-1,1,-1};
int dy[4]={1,-1,-1,1};
int dx2[4]={0,0,1,-1};
int dy2[4]={1,-1,0,0};
vector<vector<int>> getVisionPattern2d()
{
    return {{1,2,1},{2,2,1},{1,1,1}};
}
pair<int,int> getMove2d(vector<vector<int>> v)
{
    int mijl=(v.size()-1)/2,put,target,i,j,pozx,pozy,cnt,xn,yn,dirx,diry;
    put=v[mijl][mijl];
    if(put==1)
    {
        for(i=0;i<4;i++)
        {
            xn=mijl+dx[i];
            yn=mijl+dy[i];
            if(v[xn][yn]==2)
            {
                return {xn,yn};
            }

            xn=mijl+dx2[i];
            yn=mijl+dy2[i];
            if(v[xn][yn]==2)
            {
                return {xn,yn};
            }
        }
    }
    else
    {
        ///put=2
        bool ok=false;
        for(i=mijl-1;i<=mijl+1 && ok==false;i++)
        {
            for(j=mijl-1;j<=mijl+1 && ok==false;j++)
            {
                if(v[i][j]==1)
                    continue;
                cnt=0;
                for(int k=0;k<4;k++)
                {
                    xn=i+dx2[k];
                    yn=j+dy2[k];
                    if(v[xn][yn]==2)
                        cnt++;
                }
                if(cnt==2)
                {
                    ok=true;
                    pozx=i;
                    pozy=j;
                }
            }
        }
        if(pozx==mijl && pozy==mijl)
        {
            ///opus fata de 2
            dirx=diry=0;
            target=2;
            for(i=0;i<4;i++)
            {
                xn=mijl+dx2[i];
                yn=mijl+dy2[i];
                if(v[xn][yn]==target)
                {
                    if(dirx==0 && dx2[i]!=0)
                        dirx=dx2[i];
                    if(diry==0 && dy2[i]!=0)
                        diry=dy2[i];
                }
            }
            return {mijl-2*dirx,mijl-2*diry};
        }
        else
        {
            return {pozx,pozy};
        }
    }
}
