Finish 2010-11-17 12:00:00 UTC

mhh3

by srach

Status: Passed
Results: 472521 (cyc: 19, node: 500)
CPU Time: 0.337
Score: 94513.7
Submitted at: 2010-11-11 16:36:02 UTC
Scored at: 2010-11-11 16:36:45 UTC

Current Rank: 2970th (Highest: 125th )
Based on: mhh2 (diff)

Comments
Please login or create a profile.
Code
function [thrustRow, thrustCol] = solver(chart, aIndex, bIndex, maxThrottle)
% Basic solver, does nothing

% Copyright 2010 The MathWorks, Inc.



[rr cc trash] = size(chart);

[ar ac] = ind2sub([rr cc], aIndex);
[br bc] = ind2sub([rr cc], bIndex);

diffr = br-ar;
diffc = bc-ac;


% thrustRow(1) = sign(diffr);
% velr = thrustRow(1);
% thrustCol(1) = sign(diffc);
% velc = thrustRow(1);

pos(1,:) = [ar ac];
velr(1) = 0;
velc(1) = 0;

thrustCol = zeros(1,1001);
thrustRow = zeros(1,1001);
turn = false;
epss = 15;
for k = 2:1001
    pos(k,:) = pos(k-1, :) + [velr velc];
    if any(pos(k,:) <= 0) | any(pos(k,:)>[rr cc])
        %         'ups'
        %         [[rr cc]
        %         pos(k,:)]
        break;
    end
    
    diffr = br-pos(k,1);
    diffc = bc-pos(k,2);
    
    if (turn == false) && ((abs(diffr) < epss) && (abs(diffc) < epss))
        br = ar;
        bc = ac;
        turn = true;
        
        diffr = br-pos(k,1);
        diffc = bc-pos(k,2);
        %   ['turn ' num2str(k)]
        %   [k 1]
    elseif (turn == true) && ((abs(diffr) < epss) && (abs(diffc) < epss))
        %  [k 2]
        % ['zuhause ' num2str(k)]
        break;
    end
    velr = velr + chart(pos(k,1), pos(k,2), 1);
    velc = velc + chart(pos(k,1), pos(k,2), 2);
    
    if maxThrottle >0
        
        if sign(velr)~=sign(diffr)
            thrustRow(k) = -(velr)+sign(diffr);
            velr = velr + thrustRow(k);
            
        else
            thrustRow(k) = 0;
        end
        if sign(velc)~=sign(diffc)
            thrustCol(k) = -(velc)+sign(diffc);
            velc = velc + thrustCol(k);
        else
            thrustCol(k) = 0;
        end
        if (pos(k,1) + velr) < 1 |(pos(k,1) + velr) >rr
            thrustRow(k) = thrustRow(k) - (pos(k,1) + velr);
            velr = thrustRow(k);
        end
        if (pos(k,2) + velc) < 1 |(pos(k,2) + velc) >cc
            thrustCol(k) = thrustCol(k) - (pos(k,2) + velc);
            velr = thrustCol(k);
        end
        if velr == 0
            thrustRow(k) = sign(diffr);
            velr = thrustRow(k);
        end
        if velc == 0
            thrustCol(k) = sign(diffc);
            velc = thrustRow(k);
        end
        
        
        maxThrottle = maxThrottle - thrustCol(k) - thrustRow(k);
    end
%     if maxThrottle <0
%         'blowout'
%     end
end

thrustCol = thrustCol(2:k);
thrustRow = thrustRow(2:k);

end