2005-05-18 09:00:00 UTC

# NewEntryTweak10

Status: Passed
Results: 20735.4822
CPU Time: 73.9613
Score: 2073.75
Submitted at: 2005-05-18 16:48:16 UTC
Scored at: 2005-05-19 01:10:04 UTC

Current Rank: 786th
Based on: Near Wall 2 (diff)

Code
```function [dy,dx,mark,carry]=solver(main,food,ants,scent)
%18372.39 or 18293.70
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
% 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)=98;
maxscent=98;
init=1;
else
mark=maxscent-1-scent(13);
scent(13)=maxscent-1;
init=0;
end
if init
scent(nearwall==1) = maxscent;
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;

m(2:4,2:4) = 0;
[y,x] = find (m);
m = zeros(7);
for i = 1:numel(y)
m(y(i):y(i)+2,x(i):x(i)+2) = m(y(i):y(i)+2,x(i):x(i)+2) + 1;
end
nearwall = zeros(5);
if (m(4,3) == 3)
nearwall(3,2) = 1;
end
if (m(3,4) == 3)
nearwall(2,3) = 1;
end
if (m(4,5) == 3)
nearwall(3,4) = 1;
end
if (m(5,4) == 3)
nearwall(4,3) = 1;
end
if (m(3,3) == 5)
nearwall(2,2) = 1;
end
if (m(3,5) == 5)
nearwall(2,4) = 1;
end
if (m(5,3) == 5)
nearwall(2,2) = 1;
end
if (m(5,5) == 5)
nearwall(4,4) = 1;
end```