Browse Source

Modified Library, added more tests, added report

Ivan Arkhipov 6 years ago
parent
commit
7414ca9741
4 changed files with 726 additions and 9 deletions
  1. 2 9
      GameOfLifeLibrary.py
  2. 16 0
      GameOfLifeLibrary_test.py
  3. 333 0
      coverage_report/index.html
  4. 375 0
      coverage_report/style.css

+ 2 - 9
GameOfLifeLibrary.py

@@ -6,7 +6,6 @@ class GameOfLife:
         self.sizex = sizex
         self.sizey = sizey
         self.cells = [[NoUnit(i, j) for j in range(sizey)] for i in range(sizex)]
-        # print(self.cells)
 
     def parse_field(self, field):
         assert len(field) == self.sizex
@@ -87,10 +86,10 @@ class Unit:
         return False
 
     def __str__(self):
-        return self.type + '(' + str(self.posx) + ',' + str(self.posy) + ')'
+        return self.type + '(' + str(self.posx) + ', ' + str(self.posy) + ')'
 
     def __repr__(self):
-        return self.type + '(' + str(self.posx) + ',' + str(self.posy) + ')'
+        return self.type + '(' + str(self.posx) + ', ' + str(self.posy) + ')'
 
     def __eq__(self, other):
         return self.type == other.type and self.posx == other.posx and self.posy == other.posy
@@ -119,12 +118,6 @@ class FishUnit(Unit):
         ns_num = sum(1 if neighbour.type == 'FishUnit' else 0 for neighbour in neighbours)
         return ns_num < 2 or ns_num >= 4
 
-    def __cmp__(self, other):
-        if self.type == other.type and self.posx == other.posx and self.posy == other.posy:
-            return 0
-        else:
-            return 1
-
 
 class ShrimpUnit(Unit):
     def __init__(self, posx, posy):

+ 16 - 0
GameOfLifeLibrary_test.py

@@ -78,12 +78,24 @@ class ShrimpTestCase(unittest.TestCase):
 
 
 class GameOfLifeClassTestCase(unittest.TestCase):
+    def test_str(self):
+        unit = Unit(4, 4)
+        self.assertEqual(unit.__str__(), 'Unit(4, 4)')
+        self.assertEqual(unit.__repr__(), 'Unit(4, 4)')
+        self.assertEqual(unit, Unit(4, 4))
+        self.assertNotEqual(unit, ShrimpUnit(4, 4))
+        self.assertNotEqual(unit, RockUnit(4, 4))
+        self.assertNotEqual(unit, Unit(2, 4))
+        self.assertNotEqual(unit, NoUnit(4, 4))
+
     def test_init_1(self):
         game = GameOfLife(3, 3)
         game.parse_field(['nfr', 'fff', 'sfs'])
         result = [[NoUnit(0, 0), FishUnit(0, 1), RockUnit(0, 2)],
                   [FishUnit(1, 0), FishUnit(1, 1), FishUnit(1, 2)],
                   [ShrimpUnit(2, 0), FishUnit(2, 1), ShrimpUnit(2, 2)]]
+        self.assertEqual(game.sizex, 3)
+        self.assertEqual(game.sizey, 3)
         self.assertListEqual(game.cells, result)
 
     def test_init_2(self):
@@ -92,6 +104,8 @@ class GameOfLifeClassTestCase(unittest.TestCase):
         result = [[NoUnit(0, 0), FishUnit(0, 1), RockUnit(0, 2), RockUnit(0, 3)],
                   [FishUnit(1, 0), FishUnit(1, 1), FishUnit(1, 2), RockUnit(1, 3)],
                   [ShrimpUnit(2, 0), FishUnit(2, 1), ShrimpUnit(2, 2), RockUnit(2, 3)]]
+        self.assertEqual(game.sizex, 3)
+        self.assertEqual(game.sizey, 4)
         self.assertListEqual(game.cells, result)
 
     def test_init_3(self):
@@ -101,6 +115,8 @@ class GameOfLifeClassTestCase(unittest.TestCase):
                   [FishUnit(1, 0), FishUnit(1, 1), FishUnit(1, 2)],
                   [ShrimpUnit(2, 0), FishUnit(2, 1), ShrimpUnit(2, 2)],
                   [ShrimpUnit(3, 0), ShrimpUnit(3, 1), FishUnit(3, 2)]]
+        self.assertEqual(game.sizex, 4)
+        self.assertEqual(game.sizey, 3)
         self.assertListEqual(game.cells, result)
 
     def test_iterate_1(self):

+ 333 - 0
coverage_report/index.html

@@ -0,0 +1,333 @@
+
+
+
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    
+    
+    <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" />
+    <title>Coverage for GameOfLifeLibrary.py: 94%</title>
+    <link rel="stylesheet" href="style.css" type="text/css">
+
+</head>
+<body class="pyfile">
+
+<div id="header">
+    <div class="content">
+        <h1>Coverage for <b>GameOfLifeLibrary.py</b> :
+            <span class="pc_cov">94%</span>
+        </h1>
+
+        <h2 class="stats">
+            90 statements &nbsp;
+            <span class="run hide_run shortkey_r button_toggle_run">85 run</span>
+            <span class="mis shortkey_m button_toggle_mis">5 missing</span>
+            <span class="exc shortkey_x button_toggle_exc">0 excluded</span>
+
+            
+        </h2>
+    </div>
+</div>
+
+<div id="source">
+    <table>
+        <tr>
+            <td class="linenos">
+<p id="n1" class="stm run hide_run"><a href="#n1">1</a></p>
+<p id="n2" class="stm run hide_run"><a href="#n2">2</a></p>
+<p id="n3" class="stm run hide_run"><a href="#n3">3</a></p>
+<p id="n4" class="stm run hide_run"><a href="#n4">4</a></p>
+<p id="n5" class="pln"><a href="#n5">5</a></p>
+<p id="n6" class="stm run hide_run"><a href="#n6">6</a></p>
+<p id="n7" class="stm run hide_run"><a href="#n7">7</a></p>
+<p id="n8" class="stm run hide_run"><a href="#n8">8</a></p>
+<p id="n9" class="pln"><a href="#n9">9</a></p>
+<p id="n10" class="stm run hide_run"><a href="#n10">10</a></p>
+<p id="n11" class="stm run hide_run"><a href="#n11">11</a></p>
+<p id="n12" class="pln"><a href="#n12">12</a></p>
+<p id="n13" class="stm run hide_run"><a href="#n13">13</a></p>
+<p id="n14" class="stm run hide_run"><a href="#n14">14</a></p>
+<p id="n15" class="stm run hide_run"><a href="#n15">15</a></p>
+<p id="n16" class="stm run hide_run"><a href="#n16">16</a></p>
+<p id="n17" class="stm run hide_run"><a href="#n17">17</a></p>
+<p id="n18" class="stm run hide_run"><a href="#n18">18</a></p>
+<p id="n19" class="stm run hide_run"><a href="#n19">19</a></p>
+<p id="n20" class="stm run hide_run"><a href="#n20">20</a></p>
+<p id="n21" class="stm run hide_run"><a href="#n21">21</a></p>
+<p id="n22" class="stm run hide_run"><a href="#n22">22</a></p>
+<p id="n23" class="stm run hide_run"><a href="#n23">23</a></p>
+<p id="n24" class="stm run hide_run"><a href="#n24">24</a></p>
+<p id="n25" class="stm run hide_run"><a href="#n25">25</a></p>
+<p id="n26" class="pln"><a href="#n26">26</a></p>
+<p id="n27" class="stm run hide_run"><a href="#n27">27</a></p>
+<p id="n28" class="stm mis"><a href="#n28">28</a></p>
+<p id="n29" class="pln"><a href="#n29">29</a></p>
+<p id="n30" class="pln"><a href="#n30">30</a></p>
+<p id="n31" class="pln"><a href="#n31">31</a></p>
+<p id="n32" class="pln"><a href="#n32">32</a></p>
+<p id="n33" class="pln"><a href="#n33">33</a></p>
+<p id="n34" class="stm mis"><a href="#n34">34</a></p>
+<p id="n35" class="stm mis"><a href="#n35">35</a></p>
+<p id="n36" class="stm mis"><a href="#n36">36</a></p>
+<p id="n37" class="stm mis"><a href="#n37">37</a></p>
+<p id="n38" class="pln"><a href="#n38">38</a></p>
+<p id="n39" class="stm run hide_run"><a href="#n39">39</a></p>
+<p id="n40" class="stm run hide_run"><a href="#n40">40</a></p>
+<p id="n41" class="pln"><a href="#n41">41</a></p>
+<p id="n42" class="stm run hide_run"><a href="#n42">42</a></p>
+<p id="n43" class="stm run hide_run"><a href="#n43">43</a></p>
+<p id="n44" class="pln"><a href="#n44">44</a></p>
+<p id="n45" class="stm run hide_run"><a href="#n45">45</a></p>
+<p id="n46" class="pln"><a href="#n46">46</a></p>
+<p id="n47" class="pln"><a href="#n47">47</a></p>
+<p id="n48" class="pln"><a href="#n48">48</a></p>
+<p id="n49" class="pln"><a href="#n49">49</a></p>
+<p id="n50" class="pln"><a href="#n50">50</a></p>
+<p id="n51" class="pln"><a href="#n51">51</a></p>
+<p id="n52" class="pln"><a href="#n52">52</a></p>
+<p id="n53" class="pln"><a href="#n53">53</a></p>
+<p id="n54" class="pln"><a href="#n54">54</a></p>
+<p id="n55" class="pln"><a href="#n55">55</a></p>
+<p id="n56" class="stm run hide_run"><a href="#n56">56</a></p>
+<p id="n57" class="stm run hide_run"><a href="#n57">57</a></p>
+<p id="n58" class="stm run hide_run"><a href="#n58">58</a></p>
+<p id="n59" class="pln"><a href="#n59">59</a></p>
+<p id="n60" class="pln"><a href="#n60">60</a></p>
+<p id="n61" class="pln"><a href="#n61">61</a></p>
+<p id="n62" class="pln"><a href="#n62">62</a></p>
+<p id="n63" class="stm run hide_run"><a href="#n63">63</a></p>
+<p id="n64" class="stm run hide_run"><a href="#n64">64</a></p>
+<p id="n65" class="pln"><a href="#n65">65</a></p>
+<p id="n66" class="stm run hide_run"><a href="#n66">66</a></p>
+<p id="n67" class="stm run hide_run"><a href="#n67">67</a></p>
+<p id="n68" class="stm run hide_run"><a href="#n68">68</a></p>
+<p id="n69" class="stm run hide_run"><a href="#n69">69</a></p>
+<p id="n70" class="pln"><a href="#n70">70</a></p>
+<p id="n71" class="stm run hide_run"><a href="#n71">71</a></p>
+<p id="n72" class="pln"><a href="#n72">72</a></p>
+<p id="n73" class="stm run hide_run"><a href="#n73">73</a></p>
+<p id="n74" class="stm run hide_run"><a href="#n74">74</a></p>
+<p id="n75" class="stm run hide_run"><a href="#n75">75</a></p>
+<p id="n76" class="stm run hide_run"><a href="#n76">76</a></p>
+<p id="n77" class="stm run hide_run"><a href="#n77">77</a></p>
+<p id="n78" class="pln"><a href="#n78">78</a></p>
+<p id="n79" class="stm run hide_run"><a href="#n79">79</a></p>
+<p id="n80" class="stm run hide_run"><a href="#n80">80</a></p>
+<p id="n81" class="pln"><a href="#n81">81</a></p>
+<p id="n82" class="stm run hide_run"><a href="#n82">82</a></p>
+<p id="n83" class="stm run hide_run"><a href="#n83">83</a></p>
+<p id="n84" class="pln"><a href="#n84">84</a></p>
+<p id="n85" class="stm run hide_run"><a href="#n85">85</a></p>
+<p id="n86" class="stm run hide_run"><a href="#n86">86</a></p>
+<p id="n87" class="pln"><a href="#n87">87</a></p>
+<p id="n88" class="stm run hide_run"><a href="#n88">88</a></p>
+<p id="n89" class="stm run hide_run"><a href="#n89">89</a></p>
+<p id="n90" class="pln"><a href="#n90">90</a></p>
+<p id="n91" class="stm run hide_run"><a href="#n91">91</a></p>
+<p id="n92" class="stm run hide_run"><a href="#n92">92</a></p>
+<p id="n93" class="pln"><a href="#n93">93</a></p>
+<p id="n94" class="stm run hide_run"><a href="#n94">94</a></p>
+<p id="n95" class="stm run hide_run"><a href="#n95">95</a></p>
+<p id="n96" class="pln"><a href="#n96">96</a></p>
+<p id="n97" class="pln"><a href="#n97">97</a></p>
+<p id="n98" class="stm run hide_run"><a href="#n98">98</a></p>
+<p id="n99" class="stm run hide_run"><a href="#n99">99</a></p>
+<p id="n100" class="stm run hide_run"><a href="#n100">100</a></p>
+<p id="n101" class="stm run hide_run"><a href="#n101">101</a></p>
+<p id="n102" class="pln"><a href="#n102">102</a></p>
+<p id="n103" class="stm run hide_run"><a href="#n103">103</a></p>
+<p id="n104" class="stm run hide_run"><a href="#n104">104</a></p>
+<p id="n105" class="stm run hide_run"><a href="#n105">105</a></p>
+<p id="n106" class="pln"><a href="#n106">106</a></p>
+<p id="n107" class="stm run hide_run"><a href="#n107">107</a></p>
+<p id="n108" class="stm run hide_run"><a href="#n108">108</a></p>
+<p id="n109" class="stm run hide_run"><a href="#n109">109</a></p>
+<p id="n110" class="pln"><a href="#n110">110</a></p>
+<p id="n111" class="pln"><a href="#n111">111</a></p>
+<p id="n112" class="stm run hide_run"><a href="#n112">112</a></p>
+<p id="n113" class="stm run hide_run"><a href="#n113">113</a></p>
+<p id="n114" class="stm run hide_run"><a href="#n114">114</a></p>
+<p id="n115" class="stm run hide_run"><a href="#n115">115</a></p>
+<p id="n116" class="pln"><a href="#n116">116</a></p>
+<p id="n117" class="stm run hide_run"><a href="#n117">117</a></p>
+<p id="n118" class="stm run hide_run"><a href="#n118">118</a></p>
+<p id="n119" class="stm run hide_run"><a href="#n119">119</a></p>
+<p id="n120" class="pln"><a href="#n120">120</a></p>
+<p id="n121" class="pln"><a href="#n121">121</a></p>
+<p id="n122" class="stm run hide_run"><a href="#n122">122</a></p>
+<p id="n123" class="stm run hide_run"><a href="#n123">123</a></p>
+<p id="n124" class="stm run hide_run"><a href="#n124">124</a></p>
+<p id="n125" class="stm run hide_run"><a href="#n125">125</a></p>
+<p id="n126" class="pln"><a href="#n126">126</a></p>
+<p id="n127" class="stm run hide_run"><a href="#n127">127</a></p>
+<p id="n128" class="stm run hide_run"><a href="#n128">128</a></p>
+<p id="n129" class="stm run hide_run"><a href="#n129">129</a></p>
+<p id="n130" class="pln"><a href="#n130">130</a></p>
+<p id="n131" class="pln"><a href="#n131">131</a></p>
+<p id="n132" class="stm run hide_run"><a href="#n132">132</a></p>
+<p id="n133" class="stm run hide_run"><a href="#n133">133</a></p>
+<p id="n134" class="stm run hide_run"><a href="#n134">134</a></p>
+<p id="n135" class="stm run hide_run"><a href="#n135">135</a></p>
+<p id="n136" class="pln"><a href="#n136">136</a></p>
+<p id="n137" class="stm run hide_run"><a href="#n137">137</a></p>
+<p id="n138" class="stm run hide_run"><a href="#n138">138</a></p>
+
+            </td>
+            <td class="text">
+<p id="t1" class="stm run hide_run"><span class="key">class</span> <span class="nam">GameOfLife</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t2" class="stm run hide_run">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">sizex</span><span class="op">,</span> <span class="nam">sizey</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t3" class="stm run hide_run">        <span class="key">assert</span> <span class="nam">sizex</span> <span class="op">></span> <span class="num">0</span><span class="strut">&nbsp;</span></p>
+<p id="t4" class="stm run hide_run">        <span class="key">assert</span> <span class="nam">sizey</span> <span class="op">></span> <span class="num">0</span><span class="strut">&nbsp;</span></p>
+<p id="t5" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t6" class="stm run hide_run">        <span class="nam">self</span><span class="op">.</span><span class="nam">sizex</span> <span class="op">=</span> <span class="nam">sizex</span><span class="strut">&nbsp;</span></p>
+<p id="t7" class="stm run hide_run">        <span class="nam">self</span><span class="op">.</span><span class="nam">sizey</span> <span class="op">=</span> <span class="nam">sizey</span><span class="strut">&nbsp;</span></p>
+<p id="t8" class="stm run hide_run">        <span class="nam">self</span><span class="op">.</span><span class="nam">cells</span> <span class="op">=</span> <span class="op">[</span><span class="op">[</span><span class="nam">NoUnit</span><span class="op">(</span><span class="nam">i</span><span class="op">,</span> <span class="nam">j</span><span class="op">)</span> <span class="key">for</span> <span class="nam">j</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">sizey</span><span class="op">)</span><span class="op">]</span> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">sizex</span><span class="op">)</span><span class="op">]</span><span class="strut">&nbsp;</span></p>
+<p id="t9" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t10" class="stm run hide_run">    <span class="key">def</span> <span class="nam">parse_field</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">field</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t11" class="stm run hide_run">        <span class="key">assert</span> <span class="nam">len</span><span class="op">(</span><span class="nam">field</span><span class="op">)</span> <span class="op">==</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sizex</span><span class="strut">&nbsp;</span></p>
+<p id="t12" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t13" class="stm run hide_run">        <span class="nam">x</span> <span class="op">=</span> <span class="num">0</span><span class="strut">&nbsp;</span></p>
+<p id="t14" class="stm run hide_run">        <span class="key">for</span> <span class="nam">line</span> <span class="key">in</span> <span class="nam">field</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t15" class="stm run hide_run">            <span class="nam">y</span> <span class="op">=</span> <span class="num">0</span><span class="strut">&nbsp;</span></p>
+<p id="t16" class="stm run hide_run">            <span class="key">assert</span> <span class="nam">len</span><span class="op">(</span><span class="nam">line</span><span class="op">)</span> <span class="op">==</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sizey</span><span class="strut">&nbsp;</span></p>
+<p id="t17" class="stm run hide_run">            <span class="key">for</span> <span class="nam">char</span> <span class="key">in</span> <span class="nam">line</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t18" class="stm run hide_run">                <span class="key">if</span> <span class="nam">char</span> <span class="op">==</span> <span class="str">'f'</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t19" class="stm run hide_run">                    <span class="nam">self</span><span class="op">.</span><span class="nam">cells</span><span class="op">[</span><span class="nam">x</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span><span class="op">]</span> <span class="op">=</span> <span class="nam">FishUnit</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="strut">&nbsp;</span></p>
+<p id="t20" class="stm run hide_run">                <span class="key">if</span> <span class="nam">char</span> <span class="op">==</span> <span class="str">'s'</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t21" class="stm run hide_run">                    <span class="nam">self</span><span class="op">.</span><span class="nam">cells</span><span class="op">[</span><span class="nam">x</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span><span class="op">]</span> <span class="op">=</span> <span class="nam">ShrimpUnit</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="strut">&nbsp;</span></p>
+<p id="t22" class="stm run hide_run">                <span class="key">if</span> <span class="nam">char</span> <span class="op">==</span> <span class="str">'r'</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t23" class="stm run hide_run">                    <span class="nam">self</span><span class="op">.</span><span class="nam">cells</span><span class="op">[</span><span class="nam">x</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span><span class="op">]</span> <span class="op">=</span> <span class="nam">RockUnit</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="strut">&nbsp;</span></p>
+<p id="t24" class="stm run hide_run">                <span class="nam">y</span> <span class="op">+=</span> <span class="num">1</span><span class="strut">&nbsp;</span></p>
+<p id="t25" class="stm run hide_run">            <span class="nam">x</span> <span class="op">+=</span> <span class="num">1</span><span class="strut">&nbsp;</span></p>
+<p id="t26" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t27" class="stm run hide_run">    <span class="key">def</span> <span class="nam">print_field</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t28" class="stm mis">        <span class="nam">dict</span> <span class="op">=</span> <span class="op">{</span><span class="strut">&nbsp;</span></p>
+<p id="t29" class="pln">            <span class="str">'NoUnit'</span><span class="op">:</span> <span class="str">'n'</span><span class="op">,</span><span class="strut">&nbsp;</span></p>
+<p id="t30" class="pln">            <span class="str">'RockUnit'</span><span class="op">:</span> <span class="str">'r'</span><span class="op">,</span><span class="strut">&nbsp;</span></p>
+<p id="t31" class="pln">            <span class="str">'ShrimpUnit'</span><span class="op">:</span> <span class="str">'s'</span><span class="op">,</span><span class="strut">&nbsp;</span></p>
+<p id="t32" class="pln">            <span class="str">'FishUnit'</span><span class="op">:</span> <span class="str">'f'</span><span class="strut">&nbsp;</span></p>
+<p id="t33" class="pln">        <span class="op">}</span><span class="strut">&nbsp;</span></p>
+<p id="t34" class="stm mis">        <span class="key">for</span> <span class="nam">x</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">sizex</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t35" class="stm mis">            <span class="key">for</span> <span class="nam">y</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">sizey</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t36" class="stm mis">                <span class="nam">print</span><span class="op">(</span><span class="nam">dict</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">cells</span><span class="op">[</span><span class="nam">x</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span><span class="op">]</span><span class="op">.</span><span class="nam">type</span><span class="op">]</span><span class="op">,</span> <span class="nam">sep</span><span class="op">=</span><span class="str">''</span><span class="op">,</span> <span class="nam">end</span><span class="op">=</span><span class="str">''</span><span class="op">)</span><span class="strut">&nbsp;</span></p>
+<p id="t37" class="stm mis">            <span class="nam">print</span><span class="op">(</span><span class="op">)</span><span class="strut">&nbsp;</span></p>
+<p id="t38" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t39" class="stm run hide_run">    <span class="key">def</span> <span class="nam">correct_coors</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="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t40" class="stm run hide_run">        <span class="key">return</span> <span class="num">0</span> <span class="op">&lt;=</span> <span class="nam">x</span> <span class="op">&lt;</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sizex</span> <span class="key">and</span> <span class="num">0</span> <span class="op">&lt;=</span> <span class="nam">y</span> <span class="op">&lt;</span> <span class="nam">self</span><span class="op">.</span><span class="nam">sizey</span><span class="strut">&nbsp;</span></p>
+<p id="t41" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t42" class="stm run hide_run">    <span class="key">def</span> <span class="nam">iterate</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t43" class="stm run hide_run">        <span class="nam">new_cells</span> <span class="op">=</span> <span class="op">[</span><span class="op">[</span><span class="nam">NoUnit</span><span class="op">(</span><span class="nam">i</span><span class="op">,</span> <span class="nam">j</span><span class="op">)</span> <span class="key">for</span> <span class="nam">j</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">sizey</span><span class="op">)</span><span class="op">]</span> <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">sizex</span><span class="op">)</span><span class="op">]</span><span class="strut">&nbsp;</span></p>
+<p id="t44" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t45" class="stm run hide_run">        <span class="nam">neighbour_diffs</span> <span class="op">=</span> <span class="op">[</span><span class="strut">&nbsp;</span></p>
+<p id="t46" class="pln">            <span class="op">[</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">]</span><span class="op">,</span><span class="strut">&nbsp;</span></p>
+<p id="t47" class="pln">            <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="op">,</span><span class="strut">&nbsp;</span></p>
+<p id="t48" class="pln">            <span class="op">[</span><span class="num">1</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">]</span><span class="op">,</span><span class="strut">&nbsp;</span></p>
+<p id="t49" class="pln">            <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="op">,</span><span class="strut">&nbsp;</span></p>
+<p id="t50" class="pln">            <span class="op">[</span><span class="num">1</span><span class="op">,</span> <span class="num">0</span><span class="op">]</span><span class="op">,</span><span class="strut">&nbsp;</span></p>
+<p id="t51" class="pln">            <span class="op">[</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">]</span><span class="op">,</span><span class="strut">&nbsp;</span></p>
+<p id="t52" class="pln">            <span class="op">[</span><span class="num">0</span><span class="op">,</span> <span class="num">1</span><span class="op">]</span><span class="op">,</span><span class="strut">&nbsp;</span></p>
+<p id="t53" class="pln">            <span class="op">[</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">]</span><span class="strut">&nbsp;</span></p>
+<p id="t54" class="pln">        <span class="op">]</span><span class="strut">&nbsp;</span></p>
+<p id="t55" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t56" class="stm run hide_run">        <span class="key">for</span> <span class="nam">x</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">sizex</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t57" class="stm run hide_run">            <span class="key">for</span> <span class="nam">y</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">sizey</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t58" class="stm run hide_run">                <span class="nam">neighbours</span> <span class="op">=</span> <span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">cells</span><span class="op">[</span><span class="nam">x</span> <span class="op">-</span> <span class="nam">d</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span> <span class="op">-</span> <span class="nam">d</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">]</span><span class="strut">&nbsp;</span></p>
+<p id="t59" class="pln">                              <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">correct_coors</span><span class="op">(</span><span class="nam">x</span> <span class="op">-</span> <span class="nam">d</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">y</span> <span class="op">-</span> <span class="nam">d</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">)</span> <span class="key">else</span><span class="strut">&nbsp;</span></p>
+<p id="t60" class="pln">                              <span class="nam">NoUnit</span><span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="num">0</span><span class="op">)</span><span class="strut">&nbsp;</span></p>
+<p id="t61" class="pln">                              <span class="key">for</span> <span class="nam">d</span> <span class="key">in</span> <span class="nam">neighbour_diffs</span><span class="op">]</span><span class="strut">&nbsp;</span></p>
+<p id="t62" class="pln">                <span class="com"># print(x, y, neighbours)</span><span class="strut">&nbsp;</span></p>
+<p id="t63" class="stm run hide_run">                <span class="key">if</span> <span class="key">not</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cells</span><span class="op">[</span><span class="nam">x</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span><span class="op">]</span><span class="op">.</span><span class="nam">should_be_killed</span><span class="op">(</span><span class="nam">neighbours</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t64" class="stm run hide_run">                    <span class="nam">new_cells</span><span class="op">[</span><span class="nam">x</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span><span class="op">]</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cells</span><span class="op">[</span><span class="nam">x</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span><span class="op">]</span><span class="strut">&nbsp;</span></p>
+<p id="t65" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t66" class="stm run hide_run">                <span class="key">if</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cells</span><span class="op">[</span><span class="nam">x</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span><span class="op">]</span><span class="op">.</span><span class="nam">can_spawn_fish</span><span class="op">(</span><span class="nam">neighbours</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t67" class="stm run hide_run">                    <span class="nam">new_cells</span><span class="op">[</span><span class="nam">x</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span><span class="op">]</span> <span class="op">=</span> <span class="nam">FishUnit</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="strut">&nbsp;</span></p>
+<p id="t68" class="stm run hide_run">                <span class="key">elif</span> <span class="nam">self</span><span class="op">.</span><span class="nam">cells</span><span class="op">[</span><span class="nam">x</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span><span class="op">]</span><span class="op">.</span><span class="nam">can_spawn_shrimp</span><span class="op">(</span><span class="nam">neighbours</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t69" class="stm run hide_run">                    <span class="nam">new_cells</span><span class="op">[</span><span class="nam">x</span><span class="op">]</span><span class="op">[</span><span class="nam">y</span><span class="op">]</span> <span class="op">=</span> <span class="nam">ShrimpUnit</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="strut">&nbsp;</span></p>
+<p id="t70" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t71" class="stm run hide_run">        <span class="nam">self</span><span class="op">.</span><span class="nam">cells</span> <span class="op">=</span> <span class="nam">new_cells</span><span class="strut">&nbsp;</span></p>
+<p id="t72" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t73" class="stm run hide_run"><span class="key">class</span> <span class="nam">Unit</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t74" class="stm run hide_run">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">posx</span><span class="op">,</span> <span class="nam">posy</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t75" class="stm run hide_run">        <span class="nam">self</span><span class="op">.</span><span class="nam">posx</span> <span class="op">=</span> <span class="nam">posx</span><span class="strut">&nbsp;</span></p>
+<p id="t76" class="stm run hide_run">        <span class="nam">self</span><span class="op">.</span><span class="nam">posy</span> <span class="op">=</span> <span class="nam">posy</span><span class="strut">&nbsp;</span></p>
+<p id="t77" class="stm run hide_run">        <span class="nam">self</span><span class="op">.</span><span class="nam">type</span> <span class="op">=</span> <span class="str">'Unit'</span><span class="strut">&nbsp;</span></p>
+<p id="t78" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t79" class="stm run hide_run">    <span class="key">def</span> <span class="nam">should_be_killed</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">neighbours</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t80" class="stm run hide_run">        <span class="key">return</span> <span class="key">False</span><span class="strut">&nbsp;</span></p>
+<p id="t81" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t82" class="stm run hide_run">    <span class="key">def</span> <span class="nam">can_spawn_shrimp</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">neighbours</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t83" class="stm run hide_run">        <span class="key">return</span> <span class="key">False</span><span class="strut">&nbsp;</span></p>
+<p id="t84" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t85" class="stm run hide_run">    <span class="key">def</span> <span class="nam">can_spawn_fish</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">neighbours</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t86" class="stm run hide_run">        <span class="key">return</span> <span class="key">False</span><span class="strut">&nbsp;</span></p>
+<p id="t87" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t88" class="stm run hide_run">    <span class="key">def</span> <span class="nam">__str__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t89" class="stm run hide_run">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">type</span> <span class="op">+</span> <span class="str">'('</span> <span class="op">+</span> <span class="nam">str</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">posx</span><span class="op">)</span> <span class="op">+</span> <span class="str">', '</span> <span class="op">+</span> <span class="nam">str</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">posy</span><span class="op">)</span> <span class="op">+</span> <span class="str">')'</span><span class="strut">&nbsp;</span></p>
+<p id="t90" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t91" class="stm run hide_run">    <span class="key">def</span> <span class="nam">__repr__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t92" class="stm run hide_run">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">type</span> <span class="op">+</span> <span class="str">'('</span> <span class="op">+</span> <span class="nam">str</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">posx</span><span class="op">)</span> <span class="op">+</span> <span class="str">', '</span> <span class="op">+</span> <span class="nam">str</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">posy</span><span class="op">)</span> <span class="op">+</span> <span class="str">')'</span><span class="strut">&nbsp;</span></p>
+<p id="t93" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t94" class="stm run hide_run">    <span class="key">def</span> <span class="nam">__eq__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">other</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t95" class="stm run hide_run">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">type</span> <span class="op">==</span> <span class="nam">other</span><span class="op">.</span><span class="nam">type</span> <span class="key">and</span> <span class="nam">self</span><span class="op">.</span><span class="nam">posx</span> <span class="op">==</span> <span class="nam">other</span><span class="op">.</span><span class="nam">posx</span> <span class="key">and</span> <span class="nam">self</span><span class="op">.</span><span class="nam">posy</span> <span class="op">==</span> <span class="nam">other</span><span class="op">.</span><span class="nam">posy</span><span class="strut">&nbsp;</span></p>
+<p id="t96" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t97" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t98" class="stm run hide_run"><span class="key">class</span> <span class="nam">NoUnit</span><span class="op">(</span><span class="nam">Unit</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t99" class="stm run hide_run">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">posx</span><span class="op">,</span> <span class="nam">posy</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t100" class="stm run hide_run">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">posx</span><span class="op">,</span> <span class="nam">posy</span><span class="op">)</span><span class="strut">&nbsp;</span></p>
+<p id="t101" class="stm run hide_run">        <span class="nam">self</span><span class="op">.</span><span class="nam">type</span> <span class="op">=</span> <span class="str">'NoUnit'</span><span class="strut">&nbsp;</span></p>
+<p id="t102" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t103" class="stm run hide_run">    <span class="key">def</span> <span class="nam">can_spawn_shrimp</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">neighbours</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t104" class="stm run hide_run">        <span class="nam">ns_num</span> <span class="op">=</span> <span class="nam">sum</span><span class="op">(</span><span class="num">1</span> <span class="key">if</span> <span class="nam">neighbour</span><span class="op">.</span><span class="nam">type</span> <span class="op">==</span> <span class="str">'ShrimpUnit'</span> <span class="key">else</span> <span class="num">0</span> <span class="key">for</span> <span class="nam">neighbour</span> <span class="key">in</span> <span class="nam">neighbours</span><span class="op">)</span><span class="strut">&nbsp;</span></p>
+<p id="t105" class="stm run hide_run">        <span class="key">return</span> <span class="nam">ns_num</span> <span class="op">==</span> <span class="num">3</span><span class="strut">&nbsp;</span></p>
+<p id="t106" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t107" class="stm run hide_run">    <span class="key">def</span> <span class="nam">can_spawn_fish</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">neighbours</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t108" class="stm run hide_run">        <span class="nam">ns_num</span> <span class="op">=</span> <span class="nam">sum</span><span class="op">(</span><span class="num">1</span> <span class="key">if</span> <span class="nam">neighbour</span><span class="op">.</span><span class="nam">type</span> <span class="op">==</span> <span class="str">'FishUnit'</span> <span class="key">else</span> <span class="num">0</span> <span class="key">for</span> <span class="nam">neighbour</span> <span class="key">in</span> <span class="nam">neighbours</span><span class="op">)</span><span class="strut">&nbsp;</span></p>
+<p id="t109" class="stm run hide_run">        <span class="key">return</span> <span class="nam">ns_num</span> <span class="op">==</span> <span class="num">3</span><span class="strut">&nbsp;</span></p>
+<p id="t110" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t111" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t112" class="stm run hide_run"><span class="key">class</span> <span class="nam">FishUnit</span><span class="op">(</span><span class="nam">Unit</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t113" class="stm run hide_run">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">posx</span><span class="op">,</span> <span class="nam">posy</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t114" class="stm run hide_run">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">posx</span><span class="op">,</span> <span class="nam">posy</span><span class="op">)</span><span class="strut">&nbsp;</span></p>
+<p id="t115" class="stm run hide_run">        <span class="nam">self</span><span class="op">.</span><span class="nam">type</span> <span class="op">=</span> <span class="str">'FishUnit'</span><span class="strut">&nbsp;</span></p>
+<p id="t116" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t117" class="stm run hide_run">    <span class="key">def</span> <span class="nam">should_be_killed</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">neighbours</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t118" class="stm run hide_run">        <span class="nam">ns_num</span> <span class="op">=</span> <span class="nam">sum</span><span class="op">(</span><span class="num">1</span> <span class="key">if</span> <span class="nam">neighbour</span><span class="op">.</span><span class="nam">type</span> <span class="op">==</span> <span class="str">'FishUnit'</span> <span class="key">else</span> <span class="num">0</span> <span class="key">for</span> <span class="nam">neighbour</span> <span class="key">in</span> <span class="nam">neighbours</span><span class="op">)</span><span class="strut">&nbsp;</span></p>
+<p id="t119" class="stm run hide_run">        <span class="key">return</span> <span class="nam">ns_num</span> <span class="op">&lt;</span> <span class="num">2</span> <span class="key">or</span> <span class="nam">ns_num</span> <span class="op">>=</span> <span class="num">4</span><span class="strut">&nbsp;</span></p>
+<p id="t120" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t121" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t122" class="stm run hide_run"><span class="key">class</span> <span class="nam">ShrimpUnit</span><span class="op">(</span><span class="nam">Unit</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t123" class="stm run hide_run">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">posx</span><span class="op">,</span> <span class="nam">posy</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t124" class="stm run hide_run">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">posx</span><span class="op">,</span> <span class="nam">posy</span><span class="op">)</span><span class="strut">&nbsp;</span></p>
+<p id="t125" class="stm run hide_run">        <span class="nam">self</span><span class="op">.</span><span class="nam">type</span> <span class="op">=</span> <span class="str">'ShrimpUnit'</span><span class="strut">&nbsp;</span></p>
+<p id="t126" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t127" class="stm run hide_run">    <span class="key">def</span> <span class="nam">should_be_killed</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">neighbours</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t128" class="stm run hide_run">        <span class="nam">ns_num</span> <span class="op">=</span> <span class="nam">sum</span><span class="op">(</span><span class="num">1</span> <span class="key">if</span> <span class="nam">neighbour</span><span class="op">.</span><span class="nam">type</span> <span class="op">==</span> <span class="str">'ShrimpUnit'</span> <span class="key">else</span> <span class="num">0</span> <span class="key">for</span> <span class="nam">neighbour</span> <span class="key">in</span> <span class="nam">neighbours</span><span class="op">)</span><span class="strut">&nbsp;</span></p>
+<p id="t129" class="stm run hide_run">        <span class="key">return</span> <span class="nam">ns_num</span> <span class="op">&lt;</span> <span class="num">2</span> <span class="key">or</span> <span class="nam">ns_num</span> <span class="op">>=</span> <span class="num">4</span><span class="strut">&nbsp;</span></p>
+<p id="t130" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t131" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t132" class="stm run hide_run"><span class="key">class</span> <span class="nam">RockUnit</span><span class="op">(</span><span class="nam">Unit</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t133" class="stm run hide_run">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">posx</span><span class="op">,</span> <span class="nam">posy</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t134" class="stm run hide_run">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">posx</span><span class="op">,</span> <span class="nam">posy</span><span class="op">)</span><span class="strut">&nbsp;</span></p>
+<p id="t135" class="stm run hide_run">        <span class="nam">self</span><span class="op">.</span><span class="nam">type</span> <span class="op">=</span> <span class="str">'RockUnit'</span><span class="strut">&nbsp;</span></p>
+<p id="t136" class="pln"><span class="strut">&nbsp;</span></p>
+<p id="t137" class="stm run hide_run">    <span class="key">def</span> <span class="nam">should_be_killed</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">neighbours</span><span class="op">)</span><span class="op">:</span><span class="strut">&nbsp;</span></p>
+<p id="t138" class="stm run hide_run">        <span class="key">return</span> <span class="key">False</span><span class="strut">&nbsp;</span></p>
+
+            </td>
+        </tr>
+    </table>
+</div>
+
+<div id="footer">
+    <div class="content">
+        <p>
+            <a class="nav" href="index.html">&#xab; index</a> &nbsp; &nbsp; <a class="nav" href="https://coverage.readthedocs.io">coverage.py v4.2</a>,
+            created at 2018-03-26 16:39
+        </p>
+    </div>
+</div>
+
+</body>
+</html>

+ 375 - 0
coverage_report/style.css

@@ -0,0 +1,375 @@
+/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */
+/* For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt */
+
+/* CSS styles for coverage.py. */
+
+/* Page-wide styles */
+html, body, h1, h2, h3, p, table, td, th {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    outline: 0;
+    font-weight: inherit;
+    font-style: inherit;
+    font-size: 100%;
+    font-family: inherit;
+    vertical-align: baseline;
+    }
+
+/* Set baseline grid to 16 pt. */
+body {
+    font-family: georgia, serif;
+    font-size: 1em;
+    }
+
+html>body {
+    font-size: 16px;
+    }
+
+/* Set base font size to 12/16 */
+p {
+    font-size: .75em;           /* 12/16 */
+    line-height: 1.33333333em;  /* 16/12 */
+    }
+
+table {
+    border-collapse: collapse;
+    }
+td {
+    vertical-align: top;
+}
+table tr.hidden {
+    display: none !important;
+    }
+
+p#no_rows {
+    display: none;
+    font-size: 1.2em;
+    }
+
+a.nav {
+    text-decoration: none;
+    color: inherit;
+    }
+a.nav:hover {
+    text-decoration: underline;
+    color: inherit;
+    }
+
+/* Page structure */
+#header {
+    background: #f8f8f8;
+    width: 100%;
+    border-bottom: 1px solid #eee;
+    }
+
+#source {
+    padding: 1em;
+    font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
+    }
+
+.indexfile #footer {
+    margin: 1em 3em;
+    }
+
+.pyfile #footer {
+    margin: 1em 1em;
+    }
+
+#footer .content {
+    padding: 0;
+    font-size: 85%;
+    font-family: verdana, sans-serif;
+    color: #666666;
+    font-style: italic;
+    }
+
+#index {
+    margin: 1em 0 0 3em;
+    }
+
+/* Header styles */
+#header .content {
+    padding: 1em 3em;
+    }
+
+h1 {
+    font-size: 1.25em;
+    display: inline-block;
+}
+
+#filter_container {
+    display: inline-block;
+    float: right;
+    margin: 0 2em 0 0;
+}
+#filter_container input {
+    width: 10em;
+}
+
+h2.stats {
+    margin-top: .5em;
+    font-size: 1em;
+}
+.stats span {
+    border: 1px solid;
+    padding: .1em .25em;
+    margin: 0 .1em;
+    cursor: pointer;
+    border-color: #999 #ccc #ccc #999;
+}
+.stats span.hide_run, .stats span.hide_exc,
+.stats span.hide_mis, .stats span.hide_par,
+.stats span.par.hide_run.hide_par {
+    border-color: #ccc #999 #999 #ccc;
+}
+.stats span.par.hide_run {
+    border-color: #999 #ccc #ccc #999;
+}
+
+.stats span.run {
+    background: #ddffdd;
+}
+.stats span.exc {
+    background: #eeeeee;
+}
+.stats span.mis {
+    background: #ffdddd;
+}
+.stats span.hide_run {
+    background: #eeffee;
+}
+.stats span.hide_exc {
+    background: #f5f5f5;
+}
+.stats span.hide_mis {
+    background: #ffeeee;
+}
+.stats span.par {
+    background: #ffffaa;
+}
+.stats span.hide_par {
+    background: #ffffcc;
+}
+
+/* Help panel */
+#keyboard_icon {
+    float: right;
+    margin: 5px;
+    cursor: pointer;
+}
+
+.help_panel {
+    position: absolute;
+    background: #ffffcc;
+    padding: .5em;
+    border: 1px solid #883;
+    display: none;
+}
+
+.indexfile .help_panel {
+    width: 20em; height: 4em;
+}
+
+.pyfile .help_panel {
+    width: 16em; height: 8em;
+}
+
+.help_panel .legend {
+    font-style: italic;
+    margin-bottom: 1em;
+}
+
+#panel_icon {
+    float: right;
+    cursor: pointer;
+}
+
+.keyhelp {
+    margin: .75em;
+}
+
+.keyhelp .key {
+    border: 1px solid black;
+    border-color: #888 #333 #333 #888;
+    padding: .1em .35em;
+    font-family: monospace;
+    font-weight: bold;
+    background: #eee;
+}
+
+/* Source file styles */
+.linenos p {
+    text-align: right;
+    margin: 0;
+    padding: 0 .5em;
+    color: #999999;
+    font-family: verdana, sans-serif;
+    font-size: .625em;   /* 10/16 */
+    line-height: 1.6em;  /* 16/10 */
+    }
+.linenos p.highlight {
+    background: #ffdd00;
+    }
+.linenos p a {
+    text-decoration: none;
+    color: #999999;
+    }
+.linenos p a:hover {
+    text-decoration: underline;
+    color: #999999;
+    }
+
+td.text {
+    width: 100%;
+    }
+.text p {
+    margin: 0;
+    padding: 0 0 0 .5em;
+    border-left: 2px solid #ffffff;
+    white-space: pre;
+    position: relative;
+    }
+
+.text p.mis {
+    background: #ffdddd;
+    border-left: 2px solid #ff0000;
+    }
+.text p.run, .text p.run.hide_par {
+    background: #ddffdd;
+    border-left: 2px solid #00ff00;
+    }
+.text p.exc {
+    background: #eeeeee;
+    border-left: 2px solid #808080;
+    }
+.text p.par, .text p.par.hide_run {
+    background: #ffffaa;
+    border-left: 2px solid #eeee99;
+    }
+.text p.hide_run, .text p.hide_exc, .text p.hide_mis, .text p.hide_par,
+.text p.hide_run.hide_par {
+    background: inherit;
+    }
+
+.text span.annotate {
+    font-family: georgia;
+    color: #666;
+    float: right;
+    padding-right: .5em;
+    }
+.text p.hide_par span.annotate {
+    display: none;
+    }
+.text span.annotate.long {
+    display: none;
+    }
+.text p:hover span.annotate.long {
+    display: block;
+    max-width: 50%;
+    white-space: normal;
+    float: right;
+    position: absolute;
+    top: 1.75em;
+    right: 1em;
+    width: 30em;
+    height: auto;
+    color: #333;
+    background: #ffffcc;
+    border: 1px solid #888;
+    padding: .25em .5em;
+    z-index: 999;
+    border-radius: .2em;
+    box-shadow: #cccccc .2em .2em .2em;
+    }
+
+/* Syntax coloring */
+.text .com {
+    color: green;
+    font-style: italic;
+    line-height: 1px;
+    }
+.text .key {
+    font-weight: bold;
+    line-height: 1px;
+    }
+.text .str {
+    color: #000080;
+    }
+
+/* index styles */
+#index td, #index th {
+    text-align: right;
+    width: 5em;
+    padding: .25em .5em;
+    border-bottom: 1px solid #eee;
+    }
+#index th {
+    font-style: italic;
+    color: #333;
+    border-bottom: 1px solid #ccc;
+    cursor: pointer;
+    }
+#index th:hover {
+    background: #eee;
+    border-bottom: 1px solid #999;
+    }
+#index td.left, #index th.left {
+    padding-left: 0;
+    }
+#index td.right, #index th.right {
+    padding-right: 0;
+    }
+#index th.headerSortDown, #index th.headerSortUp {
+    border-bottom: 1px solid #000;
+    white-space: nowrap;
+    background: #eee;
+    }
+#index th.headerSortDown:after {
+    content: " ↓";
+}
+#index th.headerSortUp:after {
+    content: " ↑";
+}
+#index td.name, #index th.name {
+    text-align: left;
+    width: auto;
+    }
+#index td.name a {
+    text-decoration: none;
+    color: #000;
+    }
+#index tr.total,
+#index tr.total_dynamic {
+    }
+#index tr.total td,
+#index tr.total_dynamic td {
+    font-weight: bold;
+    border-top: 1px solid #ccc;
+    border-bottom: none;
+    }
+#index tr.file:hover {
+    background: #eeeeee;
+    }
+#index tr.file:hover td.name {
+    text-decoration: underline;
+    color: #000;
+    }
+
+/* scroll marker styles */
+#scroll_marker {
+    position: fixed;
+    right: 0;
+    top: 0;
+    width: 16px;
+    height: 100%;
+    background: white;
+    border-left: 1px solid #eee;
+    }
+
+#scroll_marker .marker {
+    background: #eedddd;
+    position: absolute;
+    min-height: 3px;
+    width: 100%;
+    }