| Code: | function [blabla,abradabra,chuu,jujuju]=solver(sSs,ZzZ,aAa,BbB, ...
qqqqqqqqqq,ssshhhh,dddddd,hhhHhHH );
rand(1,5);
i35=3:5;
i24=2:4;
nEnemy = sum(sum(BbB(i24,i24)))/9;
ratio = nEnemy/aAa(13);
if ratio>1 || rand<ratio
blabla=0;
abradabra=0;
chuu=-1;
jujuju=0;
return
end
food0=ZzZ;
i02=0:2;
dirx = [-1,2,2,2,-1; 2,-1,-1,-1,2; 2,0,0,0,2; 2,1,1,1,2; 1,2,2,2,1];
diry = [-1,-1,0,1,1; -1,-1,0,1,1; -1,-1,0,1,1; -1,-1,0,1,1; -1,-1,0,1,1];
BAD=isnan(sSs);
if BAD(7)||BAD(9)||BAD(17)||BAD(19)
if BAD(7)
BAD(1)=1;
BAD(2)=BAD(2)||BAD(8);
BAD(3)=BAD(3)||(BAD(8)&&BAD(9));
BAD(6)=BAD(6)||BAD(12);
BAD(11)=BAD(11)||(BAD(12)&&BAD(17));
end
if BAD(9)
BAD(4)=BAD(4)||BAD(8);
BAD(5)=1;
BAD(10)=BAD(10)||BAD(14);
end
if BAD(17)
BAD(16)=BAD(16)||BAD(12);
BAD(21)=1;
BAD(22)=BAD(22)||BAD(18);
end
if BAD(19)
BAD(15)=BAD(15)||(BAD(9)&&BAD(14));
BAD(20)=BAD(20)||(BAD(14));
BAD(23)=BAD(23)||(BAD(17)&&BAD(18));
BAD(24)=BAD(24)||(BAD(18));
BAD(25)=1;
end
sSs(BAD)=-1;
ZzZ(BAD)=0;
qqqqqqqqqq(BAD)=0;
end
BAD(13)=1;
scents=qqqqqqqqqq(qqqqqqqqqq>0);
ujjjaaall=max(scents(:)); % the max non-zero scent
% jujuju this field
if (max(sSs(:)))
totalMark=400-qqqqqqqqqq(13);
qqqqqqqqqq(13)=400;
init=0;
hills=find(sSs>0);
qqqqqqqqqq(hills)=1e7;
ZzZ(hills)=0;
if isempty(scents);ujjjaaall=totalMark;end
elseif (ujjjaaall==min(scents(:)))
totalMark=ujjjaaall-qqqqqqqqqq(13);
qqqqqqqqqq(13)=ujjjaaall;
init=1;
elseif isempty(scents)
totalMark=98;
qqqqqqqqqq(13)=qqqqqqqqqq(13)+98;
ujjjaaall=totalMark;
init=1;
else
totalMark=ujjjaaall-1-qqqqqqqqqq(13);
qqqqqqqqqq(13)=ujjjaaall-1;
init=0;
end
intScent = floor(totalMark/aAa(13));
fracScent = totalMark/aAa(13) - intScent;
jujuju = intScent;
if fracScent>0 && rand<fracScent
jujuju = jujuju+1;
end
if max(ZzZ(:))<1 || init
target=ujjjaaall-qqqqqqqqqq;target(BAD)=-1;
[y,x]=find(target==max(target(:)));
if (numel(y)>1)
r=ceil(rand*numel(y));
y=y(r);
x=x(r);
end
chuu=ZzZ(13)>0;
abradabra = dirx(x,y);
if abradabra<2
blabla = diry(x,y);
return;
end;
m(7,7)=0;
m(y+i02,x+i02)=1;
m=m(i35,i35);
t=target(i24,i24).*m+m;
[blabla,abradabra]=find(t==max(t(:)));
r=ceil(rand*numel(blabla));
blabla=blabla(r)-2;
abradabra=abradabra(r)-2;
return;
end;
if (ZzZ(13)>1)
if ZzZ(13)>aAa(13) || rand < (ZzZ(13)-2)/aAa(13)
target=qqqqqqqqqq;target(BAD)=-1;
[y,x]=find(target==max(target(:)));
if (numel(y)>1)
y=y(1);
x=x(1);
end
chuu=1;
abradabra = dirx(x,y);
if abradabra<2
blabla = diry(x,y);
return;
end;
m(7,7)=0;
m(y+i02,x+i02)=1;
m=m(i35,i35);
t=target(i24,i24).*m+m;
[blabla,abradabra]=find(t==max(t(:)));
r=ceil(rand*numel(blabla));
blabla=blabla(r)-2;
abradabra=abradabra(r)-2;
return;
end
end;
if (ZzZ(13) >= 1)
if aAa(13)==1 || rand<1/aAa(13)
target=qqqqqqqqqq;target(BAD)=-1;
[yhome,xhome]=find(target==max(target(:)));
lowfood=ZzZ;lowfood(qqqqqqqqqq>=qqqqqqqqqq(13))=0;
chuu=1;
dhere=max(max(abs(yhome-3),abs(xhome-3)));
runs=numel(lowfood(lowfood(:)>0));
lowfood(i24,i24)=lowfood(i24,i24)*1e8;
target=lowfood;target(BAD)=-1;
while runs
[y,x]=find(target==max(target(:)));
if (numel(y)>1)
r=ceil(rand*numel(y));
y=y(r);
x=x(r);
end
abradabra = dirx(x,y);
if abradabra<2
blabla = diry(x,y);
else
m(7,7)=0;
m(y+i02,x+i02)=1;
m=m(i35,i35);
t=target(i24,i24).*m+m;
[blabla,abradabra]=find(t==max(t(:)));
r=ceil(rand*numel(blabla));
blabla=blabla(r)-2;
abradabra=abradabra(r)-2;
end
if ( min(max(abs(yhome-y),abs(xhome-x))) > dhere )
chuu=0;
return;
end
target(y,x)=0;runs=runs-1;
end
if (chuu)
target=qqqqqqqqqq;target(BAD)=-1;
[y,x]=find(target==max(target(:)));
if (numel(y)>1)
r=ceil(rand*numel(y));
y=y(r);
x=x(r);
end
abradabra = dirx(x,y);
if abradabra<2
blabla = diry(x,y);
return;
end;
m(7,7)=0;
m(y+i02,x+i02)=1;
m=m(i35,i35);
t=target(i24,i24).*m+m;
[blabla,abradabra]=find(t==max(t(:)));
r=ceil(rand*numel(blabla));
blabla=blabla(r)-2;
abradabra=abradabra(r)-2;
return;
end
return;
end
end;
target=max(ZzZ-aAa,0);target(BAD)=-1000;
[y,x]=find(target==max(target(:)));
if (numel(y)>1)
r=ceil(rand*numel(y));
y=y(r);
x=x(r);
end
chuu=0;
abradabra = dirx(x,y);
if abradabra<2
blabla = diry(x,y);
return;
end;
m(7,7)=0;
m(y+i02,x+i02)=1;
m=m(i35,i35);
t=target(i24,i24).*m+m;
[blabla,abradabra]=find(t==max(t(:)));
r=ceil(rand*numel(blabla));
blabla=blabla(r)-2;
abradabra=abradabra(r)-2; |