<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Coffee, Code and Chocolate &#187; puzzles</title>
	<atom:link href="http://blog.ganeshzone.net/blog/index.php/tag/puzzles/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ganeshzone.net/blog</link>
	<description>throw new Exception(&#34;#fail&#34;);</description>
	<lastBuildDate>Mon, 26 Jul 2010 19:45:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mars Rover Instruction problem &#8211; Solution</title>
		<link>http://blog.ganeshzone.net/blog/index.php/2009/12/mars-rover-instruction-problem-solution/</link>
		<comments>http://blog.ganeshzone.net/blog/index.php/2009/12/mars-rover-instruction-problem-solution/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 19:32:30 +0000</pubDate>
		<dc:creator>Ganesh Ranganathan</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Visual STudio 2008]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[puzzles]]></category>

		<guid isPermaLink="false">http://blog.ganeshzone.net/blog/?p=756</guid>
		<description><![CDATA[<p>I got an interesting problem by email recently where someone had asked me to solve the given below problem:-</p>
<p>A squad of robotic rovers are to be landed by NASA on a plateau on Mars.This plateau, which is curiously rectangular, must be navigated by therovers so that their on-board cameras can get a complete view of [...]]]></description>
			<content:encoded><![CDATA[<p>I got an interesting problem by email recently where someone had asked me to solve the given below problem:-</p>
<p><em><span style="color: #993300;">A squad of robotic rovers are to be landed by NASA on a plateau on Mars.This plateau, which is curiously rectangular, must be navigated by therovers so that their on-board cameras can get a complete view of the surrounding terrain to send back to Earth.</span></em></p>
<p><em><span style="color: #993300;">A rover&#8217;s position and location is represented by a combination of x and y co-ordinates and a letter representing one of the four cardinal compass points. The plateau is divided up into a grid to simplify navigation. An example position might be 0, 0, N, which means the rover is in the bottom<br />
left corner and facing North.</span></em></p>
<p><em><span style="color: #993300;"> </span><span style="color: #993300;">In order to control a rover, NASA sends a simple string of letters. The possible letters are &#8216;L&#8217;, &#8216;R&#8217; and &#8216;M&#8217;. &#8216;L&#8217; and &#8216;R&#8217; makes the rover spin 90 degrees left or right respectively, without moving from its current spot. &#8216;M&#8217; means move forward one grid point, and maintain the same heading.</span></em></p>
<p><em><span style="color: #993300;">Assume that the square directly North from (x, y) is (x, y+1).</span></em></p>
<p><em> </em></p>
<p><strong><em><span style="color: #993300;">INPUT:</span></em></strong><em><span style="color: #993300;"><br />
The first line of input is the upper-right coordinates of the plateau, the lower-left coordinates are assumed to be 0,0.</span></em></p>
<p><em><span style="color: #993300;">The rest of the input is information pertaining to the rovers that have been deployed. Each rover has two lines of input. The first line gives the rover&#8217;s position, and the second line is a series of instructions telling the rover how to explore the plateau.</span></em></p>
<p><em><span style="color: #993300;"> </span><span style="color: #993300;">The position is made up of two integers and a letter separated by spaces, corresponding to the x and  co-ordinates and the rover&#8217;s orientation.</span></em></p>
<p><em><span style="color: #993300;">Each rover will be finished sequentially, which means that the second rover won&#8217;t start to move until the first one has finished moving.</span></em></p>
<p><em> </em></p>
<p><strong><em><span style="color: #993300;">OUTPUT<br />
</span> </em><span style="color: #993300;"> </span></strong><em><span style="color: #993300;">The output for each rover should be its final co-ordinates and heading.</span></em></p>
<p>I worked out a simple solution for this problem. Of course there is a lot of room for improvement as this solution is the bare minimum one. The rover parses the instructions one at a time. Here are improvements I have planned to be implemented in later versions</p>
<ul>
<li>Understand multiple instruction and process them at once to improve performance</li>
<li>Identify cyclic instructions that have no net effect on coordinates and ignore them</li>
<li>Move multiple rover objects at same time.</li>
<li>Prevent two rovers from taking at same positions at the same time.</li>
</ul>
<p>Heres what I have for now.</p>
<p>The Rover class stores the state of each Rover on the grid.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"> <span style="color: #008080; font-style: italic;">///</span>
    <span style="color: #008080; font-style: italic;">/// This class is responsible for maintaining the state of each Rover</span>
    <span style="color: #008080; font-style: italic;">/// and processing the instructions given to it.</span>
    <span style="color: #008080; font-style: italic;">///</span>
    <span style="color: #FF0000;">class</span> Rover
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">//private objects : Coordinates, Direction, Instruction Array</span>
        <span style="color: #0600FF;">private</span> Coordinates _rovCor<span style="color: #008000;">;</span>
        <span style="color: #0600FF;">private</span> Direction _rovDir<span style="color: #008000;">;</span>
        <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> _instructionArray<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//readonly properties for above objects</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> X <span style="color: #000000;">&#123;</span> get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> _rovCor.<span style="color: #0000FF;">X</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Y <span style="color: #000000;">&#123;</span> get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> _rovCor.<span style="color: #0000FF;">Y</span><span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span> <span style="color: #000000;">&#125;</span>
        <span style="color: #0600FF;">public</span> Direction RoverDirection <span style="color: #000000;">&#123;</span> get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> _rovDir<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">///</span>
        <span style="color: #008080; font-style: italic;">/// Constructor. Passes to Struct coorinates for getting coordinate object</span>
        <span style="color: #008080; font-style: italic;">///</span>
        <span style="color: #0600FF;">public</span> Rover<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> _xCor, <span style="color: #FF0000;">int</span> _yCor, <span style="color: #FF0000;">char</span> _startDir, <span style="color: #FF0000;">string</span> _instructionArray<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">this</span>._rovCor <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Coordinates<span style="color: #000000;">&#40;</span>_xCor, _yCor<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">this</span>._rovDir <span style="color: #008000;">=</span> GetDirection<span style="color: #000000;">&#40;</span>_startDir<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">this</span>._instructionArray <span style="color: #008000;">=</span> _instructionArray<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//Parses The Start Position into Direction Enum</span>
        <span style="color: #0600FF;">private</span> Direction GetDirection<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">char</span> _startDir<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">switch</span> <span style="color: #000000;">&#40;</span>_startDir<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">case</span> <span style="color: #666666;">'N'</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> Direction.<span style="color: #0000FF;">North</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> <span style="color: #666666;">'S'</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> Direction.<span style="color: #0000FF;">South</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> <span style="color: #666666;">'E'</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> Direction.<span style="color: #0000FF;">East</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> <span style="color: #666666;">'W'</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">return</span> Direction.<span style="color: #0000FF;">West</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">default</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Unknown Direction Supplied. Accepted values are N,S,E,W&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//Processes the Instruction Array</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> ProcessInstructionArray<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">char</span> _instruction <span style="color: #0600FF;">in</span> _instructionArray<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                ProcessInstruction<span style="color: #000000;">&#40;</span>_instruction<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//Processes individual instructions. delegates tasks to other methods</span>
        <span style="color: #008080; font-style: italic;">//after checking instruction type.</span>
        <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> ProcessInstruction<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">char</span> _instruction<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>_instruction <span style="color: #008000;">==</span> <span style="color: #666666;">'L'</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">||</span> <span style="color: #000000;">&#40;</span>_instruction <span style="color: #008000;">==</span> <span style="color: #666666;">'R'</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                ProcessDirectionInstruction<span style="color: #000000;">&#40;</span>_instruction<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_instruction <span style="color: #008000;">==</span> <span style="color: #666666;">'M'</span><span style="color: #000000;">&#41;</span>
                ProcessMoveInstruction<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">else</span>
                <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Invalid Instruction Processed. Please supply only L,R and M&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//Move Instruction is processed by the Coordinate Object</span>
        <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> ProcessMoveInstruction<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">this</span>._rovCor.<span style="color: #0000FF;">UpdateCoordinates</span><span style="color: #000000;">&#40;</span>_rovDir<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//This Processes the direction of the Rover. Instructions L and R</span>
        <span style="color: #008080; font-style: italic;">//are processed by this method.</span>
        <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> ProcessDirectionInstruction<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">char</span> _instruction<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #FF0000;">int</span> _rovDirInt <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span><span style="color: #000000;">&#41;</span><span style="color: #0600FF;">this</span>._rovDir<span style="color: #008000;">;</span>
&nbsp;
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_instruction <span style="color: #008000;">==</span> <span style="color: #666666;">'L'</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_rovDirInt <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
                    _rovDirInt <span style="color: #008000;">=</span> <span style="color: #FF0000;">4</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">this</span>._rovDir <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>Direction<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#40;</span>_rovDirInt <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            <span style="color: #0600FF;">else</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_rovDirInt <span style="color: #008000;">==</span> <span style="color: #FF0000;">3</span><span style="color: #000000;">&#41;</span>
                    _rovDirInt <span style="color: #008000;">=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">this</span>._rovDir <span style="color: #008000;">=</span> <span style="color: #000000;">&#40;</span>Direction<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#40;</span>_rovDirInt <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span></pre></div></div>

<p>The Rover class stores its coordinates and Directions as a struct and an enum. Here is the code for them.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #008080; font-style: italic;">///</span>
    <span style="color: #008080; font-style: italic;">/// This enumeration is for the Direction the Rover is currently facing in.</span>
    <span style="color: #008080; font-style: italic;">///</span>
    <span style="color: #FF0000;">enum</span> Direction <span style="color: #000000;">&#123;</span> North, East, South, West, <span style="color: #000000;">&#125;</span><span style="color: #008000;">;</span>
&nbsp;
    <span style="color: #008080; font-style: italic;">///</span>
    <span style="color: #008080; font-style: italic;">/// This is Stuct which holds the current coordinates of the Rover.</span>
    <span style="color: #008080; font-style: italic;">/// It is also used to hold the max coordinates of the Grid.</span>
    <span style="color: #008080; font-style: italic;">///</span>
    <span style="color: #FF0000;">struct</span> Coordinates
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">int</span> _xCor<span style="color: #008000;">;</span>
        <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">int</span> _yCor<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> X <span style="color: #000000;">&#123;</span> get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> _xCor<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Y <span style="color: #000000;">&#123;</span> get <span style="color: #000000;">&#123;</span> <span style="color: #0600FF;">return</span> _yCor<span style="color: #008000;">;</span> <span style="color: #000000;">&#125;</span> <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> Coordinates<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> _xCor, <span style="color: #FF0000;">int</span> _yCor<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">this</span>._xCor <span style="color: #008000;">=</span> _xCor<span style="color: #008000;">;</span>
            <span style="color: #0600FF;">this</span>._yCor <span style="color: #008000;">=</span> _yCor<span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> UpdateCoordinates<span style="color: #000000;">&#40;</span>Direction _dirObj<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">switch</span> <span style="color: #000000;">&#40;</span>_dirObj<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">case</span> Direction.<span style="color: #0000FF;">North</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">this</span>._yCor<span style="color: #008000;">++;</span>
                    break<span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> Direction.<span style="color: #0000FF;">South</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">this</span>._yCor<span style="color: #008000;">--;</span>
                    break<span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> Direction.<span style="color: #0000FF;">East</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">this</span>._xCor<span style="color: #008000;">++;</span>
                    break<span style="color: #008000;">;</span>
                <span style="color: #0600FF;">case</span> Direction.<span style="color: #0000FF;">West</span><span style="color: #008000;">:</span>
                    <span style="color: #0600FF;">this</span>._xCor<span style="color: #008000;">--;</span>
                    break<span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span></pre></div></div>

<p>The Grid class contains a generic list of all the rovers on the grid. It moves each rover in the list and makes sure the rover doesn&#8217;t cross the boundaries. If it does then an exception is thrown.</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #008080; font-style: italic;">///</span>
    <span style="color: #008080; font-style: italic;">/// This class is responsible for holding all the Rovers</span>
    <span style="color: #008080; font-style: italic;">/// and also making sure no rovers cross the grid boundaries.</span>
    <span style="color: #008080; font-style: italic;">/// The ToString() method is overridden to get the state of</span>
    <span style="color: #008080; font-style: italic;">/// all rovers on the grid in an easy to read string format</span>
    <span style="color: #008080; font-style: italic;">///</span>
    <span style="color: #FF0000;">class</span> Grid
    <span style="color: #000000;">&#123;</span>
        <span style="color: #008080; font-style: italic;">//Maximum coordinates for the grid</span>
        <span style="color: #0600FF;">private</span> Coordinates _maxCoordinates<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//Collection Object to hold all rovers on grid</span>
        <span style="color: #0600FF;">private</span> List _allRoversOnGrid<span style="color: #008000;">;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//Constructor to intialize Rover collection and max coordinates</span>
        <span style="color: #0600FF;">public</span> Grid<span style="color: #000000;">&#40;</span>Coordinates _maxCor<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">this</span>._maxCoordinates <span style="color: #008000;">=</span> _maxCor<span style="color: #008000;">;</span>
            _allRoversOnGrid <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> List<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//Rovers can only be added to the collection. Nothing else</span>
        <span style="color: #008080; font-style: italic;">//is exposed outside</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> AddToRoverCollection<span style="color: #000000;">&#40;</span>Rover _roverObj<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            _allRoversOnGrid.<span style="color: #0000FF;">Add</span><span style="color: #000000;">&#40;</span>_roverObj<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//This method processes all the rovers on the grid and their instruction arrays</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> MoveAllRoversOnGrid<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Rover _tempRov <span style="color: #0600FF;">in</span> _allRoversOnGrid<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                _tempRov.<span style="color: #0000FF;">ProcessInstructionArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">DoIntegrityCheck</span><span style="color: #000000;">&#40;</span>_tempRov<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//Making sure the Rover object stays within the grid.</span>
        <span style="color: #0600FF;">private</span> <span style="color: #0600FF;">void</span> DoIntegrityCheck<span style="color: #000000;">&#40;</span>Rover _tempRov<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>_tempRov.<span style="color: #0000FF;">X</span> <span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;</span> _maxCoordinates.<span style="color: #0000FF;">X</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">||</span> <span style="color: #000000;">&#40;</span>_tempRov.<span style="color: #0000FF;">Y</span> <span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;</span> _maxCoordinates.<span style="color: #0000FF;">Y</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Rover Failed Grid Integrity. Moved out of Grid Boundaries&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #008080; font-style: italic;">//Overriding the ToString method to get all rovers states</span>
        <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #FF0000;">string</span> ToString<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
            StringBuilder _AllRoversState <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> StringBuilder<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            _AllRoversState.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;**********************************&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            _AllRoversState.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span>Environment.<span style="color: #0000FF;">NewLine</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            _AllRoversState.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Number of Rovers currently on Grid: &quot;</span> <span style="color: #008000;">+</span> <span style="color: #0600FF;">this</span>._allRoversOnGrid.<span style="color: #0000FF;">Count</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            _AllRoversState.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span>Environment.<span style="color: #0000FF;">NewLine</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            _AllRoversState.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">String</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Max Coordinates: X: {0},Y: {1}&quot;</span>, _maxCoordinates.<span style="color: #0000FF;">X</span>, _maxCoordinates.<span style="color: #0000FF;">Y</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            _AllRoversState.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span>Environment.<span style="color: #0000FF;">NewLine</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            _AllRoversState.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Each Rover state as below: &quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            _AllRoversState.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span>Environment.<span style="color: #0000FF;">NewLine</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">foreach</span> <span style="color: #000000;">&#40;</span>Rover _tempRov <span style="color: #0600FF;">in</span> _allRoversOnGrid<span style="color: #000000;">&#41;</span>
            <span style="color: #000000;">&#123;</span>
                _AllRoversState.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">String</span>.<span style="color: #0000FF;">Format</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Rover Details -- X:{0},Y:{1},Direction:{2}&quot;</span>, _tempRov.<span style="color: #0000FF;">X</span>, _tempRov.<span style="color: #0000FF;">Y</span>, _tempRov.<span style="color: #0000FF;">RoverDirection</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                _AllRoversState.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span>Environment.<span style="color: #0000FF;">NewLine</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #000000;">&#125;</span>
            _AllRoversState.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;**********************************&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #0600FF;">return</span> _AllRoversState.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #000000;">&#125;</span></pre></div></div>

<p>Finally, the code to call the Grid class:-</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;">    <span style="color: #FF0000;">class</span> Program
    <span style="color: #000000;">&#123;</span>
        <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> Main<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> args<span style="color: #000000;">&#41;</span>
        <span style="color: #000000;">&#123;</span>
&nbsp;
            <span style="color: #008080; font-style: italic;">//Creating Grid Object</span>
            Grid _testGrid <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Grid<span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Coordinates<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">5</span>,<span style="color: #FF0000;">5</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008080; font-style: italic;">//Adding two rovers as per sample input</span>
            _testGrid.<span style="color: #0000FF;">AddToRoverCollection</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Rover<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">1</span>, <span style="color: #FF0000;">2</span>, <span style="color: #666666;">'N'</span>, <span style="color: #666666;">&quot;LMLMLMLMM&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            _testGrid.<span style="color: #0000FF;">AddToRoverCollection</span><span style="color: #000000;">&#40;</span><span style="color: #008000;">new</span> Rover<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">3</span>, <span style="color: #FF0000;">3</span>, <span style="color: #666666;">'E'</span>, <span style="color: #666666;">&quot;MMRMMRMRRM&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008080; font-style: italic;">//move all rovers</span>
            _testGrid.<span style="color: #0000FF;">MoveAllRoversOnGrid</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
            <span style="color: #008080; font-style: italic;">//Get Rover Final state using Grids ToString() method.</span>
            Console.<span style="color: #0000FF;">WriteLine</span><span style="color: #000000;">&#40;</span>_testGrid.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
        <span style="color: #000000;">&#125;</span>
    <span style="color: #000000;">&#125;</span></pre></div></div>

<p>To download the solution click <a href="http://www.ganeshzone.net/Files/Presoft.RoverProblem.zip">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ganeshzone.net/blog/index.php/2009/12/mars-rover-instruction-problem-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
