Euler has design of a homepage and there is a link back to the overview for each solution.
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head><meta charset="utf-8" />
|
||||
<head><meta charset="utf-8"/>
|
||||
<title>EulerProblem011</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
|
||||
|
||||
<style type="text/css">
|
||||
/*!
|
||||
*
|
||||
@@ -11714,8 +11714,6 @@ ul.typeahead-list > li > a {
|
||||
.ansi-bold { font-weight: bold; }
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
<style type="text/css">
|
||||
/* Overrides of notebook CSS for static HTML export */
|
||||
body {
|
||||
@@ -11741,15 +11739,13 @@ div#notebook {
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- Custom stylesheet, it must be in the same directory as the html file -->
|
||||
<link rel="stylesheet" href="custom.css">
|
||||
|
||||
<link href="custom.css" rel="stylesheet"/>
|
||||
<!-- Loading mathjax macro -->
|
||||
<!-- Load mathjax -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML"></script>
|
||||
<!-- MathJax configuration -->
|
||||
<script type="text/x-mathjax-config">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML"></script>
|
||||
<!-- MathJax configuration -->
|
||||
<script type="text/x-mathjax-config">
|
||||
MathJax.Hub.Config({
|
||||
tex2jax: {
|
||||
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
|
||||
@@ -11766,17 +11762,15 @@ div#notebook {
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!-- End of mathjax configuration --></head>
|
||||
<!-- End of mathjax configuration --></head>
|
||||
<body>
|
||||
<div tabindex="-1" id="notebook" class="border-box-sizing">
|
||||
<div class="container" id="notebook-container">
|
||||
|
||||
<div class="border-box-sizing" id="notebook" tabindex="-1">
|
||||
<div class="container" id="notebook-container">
|
||||
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
|
||||
</div>
|
||||
<div class="inner_cell">
|
||||
<div class="text_cell_render border-box-sizing rendered_html">
|
||||
<h1 id="Euler-Problem-11">Euler Problem 11<a class="anchor-link" href="#Euler-Problem-11">¶</a></h1><p>In the 20×20 grid below, four numbers along a diagonal line have been marked in red.</p>
|
||||
|
||||
<h1 id="Euler-Problem-11">Euler Problem 11<a class="anchor-link" href="#Euler-Problem-11">¶</a></h1><p><a href="/euler">Back to overview.</a></p><p>In the 20×20 grid below, four numbers along a diagonal line have been marked in red.</p>
|
||||
<pre><code>08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
|
||||
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
|
||||
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
|
||||
@@ -11799,7 +11793,6 @@ div#notebook {
|
||||
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48</code></pre>
|
||||
<p>The product of these numbers is $26 × 63 × 78 × 14 = 1788696$.</p>
|
||||
<p>What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -11809,16 +11802,15 @@ div#notebook {
|
||||
<div class="text_cell_render border-box-sizing rendered_html">
|
||||
<p>We start by parsing the array into three lists of lists (horizontal, diagonal, vertical).</p>
|
||||
<p>97, 17, 79, 11, 89, 44, 38, 94, 78, 0, 62, 54, 58, 4, 27, 53, 36, 1, 1, 1]</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell border-box-sizing code_cell rendered">
|
||||
<div class="input">
|
||||
<div class="prompt input_prompt">In [1]:</div>
|
||||
<div class="prompt input_prompt">In [1]:</div>
|
||||
<div class="inner_cell">
|
||||
<div class="input_area">
|
||||
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">s</span> <span class="o">=</span> <span class="s2">"""</span>
|
||||
<div class="input_area">
|
||||
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">s</span> <span class="o">=</span> <span class="s2">"""</span>
|
||||
<span class="s2">08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08</span>
|
||||
<span class="s2">49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00</span>
|
||||
<span class="s2">81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65</span>
|
||||
@@ -11839,7 +11831,7 @@ div#notebook {
|
||||
<span class="s2">20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16</span>
|
||||
<span class="s2">20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54</span>
|
||||
<span class="s2">01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48</span>
|
||||
<span class="s2">"""</span>
|
||||
<span class="s2">"""</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">get_index</span><span class="p">(</span><span class="n">xs</span><span class="p">,</span> <span class="n">index</span><span class="p">,</span> <span class="n">default</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">index</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
|
||||
@@ -11849,16 +11841,14 @@ div#notebook {
|
||||
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">default</span>
|
||||
|
||||
<span class="n">hss</span> <span class="o">=</span> <span class="p">[</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">h</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> <span class="k">if</span> <span class="n">h</span><span class="p">]</span>
|
||||
<span class="n">hss</span> <span class="o">=</span> <span class="p">[</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">h</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span> <span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span> <span class="k">if</span> <span class="n">h</span><span class="p">]</span>
|
||||
<span class="n">vss</span> <span class="o">=</span> <span class="p">[</span><span class="nb">list</span><span class="p">(</span><span class="n">vs</span><span class="p">)</span> <span class="k">for</span> <span class="n">vs</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">hss</span><span class="p">)]</span>
|
||||
<span class="c1"># diagonal from top left to bottom right</span>
|
||||
<span class="n">dss</span> <span class="o">=</span> <span class="p">[[</span><span class="n">get_index</span><span class="p">(</span><span class="n">hs</span><span class="p">,</span> <span class="o">-</span><span class="mi">19</span> <span class="o">+</span> <span class="n">i</span> <span class="o">+</span> <span class="n">j</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">j</span><span class="p">,</span> <span class="n">hs</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">hss</span><span class="p">)]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">39</span><span class="p">)]</span>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
|
||||
</div>
|
||||
@@ -11866,15 +11856,14 @@ div#notebook {
|
||||
<div class="text_cell_render border-box-sizing rendered_html">
|
||||
<p>I really love the way we retrieve the vertical list. (We need the ugly conversion to list because otherwise we cannot concatenate them.) It is at the limit of my mental capabilities to understand why this works. But actually it is quite straight forward. If we provide two lists, zip creates a two-tuple for each field in the lists. If we provide n lists, zip creates a n-tuple for each field in the lists. Easy.</p>
|
||||
<p>Now we create big list of lists and search each one for the greates four product and then get the maximum. Straight forward. We borrow the find product function from problem 8 because I like it.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell border-box-sizing code_cell rendered">
|
||||
<div class="input">
|
||||
<div class="prompt input_prompt">In [2]:</div>
|
||||
<div class="prompt input_prompt">In [2]:</div>
|
||||
<div class="inner_cell">
|
||||
<div class="input_area">
|
||||
<div class="input_area">
|
||||
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">xss</span> <span class="o">=</span> <span class="n">hss</span> <span class="o">+</span> <span class="n">vss</span> <span class="o">+</span> <span class="n">dss</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">product</span><span class="p">(</span><span class="n">xs</span><span class="p">):</span>
|
||||
@@ -11888,26 +11877,23 @@ div#notebook {
|
||||
<span class="n">s</span> <span class="o">=</span> <span class="nb">max</span><span class="p">([</span><span class="n">get_largest_product_of_n_digits</span><span class="p">(</span><span class="n">xs</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> <span class="k">for</span> <span class="n">xs</span> <span class="ow">in</span> <span class="n">xss</span><span class="p">])</span>
|
||||
<span class="k">assert</span><span class="p">(</span><span class="n">s</span> <span class="o">!=</span> <span class="mi">70600674</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
|
||||
</div>
|
||||
<div class="inner_cell">
|
||||
<div class="text_cell_render border-box-sizing rendered_html">
|
||||
<p>Okay, I am actually really dumb. I forgot about the other diagonal. I think I have made the same mistake back when I solved this for the first time. So let's get the missing dss and get the solution.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell border-box-sizing code_cell rendered">
|
||||
<div class="input">
|
||||
<div class="prompt input_prompt">In [3]:</div>
|
||||
<div class="prompt input_prompt">In [3]:</div>
|
||||
<div class="inner_cell">
|
||||
<div class="input_area">
|
||||
<div class="input_area">
|
||||
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># diagonal from bottom left to top right</span>
|
||||
<span class="n">hss</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
|
||||
<span class="n">dss</span> <span class="o">=</span> <span class="p">[[</span><span class="n">get_index</span><span class="p">(</span><span class="n">hs</span><span class="p">,</span> <span class="o">-</span><span class="mi">19</span> <span class="o">+</span> <span class="n">i</span> <span class="o">+</span> <span class="n">j</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">j</span><span class="p">,</span> <span class="n">hs</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">hss</span><span class="p">)]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">39</span><span class="p">)]</span>
|
||||
@@ -11916,35 +11902,22 @@ div#notebook {
|
||||
<span class="k">assert</span><span class="p">(</span><span class="n">s</span> <span class="o">==</span> <span class="mi">70600674</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="output_wrapper">
|
||||
<div class="output">
|
||||
|
||||
|
||||
<div class="output_area">
|
||||
|
||||
<div class="prompt"></div>
|
||||
|
||||
|
||||
<div class="output_subarea output_stream output_stdout output_text">
|
||||
<pre>70600674
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
|
||||
|
||||
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user