|
7514 | 7514 | <div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
7515 | 7515 | </div>
|
7516 | 7516 | <div class="jp-InputArea jp-Cell-inputArea">
|
7517 |
| -<div class="jp-InputPrompt jp-InputArea-prompt">In [19]:</div> |
| 7517 | +<div class="jp-InputPrompt jp-InputArea-prompt">In [4]:</div> |
7518 | 7518 | <div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
7519 | 7519 | <div class="cm-editor cm-s-jupyter">
|
7520 | 7520 | <div class="highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">search_2</span> <span class="kn">import</span> <span class="o">*</span>
|
|
7528 | 7528 | <div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
7529 | 7529 | </div>
|
7530 | 7530 | <div class="jp-InputArea jp-Cell-inputArea">
|
7531 |
| -<div class="jp-InputPrompt jp-InputArea-prompt">In [46]:</div> |
| 7531 | +<div class="jp-InputPrompt jp-InputArea-prompt">In [45]:</div> |
7532 | 7532 | <div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
7533 | 7533 | <div class="cm-editor cm-s-jupyter">
|
7534 | 7534 | <div class="highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">xs</span><span class="p">,</span><span class="n">ys</span><span class="p">):</span>
|
|
7553 | 7553 | <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">)]</span>
|
7554 | 7554 |
|
7555 | 7555 | <span class="k">def</span> <span class="nf">result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">,</span> <span class="n">action</span><span class="p">):</span>
|
7556 |
| - <span class="k">return</span> <span class="n">add</span><span class="p">(</span><span class="n">action</span><span class="p">,</span><span class="n">state</span><span class="p">)</span> |
| 7556 | + <span class="k">return</span> <span class="n">add</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">state</span><span class="p">)</span> |
7557 | 7557 |
|
7558 | 7558 | <span class="k">def</span> <span class="nf">actions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">state</span><span class="p">):</span>
|
7559 | 7559 | <span class="n">legit_directions</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
7560 | 7560 | <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">directions</span><span class="p">:</span>
|
7561 |
| - <span class="n">result</span> <span class="o">=</span> <span class="n">add</span><span class="p">(</span><span class="n">d</span><span class="p">,</span><span class="n">state</span><span class="p">)</span> |
7562 |
| - <span class="c1"># if more cannibals than missionaries</span> |
7563 |
| - <span class="k">if</span><span class="p">(</span><span class="n">state</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">></span> <span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">></span> <span class="n">state</span><span class="p">[</span><span class="mi">4</span><span class="p">]):</span> |
| 7561 | + <span class="n">result</span> <span class="o">=</span> <span class="n">add</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">state</span><span class="p">)</span> |
| 7562 | + <span class="c1"># if more cannibals than missionaries, but if there are no missionaries </span> |
| 7563 | + <span class="c1"># we can have as many cannibals as we like :)</span> |
| 7564 | + <span class="k">if</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">></span> <span class="mi">0</span><span class="p">):</span> |
| 7565 | + <span class="k">if</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">></span> <span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span> |
| 7566 | + <span class="k">continue</span> |
| 7567 | + <span class="k">if</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">></span> <span class="mi">0</span><span class="p">):</span> |
| 7568 | + <span class="k">if</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">></span> <span class="n">result</span><span class="p">[</span><span class="mi">5</span><span class="p">]):</span> |
| 7569 | + <span class="k">continue</span> |
| 7570 | + <span class="c1"># if there are negative numbers / more than 3 of each cannibals/missionaries</span> |
| 7571 | + <span class="c1"># on the left hand side</span> |
| 7572 | + <span class="k">if</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">></span> <span class="mi">3</span> <span class="ow">or</span> <span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">></span> <span class="mi">3</span><span class="p">):</span> |
7564 | 7573 | <span class="k">continue</span>
|
7565 |
| - <span class="c1"># if there are negative numbers / more than 3</span> |
7566 |
| - <span class="c1"># of each canns missionaries</span> |
7567 |
| - <span class="k">if</span><span class="p">(</span><span class="n">state</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">state</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">></span> <span class="mi">3</span> <span class="ow">or</span> <span class="n">state</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">></span> <span class="mi">3</span><span class="p">):</span> |
| 7574 | + <span class="c1"># if there are negative numbers / more than 3 of each cannibals/missionaries</span> |
| 7575 | + <span class="c1"># on the right hand side</span> |
| 7576 | + <span class="k">if</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">result</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">result</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">></span> <span class="mi">3</span> <span class="ow">or</span> <span class="n">result</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span> <span class="o">></span> <span class="mi">3</span><span class="p">):</span> |
7568 | 7577 | <span class="k">continue</span>
|
7569 |
| - <span class="c1"># now we need to check boat status</span> |
7570 |
| - <span class="n">b1</span> <span class="o">=</span> <span class="n">state</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> |
| 7578 | + <span class="c1"># now we need to check boat status - bit spagetti :)</span> |
| 7579 | + <span class="n">b1</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> |
7571 | 7580 | <span class="k">if</span><span class="p">(</span><span class="n">b1</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">b1</span> <span class="o">></span> <span class="mi">1</span><span class="p">):</span>
|
7572 | 7581 | <span class="k">continue</span>
|
7573 |
| - <span class="n">b2</span> <span class="o">=</span> <span class="n">state</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> |
| 7582 | + <span class="n">b2</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> |
7574 | 7583 | <span class="k">if</span><span class="p">(</span><span class="n">b2</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">b2</span> <span class="o">></span> <span class="mi">1</span><span class="p">):</span>
|
7575 | 7584 | <span class="k">continue</span>
|
7576 | 7585 | <span class="k">if</span><span class="p">(</span><span class="n">b1</span> <span class="o">==</span> <span class="mi">1</span><span class="p">):</span>
|
|
7592 | 7601 | <div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
|
7593 | 7602 | </div>
|
7594 | 7603 | <div class="jp-InputArea jp-Cell-inputArea">
|
7595 |
| -<div class="jp-InputPrompt jp-InputArea-prompt">In [47]:</div> |
| 7604 | +<div class="jp-InputPrompt jp-InputArea-prompt">In [46]:</div> |
7596 | 7605 | <div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
|
7597 | 7606 | <div class="cm-editor cm-s-jupyter">
|
7598 | 7607 | <div class="highlight hl-ipython3"><pre><span></span><span class="n">problem</span> <span class="o">=</span> <span class="n">Cannibals</span><span class="p">()</span>
|
7599 |
| -<span class="nb">print</span><span class="p">(</span><span class="n">path_states</span><span class="p">(</span><span class="n">astar_search</span><span class="p">(</span><span class="n">problem</span><span class="p">)))</span> |
| 7608 | +<span class="n">states</span> <span class="o">=</span> <span class="n">path_states</span><span class="p">(</span><span class="n">breadth_first_search</span><span class="p">(</span><span class="n">problem</span><span class="p">))</span> |
| 7609 | +<span class="nb">print</span><span class="p">(</span><span class="n">states</span><span class="p">)</span> |
| 7610 | +<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">states</span><span class="p">))</span> |
7600 | 7611 | </pre></div>
|
7601 | 7612 | </div>
|
7602 | 7613 | </div>
|
|
7609 | 7620 | <div class="jp-OutputArea-child">
|
7610 | 7621 | <div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
|
7611 | 7622 | <div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
|
7612 |
| -<pre>[(3, 3, 1, 0, 0, 0), (2, 2, 0, 1, 1, 1), (2, 3, 1, 0, 1, 0), (1, 2, 0, 1, 2, 1), (2, 2, 1, 0, 1, 1), (0, 2, 0, 1, 3, 1), (1, 2, 1, 0, 2, 1), (0, 1, 0, 1, 3, 2), (1, 1, 1, 0, 2, 2), (0, 0, 0, 1, 3, 3)] |
| 7623 | +<pre>[(3, 3, 1, 0, 0, 0), (1, 3, 0, 1, 2, 0), (2, 3, 1, 0, 1, 0), (0, 3, 0, 1, 3, 0), (1, 3, 1, 0, 2, 0), (1, 1, 0, 1, 2, 2), (2, 2, 1, 0, 1, 1), (2, 0, 0, 1, 1, 3), (3, 0, 1, 0, 0, 3), (1, 0, 0, 1, 2, 3), (2, 0, 1, 0, 1, 3), (0, 0, 0, 1, 3, 3)] |
| 7624 | +12 |
7613 | 7625 | </pre>
|
7614 | 7626 | </div>
|
7615 | 7627 | </div>
|
7616 | 7628 | </div>
|
7617 | 7629 | </div>
|
7618 | 7630 | </div>
|
| 7631 | +<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=39f17a48-dd26-435f-8535-e67555abfa7c"> |
| 7632 | +<div class="jp-Cell-inputWrapper" tabindex="0"> |
| 7633 | +<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser"> |
| 7634 | +</div> |
| 7635 | +<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt"> |
| 7636 | +</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown"> |
| 7637 | +<p>We don't need fancy algorithms for this. Step costs are identical, so breadth first search is optimal and complete.</p> |
| 7638 | +</div> |
| 7639 | +</div> |
| 7640 | +</div> |
| 7641 | +</div> |
7619 | 7642 | </main>
|
7620 | 7643 | </body>
|
7621 | 7644 | </html>
|
0 commit comments