Solved 51 and 52.

This commit is contained in:
2018-12-23 21:54:15 -05:00
parent 7898b3e7f9
commit fb9efe4db8
5 changed files with 12342 additions and 4 deletions

View File

@@ -11785,6 +11785,146 @@ div#notebook {
</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>We start by writing a function that takes a number and returns all possible replacements.</p>
<p>For example 13 will return ["x3", "1x"].</p>
<p>I actually had a version that simply replace even digits at first, but that does not work for 56333 for example, because you want to get 56xx3 and not 56xxx. So basically, we have to search for all combinations for each digit. I should probably document what each list comprehension does or I will never understand it again. Haha.</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="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">itertools</span> <span class="k">import</span> <span class="n">combinations</span>
<span class="k">def</span> <span class="nf">get_replacements</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="n">n</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
<span class="n">xss</span><span class="o">=</span> <span class="p">[[</span><span class="n">i</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">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">n</span><span class="p">))</span> <span class="k">if</span> <span class="n">n</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="n">d</span><span class="p">]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="s2">"0123456789"</span><span class="p">]</span>
<span class="n">xss</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span>
<span class="k">for</span> <span class="n">xs</span> <span class="ow">in</span> <span class="n">xss</span> <span class="k">if</span> <span class="n">xs</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">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">xs</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">combinations</span><span class="p">(</span><span class="n">xs</span><span class="p">,</span> <span class="n">i</span><span class="p">)]</span>
<span class="n">xss</span> <span class="o">=</span> <span class="p">[</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s1">'x'</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">xs</span> <span class="k">else</span> <span class="n">d</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">n</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">return</span> <span class="n">xss</span>
<span class="c1">#assert(get_replacements(13) == ["x3", "1x"])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">get_replacements</span><span class="p">(</span><span class="mi">13</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>['x3', '1x']
</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>We will use our good old prime generator.</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="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">is_prime</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">smaller_primes</span><span class="p">):</span>
<span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">smaller_primes</span><span class="p">:</span>
<span class="k">if</span> <span class="n">n</span> <span class="o">%</span> <span class="n">s</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="n">s</span> <span class="o">*</span> <span class="n">s</span> <span class="o">&gt;</span> <span class="n">n</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">def</span> <span class="nf">prime_generator_function</span><span class="p">():</span>
<span class="n">primes</span> <span class="o">=</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">7</span><span class="p">]</span>
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">primes</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">p</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">p</span> <span class="o">+=</span> <span class="mi">2</span>
<span class="k">if</span> <span class="n">is_prime</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">primes</span><span class="p">):</span>
<span class="n">primes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
<span class="k">yield</span> <span class="n">p</span>
</pre></div>
</div>
</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="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">replacements</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">ps</span> <span class="o">=</span> <span class="n">prime_generator_function</span><span class="p">()</span>
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">ps</span><span class="p">:</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">get_replacements</span><span class="p">(</span><span class="n">p</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">replacements</span><span class="p">[</span><span class="n">r</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">replacements</span><span class="p">[</span><span class="n">r</span><span class="p">])</span> <span class="o">==</span> <span class="mi">8</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">replacements</span><span class="p">[</span><span class="n">r</span><span class="p">])</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">replacements</span><span class="p">[</span><span class="n">r</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">p</span> <span class="o">=</span> <span class="mi">100000000000</span> <span class="c1"># We have found a solution so we go home</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="n">replacements</span><span class="p">[</span><span class="n">r</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span><span class="p">]</span>
<span class="k">if</span> <span class="n">p</span> <span class="o">&gt;</span> <span class="mi">1000000</span><span class="p">:</span>
<span class="k">break</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>[121313, 222323, 323333, 424343, 525353, 626363, 828383, 929393]
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [4]:</div>
<div class="inner_cell">
<div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">s</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">121313</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>121313
</pre>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In [ ]:</div>

File diff suppressed because it is too large Load Diff

View File

@@ -809,12 +809,32 @@
</tr>
<tr class="table-warning">
<tr>
<td><a href="EulerProblem051.html">Problem 051</a></td>
<td></td>
<td>Sun, 23 Dec 2018, 23:47</td>
<td>
<kbd>prime</kbd>
<kbd>combinations</kbd>
<kbd>replacement</kbd>
</td>
</tr>
<tr>
<td><a href="EulerProblem052.html">Problem 052</a></td>
<td>Mon, 24 Dec 2018, 02:32</td>
<td>
<kbd>digits</kbd>
<kbd>permutations</kbd>
</td>
</tr>