#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,3,1},{1,1,1}};
}
pair<int,int> getMove2d(vector<vector<int>> v)
{
    int mijl=(v.size()-1)/2,put,target,i,xn,yn,dirx,diry;
    put=v[mijl][mijl];
    if(put<=2)
    {
        for(i=0;i<4;i++)
        {
            xn=mijl+dx[i];
            yn=mijl+dy[i];
            if(v[xn][yn]==3)
            {
                return {xn,yn};
            }

            xn=mijl+dx2[i];
            yn=mijl+dy2[i];
            if(v[xn][yn]==3)
            {
                return {xn,yn};
            }
        }
    }
    else
    {
        ///put=3
        vector<int> semne={1,-1};
        for(auto x:semne)
        {
            for(auto y:semne)
            {
                if(v[mijl+x][mijl]==1 && v[mijl][mijl+y]==1 && v[mijl+x][mijl+y]==1)
                    return {mijl+3*x,mijl+3*y};
            }
        }
    }
}
