#include "vision.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<pii> vii;
typedef vector<vi> vvi;
typedef vector<ll> vl;

std::vector<int> getVisionPattern1d()
{
    return {1, 3, 1, 1, 1, 2};
}

int getMove1d(std::vector<int> v)
{
    int l=v.size()/2;
    if(l==3){
        if(v[5]==2) return 0;
        return 6;
    }
    if(l==1){
        if(v[0]==2) return 0;
        if(v[2]==2) return 2;
        if(v[0]==3) return 0;
        if(v[2]==3) return 2;
        
        return 2;
    }
    if(v[4]==3) return 4;
    return 0;
}

std::vector<std::vector<int>> getVisionPattern2d()
{
    vvi ret (24, vi(6, 1));
    for(int i=0; i<24; i++){
        if(i%4==2){
            ret[i][(i/4+3)%6]=2;
        }
        else{
            //shift of 3 1 1 1 2 1
            vi x={3, 1, 1, 1, 2, 1};
            for(int j=0; j<6; j++){
                ret[i][j]=x[(j+6-i/4)%6];
            }
        }
    }
    return ret;
}

std::pair<int, int> getMove2d(std::vector<std::vector<int>> v)
{
    int l=v.size()/2;
    if(l==1){
        //check if I find smth near me
        for(int i=0; i<3; i++){
            for(int j=0; j<3; j++){
                if(v[i][j]>1) return {i, j};
            }
        }
        return {2, 1};
    }
    if(l==3){
        //find x orientation
        bool op1=0;
        if(v[3][5]==2) op1=1;
        //now I need to go up
        bool op2=0;
        if(v[5][6]!=2){
            op2=1;
        }
        int x=6, y=4;
        if(op2) x=0;
        if(op1) y=2;
        return {x, y};
    }
    //l==2
for(int i=0; i<5; i++){
    for(int j=0; j<5; j++){
        if(v[i][j]==3) return {i, j};
    }
}
        
}
