ID:50317
Title:home sweet home II
Author:Crapou Doudou
Date:2008-11-07 16:06:59
Score:27273.9573
Result:27267.11 (cyc: 6, node: 539)
CPU Time:62.1689
Status:Passed
Comments:
Based on:home sweet home
Code:
function [dRow,dCol,action,mark] = solver( ...
    mainMap,foodMap,myAntMap,opAntMap, ...
    myScentMap,opScentMap,myDeathMap,opDeathMap)


if opAntMap(3,3)>0
    action=-1;
    dRow=0; dCol=0;
    vers_nid=1;
elseif mainMap(3,3)==1
    [dRow,dCol] = aller_vers_sucre(mainMap,foodMap,myAntMap,opAntMap,myScentMap);
    action = 0;
    vers_nid=0;
elseif foodMap(3,3)>0
    [dRow,dCol] = aller_vers_nid(mainMap,myScentMap);
    action = 1;
    vers_nid=1;
else
    [dRow,dCol] = aller_vers_sucre(mainMap,foodMap,myAntMap,opAntMap,myScentMap);
    action = 0;
    vers_nid=0;
end

mark = marquer_case(mainMap,myScentMap,foodMap,vers_nid,dRow,dCol);






function [dRow,dCol] = aller_vers_nid(mainMap,myScentMap)

[a,b]=find(mainMap==1,1);
if ~isempty(a)
    [dRow,dCol] = aller_vers_case(a,b,mainMap);
else
    myScentMap(3,3)=0;
    if sum(myScentMap(:))==0
        [dRow,dCol] = aller_vers_case(floor(rand*(5-eps))+1,floor(rand*(5-eps))+1,mainMap);
    else
        [a,b]=max(myScentMap(:));
        a=mod(b-1,5)+1;
        b=floor((b-1)/5)+1;
        [dRow,dCol] = aller_vers_case(a,b,mainMap);
    end
end



function [dRow,dCol] = aller_vers_sucre(mainMap,foodMap,myAntMap,opAntMap,myScentMap)

[a,b]=find((foodMap-abs(myAntMap-opAntMap)>0)&(mainMap~=1));
if ~isempty(a)
    [mini,ind]=min((a-3).^2+(b-3).^2);
    
    [dRow,dCol] = aller_vers_case(a(ind),b(ind),mainMap);
else
   myScentMap(3,3)=Inf;
    ind=find(myScentMap==min(myScentMap(:)));
    ind=ind(1+floor(rand*length(ind)));

    [dRow,dCol] = aller_vers_case(1+mod(ind-1,5),1+floor((ind-1)/5),mainMap);
end



function [dRow,dCol] = aller_vers_case(a,b,mainMap)

if a<3
    dRow = -1;
elseif a==3
    dRow = 0;
else
    dRow = 1;
end

if b<3
    dCol = -1;
elseif b==3
    dCol = 0;
else
    dCol = 1;
end

mainMap(3,3)=NaN;
while isnan(mainMap(3+dRow,3+dCol))
    dRow=floor(3*rand)-1;
    dCol=floor(3*rand)-1;
end



function mark = marquer_case(mainMap,myScentMap,foodMap,vers_nid,dRow,dCol)

if ~isempty(find(mainMap(2:4,2:4)==1,1))
    mark = 100;
elseif sum(myScentMap(:)>91) && (sum(foodMap(:))<3)
    mark = 10*(myScentMap(3,3)<90);
else
    mark = 0;
end