mirror of
https://github.com/rjNemo/mars-rover-kata
synced 2026-06-06 02:36:48 +00:00
use Coordinates class and type hints
This commit is contained in:
parent
58257b9742
commit
f45f7e0fda
6 changed files with 111 additions and 93 deletions
BIN
.coverage
BIN
.coverage
Binary file not shown.
|
|
@ -134,7 +134,7 @@
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<p>
|
<p>
|
||||||
<a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.0b1">coverage.py v6.0b1</a>,
|
<a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.0b1">coverage.py v6.0b1</a>,
|
||||||
created at 2021-08-27 11:47 +0200
|
created at 2021-08-27 15:04 +0200
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@
|
||||||
</h1>
|
</h1>
|
||||||
<img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" />
|
<img id="keyboard_icon" src="keybd_closed.png" alt="Show keyboard shortcuts" />
|
||||||
<h2 class="stats">
|
<h2 class="stats">
|
||||||
48 statements
|
55 statements
|
||||||
<button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">48 run</button>
|
<button type="button" class="run shortkey_r button_toggle_run" title="Toggle lines run">55 run</button>
|
||||||
<button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">0 missing</button>
|
<button type="button" class="mis show_mis shortkey_m button_toggle_mis" title="Toggle lines missing">0 missing</button>
|
||||||
<button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button>
|
<button type="button" class="exc show_exc shortkey_x button_toggle_exc" title="Toggle lines excluded">0 excluded</button>
|
||||||
</h2>
|
</h2>
|
||||||
|
|
@ -52,81 +52,90 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="source">
|
<div id="source">
|
||||||
<p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">dataclasses</span> </span><span class="r"></span></p>
|
<p id="t1" class="run"><span class="n"><a href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">dataclasses</span> <span class="key">import</span> <span class="nam">dataclass</span><span class="op">,</span> <span class="nam">field</span> </span><span class="r"></span></p>
|
||||||
<p id="t2" class="pln"><span class="n"><a href="#t2">2</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t2" class="run"><span class="n"><a href="#t2">2</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="nam">Tuple</span> </span><span class="r"></span></p>
|
||||||
<p id="t3" class="pln"><span class="n"><a href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t3" class="pln"><span class="n"><a href="#t3">3</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t4" class="run"><span class="n"><a href="#t4">4</a></span><span class="t"><span class="op">@</span><span class="nam">dataclasses</span><span class="op">.</span><span class="nam">dataclass</span> </span><span class="r"></span></p>
|
<p id="t4" class="pln"><span class="n"><a href="#t4">4</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t5" class="run"><span class="n"><a href="#t5">5</a></span><span class="t"><span class="key">class</span> <span class="nam">Rover</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t5" class="run"><span class="n"><a href="#t5">5</a></span><span class="t"><span class="op">@</span><span class="nam">dataclass</span><span class="op">(</span><span class="nam">frozen</span><span class="op">=</span><span class="key">True</span><span class="op">)</span> </span><span class="r"></span></p>
|
||||||
<p id="t6" class="run"><span class="n"><a href="#t6">6</a></span><span class="t"> <span class="nam">x</span><span class="op">:</span> <span class="nam">int</span> </span><span class="r"></span></p>
|
<p id="t6" class="run"><span class="n"><a href="#t6">6</a></span><span class="t"><span class="key">class</span> <span class="nam">Coordinates</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t7" class="run"><span class="n"><a href="#t7">7</a></span><span class="t"> <span class="nam">y</span><span class="op">:</span> <span class="nam">int</span> </span><span class="r"></span></p>
|
<p id="t7" class="run"><span class="n"><a href="#t7">7</a></span><span class="t"> <span class="nam">x</span><span class="op">:</span> <span class="nam">int</span> </span><span class="r"></span></p>
|
||||||
<p id="t8" class="run"><span class="n"><a href="#t8">8</a></span><span class="t"> <span class="nam">direction</span><span class="op">:</span> <span class="nam">str</span> </span><span class="r"></span></p>
|
<p id="t8" class="run"><span class="n"><a href="#t8">8</a></span><span class="t"> <span class="nam">y</span><span class="op">:</span> <span class="nam">int</span> </span><span class="r"></span></p>
|
||||||
<p id="t9" class="run"><span class="n"><a href="#t9">9</a></span><span class="t"> <span class="nam">obstacles</span><span class="op">:</span> <span class="nam">list</span><span class="op">[</span><span class="nam">list</span><span class="op">[</span><span class="nam">int</span><span class="op">]</span><span class="op">]</span> <span class="op">=</span> <span class="nam">dataclasses</span><span class="op">.</span><span class="nam">field</span><span class="op">(</span><span class="nam">default_factory</span><span class="op">=</span><span class="nam">list</span><span class="op">)</span> </span><span class="r"></span></p>
|
<p id="t9" class="run"><span class="n"><a href="#t9">9</a></span><span class="t"> <span class="nam">left</span><span class="op">:</span> <span class="nam">str</span> </span><span class="r"></span></p>
|
||||||
<p id="t10" class="pln"><span class="n"><a href="#t10">10</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t10" class="run"><span class="n"><a href="#t10">10</a></span><span class="t"> <span class="nam">right</span><span class="op">:</span> <span class="nam">str</span> </span><span class="r"></span></p>
|
||||||
<p id="t11" class="run"><span class="n"><a href="#t11">11</a></span><span class="t"> <span class="nam">valid_commands</span> <span class="op">=</span> <span class="op">(</span><span class="str">"F"</span><span class="op">,</span> <span class="str">"B"</span><span class="op">,</span> <span class="str">"R"</span><span class="op">,</span> <span class="str">"L"</span><span class="op">)</span> </span><span class="r"></span></p>
|
<p id="t11" class="pln"><span class="n"><a href="#t11">11</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t12" class="pln"><span class="n"><a href="#t12">12</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t12" class="pln"><span class="n"><a href="#t12">12</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t13" class="run"><span class="n"><a href="#t13">13</a></span><span class="t"> <span class="nam">direction_map</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p>
|
<p id="t13" class="run"><span class="n"><a href="#t13">13</a></span><span class="t"><span class="op">@</span><span class="nam">dataclass</span> </span><span class="r"></span></p>
|
||||||
<p id="t14" class="pln"><span class="n"><a href="#t14">14</a></span><span class="t"> <span class="str">"NORTH"</span><span class="op">:</span> <span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="str">"WEST"</span><span class="op">,</span> <span class="str">"EAST"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p>
|
<p id="t14" class="run"><span class="n"><a href="#t14">14</a></span><span class="t"><span class="key">class</span> <span class="nam">Rover</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t15" class="pln"><span class="n"><a href="#t15">15</a></span><span class="t"> <span class="str">"EAST"</span><span class="op">:</span> <span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="num">0</span><span class="op">,</span> <span class="str">"NORTH"</span><span class="op">,</span> <span class="str">"SOUTH"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p>
|
<p id="t15" class="run"><span class="n"><a href="#t15">15</a></span><span class="t"> <span class="nam">x</span><span class="op">:</span> <span class="nam">int</span> </span><span class="r"></span></p>
|
||||||
<p id="t16" class="pln"><span class="n"><a href="#t16">16</a></span><span class="t"> <span class="str">"SOUTH"</span><span class="op">:</span> <span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="str">"EAST"</span><span class="op">,</span> <span class="str">"WEST"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p>
|
<p id="t16" class="run"><span class="n"><a href="#t16">16</a></span><span class="t"> <span class="nam">y</span><span class="op">:</span> <span class="nam">int</span> </span><span class="r"></span></p>
|
||||||
<p id="t17" class="pln"><span class="n"><a href="#t17">17</a></span><span class="t"> <span class="str">"WEST"</span><span class="op">:</span> <span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">0</span><span class="op">,</span> <span class="str">"SOUTH"</span><span class="op">,</span> <span class="str">"NORTH"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p>
|
<p id="t17" class="run"><span class="n"><a href="#t17">17</a></span><span class="t"> <span class="nam">direction</span><span class="op">:</span> <span class="nam">str</span> </span><span class="r"></span></p>
|
||||||
<p id="t18" class="pln"><span class="n"><a href="#t18">18</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p>
|
<p id="t18" class="run"><span class="n"><a href="#t18">18</a></span><span class="t"> <span class="nam">obstacles</span><span class="op">:</span> <span class="nam">list</span><span class="op">[</span><span class="nam">list</span><span class="op">[</span><span class="nam">int</span><span class="op">]</span><span class="op">]</span> <span class="op">=</span> <span class="nam">field</span><span class="op">(</span><span class="nam">default_factory</span><span class="op">=</span><span class="nam">list</span><span class="op">)</span> </span><span class="r"></span></p>
|
||||||
<p id="t19" class="pln"><span class="n"><a href="#t19">19</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t19" class="pln"><span class="n"><a href="#t19">19</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t20" class="run"><span class="n"><a href="#t20">20</a></span><span class="t"> <span class="key">def</span> <span class="nam">is_valid_command</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">command</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t20" class="run"><span class="n"><a href="#t20">20</a></span><span class="t"> <span class="nam">valid_commands</span> <span class="op">=</span> <span class="op">(</span><span class="str">"F"</span><span class="op">,</span> <span class="str">"B"</span><span class="op">,</span> <span class="str">"R"</span><span class="op">,</span> <span class="str">"L"</span><span class="op">)</span> </span><span class="r"></span></p>
|
||||||
<p id="t21" class="run"><span class="n"><a href="#t21">21</a></span><span class="t"> <span class="key">for</span> <span class="nam">ch</span> <span class="key">in</span> <span class="nam">command</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t21" class="pln"><span class="n"><a href="#t21">21</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t22" class="run"><span class="n"><a href="#t22">22</a></span><span class="t"> <span class="key">if</span> <span class="nam">ch</span> <span class="key">not</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">valid_commands</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t22" class="run"><span class="n"><a href="#t22">22</a></span><span class="t"> <span class="nam">direction_map</span> <span class="op">=</span> <span class="op">{</span> </span><span class="r"></span></p>
|
||||||
<p id="t23" class="run"><span class="n"><a href="#t23">23</a></span><span class="t"> <span class="key">return</span> <span class="key">False</span> </span><span class="r"></span></p>
|
<p id="t23" class="pln"><span class="n"><a href="#t23">23</a></span><span class="t"> <span class="str">"NORTH"</span><span class="op">:</span> <span class="nam">Coordinates</span><span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="str">"WEST"</span><span class="op">,</span> <span class="str">"EAST"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p>
|
||||||
<p id="t24" class="pln"><span class="n"><a href="#t24">24</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t24" class="pln"><span class="n"><a href="#t24">24</a></span><span class="t"> <span class="str">"EAST"</span><span class="op">:</span> <span class="nam">Coordinates</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="num">0</span><span class="op">,</span> <span class="str">"NORTH"</span><span class="op">,</span> <span class="str">"SOUTH"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p>
|
||||||
<p id="t25" class="run"><span class="n"><a href="#t25">25</a></span><span class="t"> <span class="key">return</span> <span class="key">True</span> </span><span class="r"></span></p>
|
<p id="t25" class="pln"><span class="n"><a href="#t25">25</a></span><span class="t"> <span class="str">"SOUTH"</span><span class="op">:</span> <span class="nam">Coordinates</span><span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="str">"EAST"</span><span class="op">,</span> <span class="str">"WEST"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p>
|
||||||
<p id="t26" class="pln"><span class="n"><a href="#t26">26</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t26" class="pln"><span class="n"><a href="#t26">26</a></span><span class="t"> <span class="str">"WEST"</span><span class="op">:</span> <span class="nam">Coordinates</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">0</span><span class="op">,</span> <span class="str">"SOUTH"</span><span class="op">,</span> <span class="str">"NORTH"</span><span class="op">)</span><span class="op">,</span> </span><span class="r"></span></p>
|
||||||
<p id="t27" class="run"><span class="n"><a href="#t27">27</a></span><span class="t"> <span class="key">def</span> <span class="nam">is_obstacle</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">int</span><span class="op">,</span> <span class="nam">y</span><span class="op">:</span> <span class="nam">int</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t27" class="pln"><span class="n"><a href="#t27">27</a></span><span class="t"> <span class="op">}</span> </span><span class="r"></span></p>
|
||||||
<p id="t28" class="run"><span class="n"><a href="#t28">28</a></span><span class="t"> <span class="key">return</span> <span class="op">[</span><span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">]</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">obstacles</span> </span><span class="r"></span></p>
|
<p id="t28" class="pln"><span class="n"><a href="#t28">28</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t29" class="pln"><span class="n"><a href="#t29">29</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t29" class="run"><span class="n"><a href="#t29">29</a></span><span class="t"> <span class="key">def</span> <span class="nam">is_valid_command</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">command</span><span class="op">:</span> <span class="nam">str</span><span class="op">)</span> <span class="op">-></span> <span class="nam">bool</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t30" class="run"><span class="n"><a href="#t30">30</a></span><span class="t"> <span class="key">def</span> <span class="nam">move</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">command</span><span class="op">:</span> <span class="nam">str</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t30" class="run"><span class="n"><a href="#t30">30</a></span><span class="t"> <span class="key">for</span> <span class="nam">ch</span> <span class="key">in</span> <span class="nam">command</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t31" class="run"><span class="n"><a href="#t31">31</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">is_valid_command</span><span class="op">(</span><span class="nam">command</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t31" class="run"><span class="n"><a href="#t31">31</a></span><span class="t"> <span class="key">if</span> <span class="nam">ch</span> <span class="key">not</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">valid_commands</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t32" class="run"><span class="n"><a href="#t32">32</a></span><span class="t"> <span class="key">raise</span> <span class="nam">ValueError</span><span class="op">(</span><span class="str">"invalid command. The rover does not move"</span><span class="op">)</span> </span><span class="r"></span></p>
|
<p id="t32" class="run"><span class="n"><a href="#t32">32</a></span><span class="t"> <span class="key">return</span> <span class="key">False</span> </span><span class="r"></span></p>
|
||||||
<p id="t33" class="pln"><span class="n"><a href="#t33">33</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t33" class="pln"><span class="n"><a href="#t33">33</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t34" class="run"><span class="n"><a href="#t34">34</a></span><span class="t"> <span class="key">for</span> <span class="nam">ch</span> <span class="key">in</span> <span class="nam">command</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t34" class="run"><span class="n"><a href="#t34">34</a></span><span class="t"> <span class="key">return</span> <span class="key">True</span> </span><span class="r"></span></p>
|
||||||
<p id="t35" class="run"><span class="n"><a href="#t35">35</a></span><span class="t"> <span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">direction</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_compute_new_coordinates</span><span class="op">(</span><span class="nam">ch</span><span class="op">)</span> </span><span class="r"></span></p>
|
<p id="t35" class="pln"><span class="n"><a href="#t35">35</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t36" class="run"><span class="n"><a href="#t36">36</a></span><span class="t"> <span class="key">if</span> <span class="nam">obstacle</span> <span class="op">:=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">is_obstacle</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t36" class="run"><span class="n"><a href="#t36">36</a></span><span class="t"> <span class="key">def</span> <span class="nam">is_obstacle</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">int</span><span class="op">,</span> <span class="nam">y</span><span class="op">:</span> <span class="nam">int</span><span class="op">)</span> <span class="op">-></span> <span class="nam">bool</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t37" class="run"><span class="n"><a href="#t37">37</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">new_coordinates_output</span><span class="op">(</span><span class="nam">obstacle</span><span class="op">)</span> </span><span class="r"></span></p>
|
<p id="t37" class="run"><span class="n"><a href="#t37">37</a></span><span class="t"> <span class="key">return</span> <span class="op">[</span><span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">]</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">obstacles</span> </span><span class="r"></span></p>
|
||||||
<p id="t38" class="pln"><span class="n"><a href="#t38">38</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t38" class="pln"><span class="n"><a href="#t38">38</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t39" class="run"><span class="n"><a href="#t39">39</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">apply_new_coordinates</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">direction</span><span class="op">)</span> </span><span class="r"></span></p>
|
<p id="t39" class="run"><span class="n"><a href="#t39">39</a></span><span class="t"> <span class="key">def</span> <span class="nam">move</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">command</span><span class="op">:</span> <span class="nam">str</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t40" class="pln"><span class="n"><a href="#t40">40</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t40" class="run"><span class="n"><a href="#t40">40</a></span><span class="t"> <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">is_valid_command</span><span class="op">(</span><span class="nam">command</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t41" class="run"><span class="n"><a href="#t41">41</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">new_coordinates_output</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p>
|
<p id="t41" class="run"><span class="n"><a href="#t41">41</a></span><span class="t"> <span class="key">raise</span> <span class="nam">ValueError</span><span class="op">(</span><span class="str">"invalid command. The rover does not move"</span><span class="op">)</span> </span><span class="r"></span></p>
|
||||||
<p id="t42" class="pln"><span class="n"><a href="#t42">42</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t42" class="pln"><span class="n"><a href="#t42">42</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t43" class="run"><span class="n"><a href="#t43">43</a></span><span class="t"> <span class="key">def</span> <span class="nam">new_coordinates_output</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">obstacle</span><span class="op">:</span> <span class="nam">bool</span> <span class="op">=</span> <span class="key">False</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t43" class="run"><span class="n"><a href="#t43">43</a></span><span class="t"> <span class="key">for</span> <span class="nam">ch</span> <span class="key">in</span> <span class="nam">command</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t44" class="run"><span class="n"><a href="#t44">44</a></span><span class="t"> <span class="key">if</span> <span class="nam">obstacle</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t44" class="run"><span class="n"><a href="#t44">44</a></span><span class="t"> <span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">direction</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_compute_new_coordinates</span><span class="op">(</span><span class="nam">ch</span><span class="op">)</span> </span><span class="r"></span></p>
|
||||||
<p id="t45" class="run"><span class="n"><a href="#t45">45</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">x</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">y</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">,</span> <span class="str">"STOPPED"</span> </span><span class="r"></span></p>
|
<p id="t45" class="run"><span class="n"><a href="#t45">45</a></span><span class="t"> <span class="key">if</span> <span class="nam">obstacle</span> <span class="op">:=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">is_obstacle</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t46" class="run"><span class="n"><a href="#t46">46</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">x</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">y</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction</span> </span><span class="r"></span></p>
|
<p id="t46" class="run"><span class="n"><a href="#t46">46</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_new_coordinates_output</span><span class="op">(</span><span class="nam">obstacle</span><span class="op">)</span> </span><span class="r"></span></p>
|
||||||
<p id="t47" class="pln"><span class="n"><a href="#t47">47</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t47" class="pln"><span class="n"><a href="#t47">47</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t48" class="run"><span class="n"><a href="#t48">48</a></span><span class="t"> <span class="key">def</span> <span class="nam">_compute_new_coordinates</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">command</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t48" class="run"><span class="n"><a href="#t48">48</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">_apply_new_coordinates</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">direction</span><span class="op">)</span> </span><span class="r"></span></p>
|
||||||
<p id="t49" class="run"><span class="n"><a href="#t49">49</a></span><span class="t"> <span class="nam">x</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">x</span> </span><span class="r"></span></p>
|
<p id="t49" class="pln"><span class="n"><a href="#t49">49</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t50" class="run"><span class="n"><a href="#t50">50</a></span><span class="t"> <span class="nam">y</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">y</span> </span><span class="r"></span></p>
|
<p id="t50" class="run"><span class="n"><a href="#t50">50</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">_new_coordinates_output</span><span class="op">(</span><span class="op">)</span> </span><span class="r"></span></p>
|
||||||
<p id="t51" class="run"><span class="n"><a href="#t51">51</a></span><span class="t"> <span class="nam">direction</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction</span> </span><span class="r"></span></p>
|
<p id="t51" class="pln"><span class="n"><a href="#t51">51</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t52" class="pln"><span class="n"><a href="#t52">52</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t52" class="run"><span class="n"><a href="#t52">52</a></span><span class="t"> <span class="key">def</span> <span class="nam">_new_coordinates_output</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">obstacle</span><span class="op">:</span> <span class="nam">bool</span> <span class="op">=</span> <span class="key">False</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t53" class="run"><span class="n"><a href="#t53">53</a></span><span class="t"> <span class="key">if</span> <span class="nam">command</span> <span class="op">==</span> <span class="str">"B"</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t53" class="run"><span class="n"><a href="#t53">53</a></span><span class="t"> <span class="key">if</span> <span class="nam">obstacle</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t54" class="run"><span class="n"><a href="#t54">54</a></span><span class="t"> <span class="nam">x</span> <span class="op">-=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p>
|
<p id="t54" class="run"><span class="n"><a href="#t54">54</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">x</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">y</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">,</span> <span class="str">"STOPPED"</span> </span><span class="r"></span></p>
|
||||||
<p id="t55" class="run"><span class="n"><a href="#t55">55</a></span><span class="t"> <span class="nam">y</span> <span class="op">-=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> </span><span class="r"></span></p>
|
<p id="t55" class="run"><span class="n"><a href="#t55">55</a></span><span class="t"> <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">x</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">y</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction</span> </span><span class="r"></span></p>
|
||||||
<p id="t56" class="run"><span class="n"><a href="#t56">56</a></span><span class="t"> <span class="key">if</span> <span class="nam">command</span> <span class="op">==</span> <span class="str">"F"</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t56" class="pln"><span class="n"><a href="#t56">56</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t57" class="run"><span class="n"><a href="#t57">57</a></span><span class="t"> <span class="nam">x</span> <span class="op">+=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> </span><span class="r"></span></p>
|
<p id="t57" class="run"><span class="n"><a href="#t57">57</a></span><span class="t"> <span class="key">def</span> <span class="nam">_compute_new_coordinates</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">command</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Tuple</span><span class="op">[</span><span class="nam">int</span><span class="op">,</span> <span class="nam">int</span><span class="op">,</span> <span class="nam">str</span><span class="op">]</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t58" class="run"><span class="n"><a href="#t58">58</a></span><span class="t"> <span class="nam">y</span> <span class="op">+=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> </span><span class="r"></span></p>
|
<p id="t58" class="run"><span class="n"><a href="#t58">58</a></span><span class="t"> <span class="nam">x</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">x</span> </span><span class="r"></span></p>
|
||||||
<p id="t59" class="run"><span class="n"><a href="#t59">59</a></span><span class="t"> <span class="key">if</span> <span class="nam">command</span> <span class="op">==</span> <span class="str">"R"</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t59" class="run"><span class="n"><a href="#t59">59</a></span><span class="t"> <span class="nam">y</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">y</span> </span><span class="r"></span></p>
|
||||||
<p id="t60" class="run"><span class="n"><a href="#t60">60</a></span><span class="t"> <span class="nam">direction</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">[</span><span class="num">3</span><span class="op">]</span> </span><span class="r"></span></p>
|
<p id="t60" class="run"><span class="n"><a href="#t60">60</a></span><span class="t"> <span class="nam">direction</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction</span> </span><span class="r"></span></p>
|
||||||
<p id="t61" class="run"><span class="n"><a href="#t61">61</a></span><span class="t"> <span class="key">if</span> <span class="nam">command</span> <span class="op">==</span> <span class="str">"L"</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t61" class="pln"><span class="n"><a href="#t61">61</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
<p id="t62" class="run"><span class="n"><a href="#t62">62</a></span><span class="t"> <span class="nam">direction</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">[</span><span class="num">2</span><span class="op">]</span> </span><span class="r"></span></p>
|
<p id="t62" class="run"><span class="n"><a href="#t62">62</a></span><span class="t"> <span class="key">if</span> <span class="nam">command</span> <span class="op">==</span> <span class="str">"B"</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t63" class="pln"><span class="n"><a href="#t63">63</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t63" class="run"><span class="n"><a href="#t63">63</a></span><span class="t"> <span class="nam">x</span> <span class="op">-=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">.</span><span class="nam">x</span> </span><span class="r"></span></p>
|
||||||
<p id="t64" class="run"><span class="n"><a href="#t64">64</a></span><span class="t"> <span class="key">return</span> <span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">direction</span> </span><span class="r"></span></p>
|
<p id="t64" class="run"><span class="n"><a href="#t64">64</a></span><span class="t"> <span class="nam">y</span> <span class="op">-=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">.</span><span class="nam">y</span> </span><span class="r"></span></p>
|
||||||
<p id="t65" class="pln"><span class="n"><a href="#t65">65</a></span><span class="t"> </span><span class="r"></span></p>
|
<p id="t65" class="run"><span class="n"><a href="#t65">65</a></span><span class="t"> <span class="key">if</span> <span class="nam">command</span> <span class="op">==</span> <span class="str">"F"</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t66" class="run"><span class="n"><a href="#t66">66</a></span><span class="t"> <span class="key">def</span> <span class="nam">apply_new_coordinates</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">direction</span><span class="op">)</span><span class="op">:</span> </span><span class="r"></span></p>
|
<p id="t66" class="run"><span class="n"><a href="#t66">66</a></span><span class="t"> <span class="nam">x</span> <span class="op">+=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">.</span><span class="nam">x</span> </span><span class="r"></span></p>
|
||||||
<p id="t67" class="run"><span class="n"><a href="#t67">67</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">x</span> <span class="op">=</span> <span class="nam">x</span> </span><span class="r"></span></p>
|
<p id="t67" class="run"><span class="n"><a href="#t67">67</a></span><span class="t"> <span class="nam">y</span> <span class="op">+=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">.</span><span class="nam">y</span> </span><span class="r"></span></p>
|
||||||
<p id="t68" class="run"><span class="n"><a href="#t68">68</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">y</span> <span class="op">=</span> <span class="nam">y</span> </span><span class="r"></span></p>
|
<p id="t68" class="run"><span class="n"><a href="#t68">68</a></span><span class="t"> <span class="key">if</span> <span class="nam">command</span> <span class="op">==</span> <span class="str">"R"</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
<p id="t69" class="run"><span class="n"><a href="#t69">69</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">direction</span> <span class="op">=</span> <span class="nam">direction</span> </span><span class="r"></span></p>
|
<p id="t69" class="run"><span class="n"><a href="#t69">69</a></span><span class="t"> <span class="nam">direction</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">.</span><span class="nam">right</span> </span><span class="r"></span></p>
|
||||||
|
<p id="t70" class="run"><span class="n"><a href="#t70">70</a></span><span class="t"> <span class="key">if</span> <span class="nam">command</span> <span class="op">==</span> <span class="str">"L"</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
|
<p id="t71" class="run"><span class="n"><a href="#t71">71</a></span><span class="t"> <span class="nam">direction</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">direction_map</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">direction</span><span class="op">]</span><span class="op">.</span><span class="nam">left</span> </span><span class="r"></span></p>
|
||||||
|
<p id="t72" class="pln"><span class="n"><a href="#t72">72</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
|
<p id="t73" class="run"><span class="n"><a href="#t73">73</a></span><span class="t"> <span class="key">return</span> <span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">direction</span> </span><span class="r"></span></p>
|
||||||
|
<p id="t74" class="pln"><span class="n"><a href="#t74">74</a></span><span class="t"> </span><span class="r"></span></p>
|
||||||
|
<p id="t75" class="run"><span class="n"><a href="#t75">75</a></span><span class="t"> <span class="key">def</span> <span class="nam">_apply_new_coordinates</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">direction</span><span class="op">)</span> <span class="op">-></span> <span class="key">None</span><span class="op">:</span> </span><span class="r"></span></p>
|
||||||
|
<p id="t76" class="run"><span class="n"><a href="#t76">76</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">x</span> <span class="op">=</span> <span class="nam">x</span> </span><span class="r"></span></p>
|
||||||
|
<p id="t77" class="run"><span class="n"><a href="#t77">77</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">y</span> <span class="op">=</span> <span class="nam">y</span> </span><span class="r"></span></p>
|
||||||
|
<p id="t78" class="run"><span class="n"><a href="#t78">78</a></span><span class="t"> <span class="nam">self</span><span class="op">.</span><span class="nam">direction</span> <span class="op">=</span> <span class="nam">direction</span> </span><span class="r"></span></p>
|
||||||
</div>
|
</div>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<p>
|
<p>
|
||||||
<a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.0b1">coverage.py v6.0b1</a>,
|
<a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.0b1">coverage.py v6.0b1</a>,
|
||||||
created at 2021-08-27 11:41 +0200
|
created at 2021-08-27 15:09 +0200
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -53,10 +53,10 @@
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr class="total">
|
<tr class="total">
|
||||||
<td class="name left">Total</td>
|
<td class="name left">Total</td>
|
||||||
<td>76</td>
|
<td>83</td>
|
||||||
<td>0</td>
|
<td>0</td>
|
||||||
<td>0</td>
|
<td>0</td>
|
||||||
<td class="right" data-ratio="76 76">100%</td>
|
<td class="right" data-ratio="83 83">100%</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
@ -69,10 +69,10 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="file">
|
<tr class="file">
|
||||||
<td class="name left"><a href="d_bf1a7b34124815c2_rover_py.html">rover/rover.py</a></td>
|
<td class="name left"><a href="d_bf1a7b34124815c2_rover_py.html">rover/rover.py</a></td>
|
||||||
<td>48</td>
|
<td>55</td>
|
||||||
<td>0</td>
|
<td>0</td>
|
||||||
<td>0</td>
|
<td>0</td>
|
||||||
<td class="right" data-ratio="48 48">100%</td>
|
<td class="right" data-ratio="55 55">100%</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="file">
|
<tr class="file">
|
||||||
<td class="name left"><a href="d_a44f0ac069e85531___init___py.html">tests/__init__.py</a></td>
|
<td class="name left"><a href="d_a44f0ac069e85531___init___py.html">tests/__init__.py</a></td>
|
||||||
|
|
@ -105,7 +105,7 @@
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<p>
|
<p>
|
||||||
<a class="nav" href="https://coverage.readthedocs.io/en/6.0b1">coverage.py v6.0b1</a>,
|
<a class="nav" href="https://coverage.readthedocs.io/en/6.0b1">coverage.py v6.0b1</a>,
|
||||||
created at 2021-08-27 11:47 +0200
|
created at 2021-08-27 15:09 +0200
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
{"format":2,"version":"6.0b1","globals":"9bd57ebde26eb2f4bf8646481dbf1d3b","files":{"d_bf1a7b34124815c2___init___py":{"hash":"3c77fc9ef7f887ac2508d4109cf92472","index":{"nums":[0,1,0,0,0,0,0,0],"html_filename":"d_bf1a7b34124815c2___init___py.html","relative_filename":"rover/__init__.py"}},"d_a44f0ac069e85531___init___py":{"hash":"3c77fc9ef7f887ac2508d4109cf92472","index":{"nums":[0,1,0,0,0,0,0,0],"html_filename":"d_a44f0ac069e85531___init___py.html","relative_filename":"tests/__init__.py"}},"d_a44f0ac069e85531_test_rover_py":{"hash":"56847e16289e9409f1589e7acd9df071","index":{"nums":[0,1,23,0,0,0,0,0],"html_filename":"d_a44f0ac069e85531_test_rover_py.html","relative_filename":"tests/test_rover.py"}},"d_bf1a7b34124815c2_rover_py":{"hash":"d446e537c9a216d7ef2cb3482a0b83a6","index":{"nums":[0,1,48,0,0,0,0,0],"html_filename":"d_bf1a7b34124815c2_rover_py.html","relative_filename":"rover/rover.py"}},"d_a44f0ac069e85531_conftest_py":{"hash":"131dc5829333225ffeda75380140e18e","index":{"nums":[0,1,5,0,0,0,0,0],"html_filename":"d_a44f0ac069e85531_conftest_py.html","relative_filename":"tests/conftest.py"}}}}
|
{"format":2,"version":"6.0b1","globals":"9bd57ebde26eb2f4bf8646481dbf1d3b","files":{"d_bf1a7b34124815c2___init___py":{"hash":"3c77fc9ef7f887ac2508d4109cf92472","index":{"nums":[0,1,0,0,0,0,0,0],"html_filename":"d_bf1a7b34124815c2___init___py.html","relative_filename":"rover/__init__.py"}},"d_a44f0ac069e85531___init___py":{"hash":"3c77fc9ef7f887ac2508d4109cf92472","index":{"nums":[0,1,0,0,0,0,0,0],"html_filename":"d_a44f0ac069e85531___init___py.html","relative_filename":"tests/__init__.py"}},"d_a44f0ac069e85531_test_rover_py":{"hash":"56847e16289e9409f1589e7acd9df071","index":{"nums":[0,1,23,0,0,0,0,0],"html_filename":"d_a44f0ac069e85531_test_rover_py.html","relative_filename":"tests/test_rover.py"}},"d_bf1a7b34124815c2_rover_py":{"hash":"8c147885437640f233a8415d41aa413a","index":{"nums":[0,1,55,0,0,0,0,0],"html_filename":"d_bf1a7b34124815c2_rover_py.html","relative_filename":"rover/rover.py"}},"d_a44f0ac069e85531_conftest_py":{"hash":"131dc5829333225ffeda75380140e18e","index":{"nums":[0,1,5,0,0,0,0,0],"html_filename":"d_a44f0ac069e85531_conftest_py.html","relative_filename":"tests/conftest.py"}}}}
|
||||||
|
|
@ -1,30 +1,39 @@
|
||||||
import dataclasses
|
from dataclasses import dataclass, field
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
|
|
||||||
@dataclasses.dataclass
|
@dataclass(frozen=True)
|
||||||
|
class Coordinates:
|
||||||
|
x: int
|
||||||
|
y: int
|
||||||
|
left: str
|
||||||
|
right: str
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
class Rover:
|
class Rover:
|
||||||
x: int
|
x: int
|
||||||
y: int
|
y: int
|
||||||
direction: str
|
direction: str
|
||||||
obstacles: list[list[int]] = dataclasses.field(default_factory=list)
|
obstacles: list[list[int]] = field(default_factory=list)
|
||||||
|
|
||||||
valid_commands = ("F", "B", "R", "L")
|
valid_commands = ("F", "B", "R", "L")
|
||||||
|
|
||||||
direction_map = {
|
direction_map = {
|
||||||
"NORTH": (0, 1, "WEST", "EAST"),
|
"NORTH": Coordinates(0, 1, "WEST", "EAST"),
|
||||||
"EAST": (1, 0, "NORTH", "SOUTH"),
|
"EAST": Coordinates(1, 0, "NORTH", "SOUTH"),
|
||||||
"SOUTH": (0, -1, "EAST", "WEST"),
|
"SOUTH": Coordinates(0, -1, "EAST", "WEST"),
|
||||||
"WEST": (-1, 0, "SOUTH", "NORTH"),
|
"WEST": Coordinates(-1, 0, "SOUTH", "NORTH"),
|
||||||
}
|
}
|
||||||
|
|
||||||
def is_valid_command(self, command):
|
def is_valid_command(self, command: str) -> bool:
|
||||||
for ch in command:
|
for ch in command:
|
||||||
if ch not in self.valid_commands:
|
if ch not in self.valid_commands:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def is_obstacle(self, x: int, y: int):
|
def is_obstacle(self, x: int, y: int) -> bool:
|
||||||
return [x, y] in self.obstacles
|
return [x, y] in self.obstacles
|
||||||
|
|
||||||
def move(self, command: str):
|
def move(self, command: str):
|
||||||
|
|
@ -34,36 +43,36 @@ class Rover:
|
||||||
for ch in command:
|
for ch in command:
|
||||||
x, y, direction = self._compute_new_coordinates(ch)
|
x, y, direction = self._compute_new_coordinates(ch)
|
||||||
if obstacle := self.is_obstacle(x, y):
|
if obstacle := self.is_obstacle(x, y):
|
||||||
return self.new_coordinates_output(obstacle)
|
return self._new_coordinates_output(obstacle)
|
||||||
|
|
||||||
self.apply_new_coordinates(x, y, direction)
|
self._apply_new_coordinates(x, y, direction)
|
||||||
|
|
||||||
return self.new_coordinates_output()
|
return self._new_coordinates_output()
|
||||||
|
|
||||||
def new_coordinates_output(self, obstacle: bool = False):
|
def _new_coordinates_output(self, obstacle: bool = False):
|
||||||
if obstacle:
|
if obstacle:
|
||||||
return self.x, self.y, self.direction, "STOPPED"
|
return self.x, self.y, self.direction, "STOPPED"
|
||||||
return self.x, self.y, self.direction
|
return self.x, self.y, self.direction
|
||||||
|
|
||||||
def _compute_new_coordinates(self, command):
|
def _compute_new_coordinates(self, command: str) -> Tuple[int, int, str]:
|
||||||
x = self.x
|
x = self.x
|
||||||
y = self.y
|
y = self.y
|
||||||
direction = self.direction
|
direction = self.direction
|
||||||
|
|
||||||
if command == "B":
|
if command == "B":
|
||||||
x -= self.direction_map[self.direction][0]
|
x -= self.direction_map[self.direction].x
|
||||||
y -= self.direction_map[self.direction][1]
|
y -= self.direction_map[self.direction].y
|
||||||
if command == "F":
|
if command == "F":
|
||||||
x += self.direction_map[self.direction][0]
|
x += self.direction_map[self.direction].x
|
||||||
y += self.direction_map[self.direction][1]
|
y += self.direction_map[self.direction].y
|
||||||
if command == "R":
|
if command == "R":
|
||||||
direction = self.direction_map[self.direction][3]
|
direction = self.direction_map[self.direction].right
|
||||||
if command == "L":
|
if command == "L":
|
||||||
direction = self.direction_map[self.direction][2]
|
direction = self.direction_map[self.direction].left
|
||||||
|
|
||||||
return x, y, direction
|
return x, y, direction
|
||||||
|
|
||||||
def apply_new_coordinates(self, x, y, direction):
|
def _apply_new_coordinates(self, x: int, y: int, direction: str) -> None:
|
||||||
self.x = x
|
self.x = x
|
||||||
self.y = y
|
self.y = y
|
||||||
self.direction = direction
|
self.direction = direction
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue