Test | Status | Code Input and Output |
---|---|---|
1 | Pass |
%%
feval(@assignin,'caller','score',10000);
|
2 | Pass |
%%
max_moves=4000; % Expect < 1000
map=[...
repmat('a',1,28);
'accccccccccccaacccccccccccca';
'acaaaacaaaaacaacaaaaacaaaaca';
'acaaaacaaaaacaacaaaaacaaaaca';
'acaaaacaaaaacaacaaaaacaaaaca';
'acccccccccccccccccccccccccca';
'acaaaacaacaaaaaaaacaacaaaaca';
'acaaaacaacaaaaaaaacaacaaaaca';
'accccccaaccccaaccccaacccccca';
'aaaaaacaaaaabaabaaaaacaaaaaa';
'aaaaaacaaaaabaabaaaaacaaaaaa';
'aaaaaacaabbbbbbbbbbaacaaaaaa';
'aaaaaacaabaaabbaaabaacaaaaaa';
'aaaaaacaabalbbbblabaacaaaaaa';
'bbbbbbcbbbabbbbbbabbbcbbbbbb';
'aaaaaacaabalbbbblabaacaaaaaa';
'aaaaaacaabaaaaaaaabaacaaaaaa';
'aaaaaacaabbbbbbbbbbaacaaaaaa';
'aaaaaacaabaaaaaaaabaacaaaaaa';
'aaaaaacaabaaaaaaaabaacaaaaaa';
'accccccccccccaacccccccccccca';
'acaaaacaaaaacaacaaaaacaaaaca';
'acaaaacaaaaacaacaaaaacaaaaca';
'acccaacccccccbdcccccccaaccca';
'aaacaacaacaaaaaaaacaacaacaaa';
'aaacaacaacaaaaaaaacaacaacaaa';
'accccccaaccccaaccccaacccccca';
'acaaaaaaaaaacaacaaaaaaaaaaca';
'acaaaaaaaaaacaacaaaaaaaaaaca';
'acccccccccccccccccccccccccca';
repmat('a',1,28);];
map=map-'b';
[nr, nc]=size(map);
gmap=map; % Map used by ghosts to simplify PAC Capture
gmap(15,6)=Inf; %No tunnel ghosts
gmap(15,26)=Inf;
gmap(map==-1)=Inf; % walls to Inf
gmap(map>2)=Inf; % Elim start points as viable moves, quicker box exit
mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge
gmovxy=[0 -1;1 0;0 1;-1 0];
tunnel=find(map(:,1)==0); % tunnelptr
tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel
[pmr, pmc]=find(map==2); % pi 24 row pj 15 column of map
ptrpac=find(map==2);
ptrpac=find(map==2);
ptrpac_start=ptrpac;
ptrg_start=find(map>2);
map(ptrg_start)=[10 20 30 40];
[gstartx, gstarty]=find(map>2);
lives=12; % Lives
speed=[12 8 6 4 3 2 2 2 2 2 2 1]; % Faster as fewer lives remain
movepac=0;
while lives && any(mod(map(:),10)==1) && movepac<max_moves
for pac2x=1:speed(lives) % G05 Mod
if ~(lives && any(mod(map(:),10)==1)),continue;end % Died or completed
movepac=movepac+1;
[curdir]=pacmat(map);
[pmr, pmc]=find(map==2);
if curdir>0
if map(ptrpac+mapdelta(curdir))==-1
% Do nothing - Ran into a Wall
elseif map(ptrpac+mapdelta(curdir))>2 % ran into ghost
map(ptrpac)=0; % remove PAC from the board
lives=lives-1;
if lives==0,break;end
% reset the board
[ptrgx, ptrgy]=find(map>2);
ptrg=find(map>2);
map(ptrg)=mod(map(ptrg),10);
map(ptrpac_start)=2;
map(ptrg_start)=[10 20 30 40];
ptrpac=find(map==2);
continue;
else % legal move
map(ptrpac)=0; % Eat Dot and clear PAC
ptrpac=ptrpac+mapdelta(curdir);
if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end
if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end
map(ptrpac)=2;
end
end % curdir >0
end % pac2X Speed Loop
% Ghosts
for i=1:4
ghosts=find(map>2);
ptrpac=find(map==2); % Target
dot=false;
[gptrx, gptry]=find(map==10*i);
gidx=find(map==10*i);
if isempty(gidx)
[gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot
gidx=find(map==10*i+1);
dot=true;
end
% Find valid ghost moves using gmap
% mapdelta=[-1 nr 1 -nr];
gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT
if ~isempty(gmov) % PAC adjacent
lives=lives-1;
if lives==0,break;end
% reset the board
[pmr, pmc]=find(map==2); % PACMAT erase coords
map(map==2)=0;
[ptrgx, ptrgy]=find(map>2);
ptrg=find(map>2);
map(ptrg)=mod(map(ptrg),10);
map(ptrpac_start)=2;
map(ptrg_start)=[10 20 30 40];
ptrpac=find(map==2);
break; % Ghost move loop
else % gmap no tunnel usage, Walls
gmap=map; gmap(15,1)=-1;gmap(15,28)=-1;
ptctr=0;
gmap(gmap>=0)=Inf;
% Ghost algor change
gmap(ghosts)=-1; % other ghosts are like walls Ghosts_004/5
gmap(gidx)=Inf; % Ultimate target
gmap(ptrpac)=1; % Start at PACMAT and expand to ghost
while gmap(gidx)>101 && ptctr<100 % potential boxed dot
% find dots, add a counter to distance form location, keep min value
% when ptrpac gets a value it will be from nearest dot
% find side with dmap(ptrpac)-1
ptctr=ptctr+1;
dpts=find(gmap==ptctr);
newpt_idx=repmat(dpts,1,4)+repmat(mapdelta,length(dpts),1);
gmap(newpt_idx(:))=min(gmap(newpt_idx(:)),ptctr+1);
end
% Simplified by ghosts are walls: No Ghost Jumping
if ~isinf(gmap(gidx)) % Path(s) to Ghost found
for gmov=1:4 % execute with a find?
if gmap(gidx+mapdelta(gmov))==gmap(gidx)-1,break;end
end
else
gmov=[];
end
if ~isempty(gmov) % valid g move : ghost may not stand on ghost
map(gptrx,gptry)=mod(map(gptrx,gptry),10);
map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;
end % ~isempty(gmov) standard move - no capture
end % ~isempty(gmov) PACMAT adjacent
end % i ghost moves
end % while alive
%
assert(lives>0,sprintf('Twelve Captures\n')) % ) Lives allowed
assert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\n',movepac))
score_array=[ 9000 8000 7500 7000 6500 4000 3000 2000 1000 500 100 0];
score=score_array(lives) + movepac;
fprintf('Moves %i\n',movepac)
fprintf('Lives Remaining %i\n',lives)
fprintf('Score %i\n',score)
feval( @assignin,'caller','score',floor(min( 10000,score )) );
Moves 434
Lives Remaining 11
Score 534
|
Find all elements less than 0 or greater than 10 and replace them with NaN
13048 Solvers
115 Solvers
Number of 1s in a binary string
2818 Solvers
71 Solvers
20 Solvers
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!