image thumbnail
from Clock Bell by Krishna Lalith
Place the coins on turn basis, on the board to complete &/or to block to gain different medals.

[Xnew Ynew]=AI(Clocky)
function [Xnew Ynew]=AI(Clocky)

global Level;

Xnew=0; Ynew=0;
%--------------------------------------------------------------------------
%Connecting for '1'
[Xnew Ynew]=Check_Order(Clocky,1,0);

%Blocking for '1'
if Level==1,
    [Xnew Ynew]=Check_Order(Clocky,1,1);
end

%Connecting for '2'
[Xnew Ynew]=Check_Order(Clocky,2,0);

%Blocking for '2'
if Level==1,
    [Xnew Ynew]=Check_Order(Clocky,2,1);
end
%--------------------------------------------------------------------------
%Gaining 'CPU' Medals n Blocking 'UUU' Medals wrt Score
if Level==1,
 for ii=1:12,
    for jj=1:4,
        if Clocky(ii,jj)==5,
            Clocky(ii,jj)=1;
        else
            continue;
        end
        Max_Medal=0;
        Old_Medals=Check_Medal(Clocky,1);
        for kk=1:12,
            for ll=1:4,
                if Clocky(kk,ll)==5,
                    Clocky(kk,ll)=1;
                else
                    continue;
                end
                New_Medals=Check_Medal(Clocky,1);
                Clocky(kk,ll)=5;
                if length(New_Medals)>length(Old_Medals),
                    N=sum(New_Medals)-sum(Old_Medals);   
                    if N>Max_Medal,
                        Max_Medal=N;
                        Xnew=kk; Ynew=ll;
                    end
                end
            end
        end
        Clocky(ii,jj)=5;
    end
 end
end
%--------------------------------------------------------------------------
%Special Cases 'Semi-Circular' n 'Circular'
%(possibility of multiple Medals. Hence, need to be block from both the ends)

%Semi-Circular
%Gaining Medal
for jj=1:4,
    for ii=1:12,
        C=[Clocky(ii,jj) Clocky(Lin2Cir(ii+1),jj) Clocky(Lin2Cir(ii+2),jj) Clocky(Lin2Cir(ii+3),jj)];
        if length(find(C==0))==2,
            [X Y]=find(C==5,1);
            if (~isempty(X) && ~isempty(Y)),
                switch Y
                    case 1
                        Xnew=ii;  Ynew=jj;
                    case 2
                        Xnew=Lin2Cir(ii+1);  Ynew=jj;
                    case 3
                        Xnew=Lin2Cir(ii+2);  Ynew=jj;
                    case 4
                        Xnew=Lin2Cir(ii+3);  Ynew=jj; 
                end
            end
        end
    end  
end

%Blocking Opponent
for jj=1:4,
    for ii=1:12,
        C=[Clocky(ii,jj) Clocky(Lin2Cir(ii+1),jj) Clocky(Lin2Cir(ii+2),jj) Clocky(Lin2Cir(ii+3),jj)];
        if length(find(C==1))==2,
            [X Y]=find(C==5,1);
            if (~isempty(X) && ~isempty(Y)),
                switch Y
                    case 1
                        Xnew=ii;  Ynew=jj;
                    case 2
                        Xnew=Lin2Cir(ii+1);  Ynew=jj;
                    case 3
                        Xnew=Lin2Cir(ii+2);  Ynew=jj;
                    case 4
                        Xnew=Lin2Cir(ii+3);  Ynew=jj; 
                end
            end
        end
    end  
end

%Circular
%Gaining Medal
for jj=1:4,
    for ii=1:12,
        C=[Clocky(ii,jj) Clocky(Lin2Cir(ii+2),jj) Clocky(Lin2Cir(ii+4),jj) Clocky(Lin2Cir(ii+6),jj)];
        if length(find(C==0))==2,
            [X Y]=find(C==5,1);
            if (~isempty(X) && ~isempty(Y)),
                switch Y
                    case 1
                        Xnew=ii;  Ynew=jj;
                    case 2
                        Xnew=Lin2Cir(ii+2);  Ynew=jj;
                    case 3
                        Xnew=Lin2Cir(ii+4);  Ynew=jj;
                    case 4
                        Xnew=Lin2Cir(ii+6);  Ynew=jj; 
                end
            end
        end
    end  
end

%Blocking Opponent
for jj=1:4,
    for ii=1:12,
        C=[Clocky(ii,jj) Clocky(Lin2Cir(ii+2),jj) Clocky(Lin2Cir(ii+4),jj) Clocky(Lin2Cir(ii+6),jj)];
        if length(find(C==1))==2,
            [X Y]=find(C==5,1);
            if (~isempty(X) && ~isempty(Y)),
                switch Y
                    case 1
                        Xnew=ii;  Ynew=jj;
                    case 2
                        Xnew=Lin2Cir(ii+2);  Ynew=jj;
                    case 3
                        Xnew=Lin2Cir(ii+4);  Ynew=jj;
                    case 4
                        Xnew=Lin2Cir(ii+6);  Ynew=jj; 
                end
            end
        end
    end  
end
%--------------------------------------------------------------------------
%Gaining 'CPU' Medals wrt Score
Max_Medal=0;
Old_Medals=Check_Medal(Clocky,0);
for ii=1:12,
    for jj=1:4,
        if Clocky(ii,jj)==5,
            Clocky(ii,jj)=0;
        else
            continue;
        end
        New_Medals=Check_Medal(Clocky,0);
        Clocky(ii,jj)=5;
        if length(New_Medals)>length(Old_Medals),
            N=sum(New_Medals)-sum(Old_Medals);   
            if N>Max_Medal,
               Max_Medal=N;
               Xnew=ii; Ynew=jj;
            end
        end
    end
end 
%--------------------------------------------------------------------------
%Blocking 'UUU' Medals wrt Score
Max_Medal=0;
Old_Medals=Check_Medal(Clocky,1);
for ii=1:12,
    for jj=1:4,
        if Clocky(ii,jj)==5,
            Clocky(ii,jj)=1;
        else
            continue;
        end
        New_Medals=Check_Medal(Clocky,1);
        Clocky(ii,jj)=5;
        if length(New_Medals)>length(Old_Medals),
            N=sum(New_Medals)-sum(Old_Medals);   
            if N>Max_Medal,
               Max_Medal=N;
               Xnew=ii; Ynew=jj;
            end
        end
    end
end
%--------------------------------------------------------------------------
%Random
while(Xnew==0 && Ynew==0),
      Xnew=1+mod(fix(100*rand(1,1)),12);
      Ynew=1+mod(fix(100*rand(1,1)),4);
      if Clocky(Xnew,Ynew)==5,  break;  end
end
%--------------------------------------------------------------------------

Contact us at files@mathworks.com