2005-05-18 09:00:00 UTC

soooo55

Status: Passed
Results: 19553.8649
CPU Time: 101.546
Score: 1958.6
Submitted at: 2005-05-18 16:13:10 UTC
Scored at: 2005-05-18 20:50:51 UTC

Current Rank: 517th
Based on: soooo5 (diff)

Stijn Helsen
18 May 2005
xxxx
Code
```function [dy,dx,mark,carry]=solver(main,food,ants,scent)
rand(1,5);
i35=3:5;
i24=2:4;
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];
% find reachable regions
end
end
end
end
% modify current board based on reachable regions
end

connect=[7 8 9 12 14 17 18 19];
if length(iPos)>1&&length(iPos)<7
found=1;
c1=connect-13;
while found
found=0;
f=logical(iPos-iPos);
for i=1:length(iPos)
j=iPos(i);
if food(j)==0&&main(j)<1
k=j+c1;
f(i)=logical(1);
found=1;
scent(j)=0;
food(j)=0;
main(j)=-1;
end
end
end
if found
iPos(f)=[];
end
end
end
if length(iPos)<=1
carry=0;
if isempty(iPos)
dx=0;
dy=0;
else
if food(iPos)
carry=1;
end
dx=diry(iPos);
dy=dirx(iPos);
end
mark=2-scent(13);
return
end

% setup game stats
scents=scent(scent>0);
maxscent=max(scents(:));
% mark this field
if (max(main(:)))
mark=400-scent(13);
scent(13)=400;
init=0;
hills=find(main>0);
scent(hills)=1e7;
food(hills)=0;
if isempty(scents);maxscent=mark;end
elseif (maxscent==min(scents(:))) % init phase
mark=maxscent-scent(13);
scent(13)=maxscent;
init=1;
elseif isempty(scents) % nothing is marked
mark=98;
scent(13)=scent(13)+98;
maxscent=mark;
init=1;
else
mark=maxscent-1-scent(13);
scent(13)=maxscent-1;
init=0;
end
% look around for food
if max(food(:))<1 ||init % nothing found or no way home, search
[y,x]=find(target==max(target(:)));
if (numel(y)>1)
r=ceil(rand*numel(y));
y=y(r);
x=x(r);
end
carry=food(13)>0;
dx = dirx(x,y);
if dx<2
dy = 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;
[dy,dx]=find(t==max(t(:)));
r=ceil(rand*numel(dy));
dy=dy(r)-2;
dx=dx(r)-2;
return;
end;
if (food(13)>1)&&rand<.95 % sit on a lot of food, go home
[y,x]=find(target==max(target(:)));
if (numel(y)>1)
y=y(1);
x=x(1);
end
carry=1;
dx = dirx(x,y);
if dx<2
dy = 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;
[dy,dx]=find(t==max(t(:)));
r=ceil(rand*numel(dy));
dy=dy(r)-2;
dx=dx(r)-2;
return;
end;
if (food(13) >= 1) % sit on one food, build track
[yhome,xhome]=find(target==max(target(:)));
lowfood=food;lowfood(scent>=scent(13))=0;
carry=1;
dhere=max(max(abs(yhome-3),abs(xhome-3)));
runs=numel(lowfood(lowfood(:)>0));
lowfood(i24,i24)=lowfood(i24,i24)*1e8;
while runs % fetch food behind
[y,x]=find(target==max(target(:)));
if (numel(y)>1)
r=ceil(rand*numel(y));
y=y(r);
x=x(r);
end
dx = dirx(x,y);
if dx<2
dy = diry(x,y);
else
m(7,7)=0;
m(y+i02,x+i02)=1;
m=m(i35,i35);
t=target(i24,i24).*m+m;
[dy,dx]=find(t==max(t(:)));
r=ceil(rand*numel(dy));
dy=dy(r)-2;
dx=dx(r)-2;
end
if ( min(max(abs(yhome-y),abs(xhome-x))) > dhere )
carry=0;
return;
end
target(y,x)=0;runs=runs-1;
end
if (carry) % go home
[y,x]=find(target==max(target(:)));
if (numel(y)>1)
r=ceil(rand*numel(y));
y=y(r);
x=x(r);
end
dx = dirx(x,y);
if dx<2
dy = 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;
[dy,dx]=find(t==max(t(:)));
r=ceil(rand*numel(dy));
dy=dy(r)-2;
dx=dx(r)-2;
return;
end
return;
end;
[y,x]=find(target==max(target(:)));
if (numel(y)>1)
r=ceil(rand*numel(y));
y=y(r);
x=x(r);
end
carry=0;
dx = dirx(x,y);
if dx<2
dy = 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;
[dy,dx]=find(t==max(t(:)));
r=ceil(rand*numel(dy));
dy=dy(r)-2;
dx=dx(r)-2;```