StyleInCodehttps://www.styleincode.fun/2023-12-25T09:45:00+10:00Day 25 - Advent of Code 20232023-12-25T09:45:00+10:002023-12-25T09:45:00+10:00Mark Westetag:www.styleincode.fun,2023-12-25:/day-25-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 25 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/25/">solutions</a> for the day 25 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_25_01.py """</span>
<span class="c1"># usage: python3 day_25_01.py < input</span>
<span class="c1"># ----------------------------------------------------------------------</span>
<span class="c1"># note: terminates quickly with "example" data, not so with "input" data</span>
<span class="c1"># ----------------------------------------------------------------------</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">combinations</span>
<span class="n">raw</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">u</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">': '</span><span class="p">)</span>
<span class="n">raw</span><span class="p">[</span><span class="n">u</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">components</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">u</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">raw</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">components</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="nb">set</span><span class="p">())</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">k</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="n">components</span><span class="p">[</span><span class="n">u</span><span class="p">]</span> <span class="o">=</span> <span class="n">k</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">k</span><span class="p">:</span>
<span class="n">j</span> <span class="o">=</span> <span class="n">components</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">set</span><span class="p">())</span>
<span class="n">j</span> <span class="o">=</span> <span class="n">j</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="nb">set</span><span class="p">([</span><span class="n">u</span><span class="p">]))</span>
<span class="n">components</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
<span class="k">for</span> <span class="n">u</span> <span class="ow">in</span> <span class="n">combinations</span><span class="p">(</span><span class="n">combinations</span><span class="p">(</span><span class="n">components</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="n">explore</span> <span class="o">=</span> <span class="p">[</span><span class="nb">list</span><span class="p">(</span><span class="n">components</span><span class="p">)[</span><span class="mi">0</span><span class="p">]]</span>
<span class="n">visited</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="n">explore</span><span class="p">:</span>
<span class="n">piece</span> <span class="o">=</span> <span class="n">explore</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="n">visited</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">piece</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">components</span><span class="p">[</span><span class="n">piece</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">explore</span> <span class="ow">and</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
<span class="k">if</span> <span class="p">(</span><span class="n">piece</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">u</span> <span class="ow">and</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">piece</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">u</span><span class="p">:</span>
<span class="n">explore</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">visited</span><span class="p">)</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">components</span><span class="p">):</span>
<span class="k">break</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">visited</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">components</span><span class="p">)</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">visited</span><span class="p">)))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code>
</code></pre></div>Day 24 - Advent of Code 20232023-12-24T22:15:00+10:002023-12-24T22:15:00+10:00Mark Westetag:www.styleincode.fun,2023-12-24:/day-24-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 24 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/24/">solutions</a> for the day 24 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_24_01.py """</span>
<span class="c1"># usage: python3 day_24_01.py 200000000000000 400000000000000 < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">combinations</span>
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">isclose</span>
<span class="n">Vector3</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s1">'Vector3'</span><span class="p">,</span> <span class="s1">'x, y, z'</span><span class="p">)</span>
<span class="n">NULL</span> <span class="o">=</span> <span class="n">Vector3</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" extract coordinate and velocity """</span>
<span class="n">coordinate</span><span class="p">,</span> <span class="n">velocity</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' @ '</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="n">Vector3</span><span class="p">(</span><span class="o">*</span><span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">coordinate</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">))),</span>
<span class="n">Vector3</span><span class="p">(</span><span class="o">*</span><span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">velocity</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">))))</span>
<span class="k">def</span> <span class="nf">line</span><span class="p">(</span><span class="n">coordinate</span><span class="p">,</span> <span class="n">velocity</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate coefficients ax + by + c = 0 """</span>
<span class="k">if</span> <span class="n">velocity</span><span class="o">.</span><span class="n">x</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</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="n">coordinate</span><span class="o">.</span><span class="n">x</span><span class="p">)</span>
<span class="n">gradient</span> <span class="o">=</span> <span class="n">velocity</span><span class="o">.</span><span class="n">y</span> <span class="o">/</span> <span class="n">velocity</span><span class="o">.</span><span class="n">x</span>
<span class="k">return</span> <span class="p">(</span><span class="o">-</span><span class="n">gradient</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">gradient</span> <span class="o">*</span> <span class="n">coordinate</span><span class="o">.</span><span class="n">x</span> <span class="o">-</span> <span class="n">coordinate</span><span class="o">.</span><span class="n">y</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">future_intersection</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" future intersection of u and v ignoring z axis """</span>
<span class="n">p1</span><span class="p">,</span> <span class="n">v1</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">u</span><span class="p">)</span>
<span class="n">a1</span><span class="p">,</span> <span class="n">b1</span><span class="p">,</span> <span class="n">c1</span> <span class="o">=</span> <span class="n">line</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">v1</span><span class="p">)</span>
<span class="n">p2</span><span class="p">,</span> <span class="n">v2</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="n">a2</span><span class="p">,</span> <span class="n">b2</span><span class="p">,</span> <span class="n">c2</span> <span class="o">=</span> <span class="n">line</span><span class="p">(</span><span class="n">p2</span><span class="p">,</span> <span class="n">v2</span><span class="p">)</span>
<span class="k">if</span> <span class="n">b1</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">b2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="n">NULL</span> <span class="c1"># parallel vertical lines</span>
<span class="k">if</span> <span class="n">b1</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">m1</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="o">-</span><span class="n">a1</span> <span class="o">/</span> <span class="n">b1</span><span class="p">,</span> <span class="o">-</span><span class="n">c1</span> <span class="o">/</span> <span class="n">b1</span>
<span class="k">if</span> <span class="n">b2</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">m2</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="o">-</span><span class="n">a2</span> <span class="o">/</span> <span class="n">b2</span><span class="p">,</span> <span class="o">-</span><span class="n">c2</span> <span class="o">/</span> <span class="n">b2</span>
<span class="k">if</span> <span class="n">b1</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># u is vertical</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">p1</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">m2</span> <span class="o">*</span> <span class="n">p1</span><span class="o">.</span><span class="n">x</span> <span class="o">+</span> <span class="n">y2</span>
<span class="k">elif</span> <span class="n">b2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># v is vertical</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">p2</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">m1</span> <span class="o">*</span> <span class="n">p2</span><span class="o">.</span><span class="n">x</span> <span class="o">+</span> <span class="n">y1</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">isclose</span><span class="p">(</span><span class="n">m1</span><span class="p">,</span> <span class="n">m2</span><span class="p">):</span>
<span class="k">return</span> <span class="n">NULL</span> <span class="c1"># parallel lines</span>
<span class="n">x</span> <span class="o">=</span> <span class="p">(</span><span class="n">y2</span> <span class="o">-</span> <span class="n">y1</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">m1</span> <span class="o">-</span> <span class="n">m2</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">m2</span> <span class="o">*</span> <span class="n">x</span> <span class="o">+</span> <span class="n">y2</span>
<span class="k">if</span> <span class="p">(</span><span class="n">y</span> <span class="o">-</span> <span class="n">p2</span><span class="o">.</span><span class="n">y</span><span class="p">)</span> <span class="o">/</span> <span class="n">v2</span><span class="o">.</span><span class="n">y</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="p">(</span><span class="n">y</span> <span class="o">-</span> <span class="n">p1</span><span class="o">.</span><span class="n">y</span><span class="p">)</span> <span class="o">/</span> <span class="n">v1</span><span class="o">.</span><span class="n">y</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="n">NULL</span> <span class="c1"># occurs in past for at least one hailstone</span>
<span class="k">return</span> <span class="n">Vector3</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">coord_min</span><span class="p">,</span> <span class="n">coord_max</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="n">hailstones</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">combinations</span><span class="p">(</span><span class="n">hailstones</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
<span class="n">p</span> <span class="o">=</span> <span class="n">future_intersection</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
<span class="k">if</span> <span class="n">p</span> <span class="o">==</span> <span class="n">NULL</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">coord_min</span> <span class="o"><=</span> <span class="n">p</span><span class="o">.</span><span class="n">x</span> <span class="o"><=</span> <span class="n">coord_max</span> <span class="ow">and</span> <span class="n">coord_min</span> <span class="o"><=</span> <span class="n">p</span><span class="o">.</span><span class="n">y</span> <span class="o"><=</span> <span class="n">coord_max</span><span class="p">:</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code>
</code></pre></div>Day 23 - Advent of Code 20232023-12-23T17:00:00+10:002023-12-23T17:00:00+10:00Mark Westetag:www.styleincode.fun,2023-12-23:/day-23-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 23 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/23/">solutions</a> for the day 23 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_23_01.py """</span>
<span class="c1"># usage: python3 day_23_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">raw</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="n">raw</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">),</span> <span class="n">raw</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">raw</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="n">raw</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">]</span>
<span class="n">maze</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">raw</span><span class="p">):</span>
<span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="s1">'#'</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">match</span> <span class="n">j</span><span class="p">:</span>
<span class="k">case</span> <span class="s1">'^'</span><span class="p">:</span>
<span class="n">k</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="n">width</span><span class="p">]</span>
<span class="k">case</span> <span class="s1">'>'</span><span class="p">:</span>
<span class="n">k</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
<span class="k">case</span> <span class="s1">'v'</span><span class="p">:</span>
<span class="n">k</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="n">width</span><span class="p">]</span>
<span class="k">case</span> <span class="s1">'<'</span><span class="p">:</span>
<span class="n">k</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
<span class="k">case</span><span class="w"> </span><span class="k">_</span><span class="p">:</span>
<span class="n">k</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">-</span> <span class="n">width</span> <span class="o">>=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">raw</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="n">width</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'v'</span><span class="p">:</span>
<span class="n">k</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span> <span class="o">-</span> <span class="n">width</span><span class="p">)</span>
<span class="k">if</span> <span class="n">raw</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'<'</span><span class="p">:</span>
<span class="n">k</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">+</span> <span class="n">width</span> <span class="o"><</span> <span class="n">width</span> <span class="o">*</span> <span class="n">height</span> <span class="ow">and</span> <span class="n">raw</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="n">width</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'^'</span><span class="p">:</span>
<span class="n">k</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="n">width</span><span class="p">)</span>
<span class="k">if</span> <span class="n">raw</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'>'</span><span class="p">:</span>
<span class="n">k</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">maze</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">m</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">k</span> <span class="k">if</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">m</span> <span class="o"><</span> <span class="n">width</span> <span class="o">*</span> <span class="n">height</span> <span class="ow">and</span> <span class="n">raw</span><span class="p">[</span><span class="n">m</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'#'</span><span class="p">]</span>
<span class="n">hikes</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">begin</span><span class="p">,</span> <span class="n">end</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">maze</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">list</span><span class="p">(</span><span class="n">maze</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">explore</span> <span class="o">=</span> <span class="p">[</span><span class="n">begin</span><span class="p">]</span>
<span class="n">visited</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="n">explore</span><span class="p">:</span>
<span class="k">while</span> <span class="n">explore</span> <span class="ow">and</span> <span class="n">end</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
<span class="k">while</span> <span class="n">visited</span> <span class="ow">and</span> <span class="n">explore</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">maze</span><span class="p">[</span><span class="n">visited</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]:</span>
<span class="n">visited</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="n">tile</span> <span class="o">=</span> <span class="n">explore</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="n">visited</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tile</span><span class="p">)</span>
<span class="n">explore</span><span class="o">.</span><span class="n">extend</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="n">maze</span><span class="p">[</span><span class="n">tile</span><span class="p">]</span>
<span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">visited</span> <span class="ow">and</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">explore</span><span class="p">])</span>
<span class="k">if</span> <span class="n">end</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
<span class="n">hikes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">visited</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">explore</span><span class="p">:</span>
<span class="k">while</span> <span class="n">visited</span> <span class="ow">and</span> <span class="n">explore</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">maze</span><span class="p">[</span><span class="n">visited</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]]:</span>
<span class="n">visited</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">hikes</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code>
</code></pre></div>Day 16 - Advent of Code 20232023-12-16T21:00:00+10:002023-12-16T21:00:00+10:00Mark Westetag:www.styleincode.fun,2023-12-16:/day-16-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 16 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/16/">solutions</a> for the day 16 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_16_01.py """</span>
<span class="c1"># usage: python3 day_16_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">height</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">//</span> <span class="p">(</span><span class="n">width</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">device</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="n">data</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">exited</span><span class="p">(</span><span class="n">u</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" left device """</span>
<span class="k">return</span> <span class="ow">not</span> <span class="p">(</span><span class="mi">0</span> <span class="o"><=</span> <span class="n">u</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><</span> <span class="n">height</span> <span class="ow">and</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">u</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o"><</span> <span class="n">width</span><span class="p">)</span>
<span class="n">visited</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">beams</span> <span class="o">=</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> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]]</span>
<span class="k">while</span> <span class="n">beams</span><span class="p">:</span>
<span class="n">add</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">delete</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">pos</span><span class="p">,</span> <span class="n">heading</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">beams</span><span class="p">):</span>
<span class="n">next_pos</span> <span class="o">=</span> <span class="n">pos</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">heading</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">heading</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">exited</span><span class="p">(</span><span class="n">next_pos</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[</span><span class="n">next_pos</span><span class="p">,</span> <span class="n">heading</span><span class="p">]</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
<span class="n">delete</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">continue</span>
<span class="n">visited</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">next_pos</span><span class="p">,</span> <span class="n">heading</span><span class="p">])</span>
<span class="n">beams</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">next_pos</span>
<span class="n">tile</span> <span class="o">=</span> <span class="n">device</span><span class="p">[</span><span class="n">next_pos</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">width</span> <span class="o">+</span> <span class="n">next_pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">tile</span> <span class="o">==</span> <span class="s1">'|'</span> <span class="ow">and</span> <span class="n">heading</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="p">:</span>
<span class="n">beams</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</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="n">add</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">next_pos</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)])</span>
<span class="k">if</span> <span class="n">tile</span> <span class="o">==</span> <span class="s1">'-'</span> <span class="ow">and</span> <span class="n">heading</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>
<span class="n">beams</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</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>
<span class="n">add</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">next_pos</span><span class="p">,</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)])</span>
<span class="k">if</span> <span class="n">tile</span> <span class="o">==</span> <span class="s1">'/'</span><span class="p">:</span>
<span class="n">beams</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="n">heading</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="o">-</span><span class="n">heading</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">tile</span> <span class="o">==</span> <span class="s1">'</span><span class="se">\\</span><span class="s1">'</span><span class="p">:</span>
<span class="n">beams</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">heading</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">heading</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">beams</span> <span class="o">=</span> <span class="p">[</span><span class="n">beam</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">beam</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">beams</span><span class="p">)</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">delete</span><span class="p">]</span>
<span class="n">beams</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">add</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">({</span><span class="n">pos</span> <span class="k">for</span> <span class="n">pos</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">}))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_16_02.py """</span>
<span class="c1"># usage: python3 day_16_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">height</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">//</span> <span class="p">(</span><span class="n">width</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">device</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="n">data</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">exited</span><span class="p">(</span><span class="n">u</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" left device """</span>
<span class="k">return</span> <span class="ow">not</span> <span class="p">(</span><span class="mi">0</span> <span class="o"><=</span> <span class="n">u</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><</span> <span class="n">height</span> <span class="ow">and</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">u</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o"><</span> <span class="n">width</span><span class="p">)</span>
<span class="n">entries</span> <span class="o">=</span> <span class="p">[[(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">i</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</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="n">width</span><span class="p">)]</span> <span class="o">+</span> \
<span class="p">[[(</span><span class="n">i</span><span class="p">,</span> <span class="n">width</span><span class="p">),</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> <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="n">height</span><span class="p">)]</span> <span class="o">+</span> \
<span class="p">[[(</span><span class="n">height</span><span class="p">,</span> <span class="n">i</span><span class="p">),</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="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">width</span><span class="p">)]</span> <span class="o">+</span> \
<span class="p">[[(</span><span class="n">i</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</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="n">height</span><span class="p">)]</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">entries</span><span class="p">:</span>
<span class="n">visited</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">beams</span> <span class="o">=</span> <span class="p">[</span><span class="n">entry</span><span class="p">]</span>
<span class="k">while</span> <span class="n">beams</span><span class="p">:</span>
<span class="n">add</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">delete</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">pos</span><span class="p">,</span> <span class="n">heading</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">beams</span><span class="p">):</span>
<span class="n">next_pos</span> <span class="o">=</span> <span class="n">pos</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">heading</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">heading</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">exited</span><span class="p">(</span><span class="n">next_pos</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[</span><span class="n">next_pos</span><span class="p">,</span> <span class="n">heading</span><span class="p">]</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
<span class="n">delete</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">continue</span>
<span class="n">visited</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">next_pos</span><span class="p">,</span> <span class="n">heading</span><span class="p">])</span>
<span class="n">beams</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">next_pos</span>
<span class="n">tile</span> <span class="o">=</span> <span class="n">device</span><span class="p">[</span><span class="n">next_pos</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">width</span> <span class="o">+</span> <span class="n">next_pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">tile</span> <span class="o">==</span> <span class="s1">'|'</span> <span class="ow">and</span> <span class="n">heading</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="p">:</span>
<span class="n">beams</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</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="n">add</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">next_pos</span><span class="p">,</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">)])</span>
<span class="k">if</span> <span class="n">tile</span> <span class="o">==</span> <span class="s1">'-'</span> <span class="ow">and</span> <span class="n">heading</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>
<span class="n">beams</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</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>
<span class="n">add</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">next_pos</span><span class="p">,</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)])</span>
<span class="k">if</span> <span class="n">tile</span> <span class="o">==</span> <span class="s1">'/'</span><span class="p">:</span>
<span class="n">beams</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="n">heading</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="o">-</span><span class="n">heading</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">tile</span> <span class="o">==</span> <span class="s1">'</span><span class="se">\\</span><span class="s1">'</span><span class="p">:</span>
<span class="n">beams</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">heading</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">heading</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">beams</span> <span class="o">=</span> <span class="p">[</span><span class="n">beam</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">beam</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">beams</span><span class="p">)</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">delete</span><span class="p">]</span>
<span class="n">beams</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">add</span><span class="p">)</span>
<span class="n">answer</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">answer</span><span class="p">,</span> <span class="nb">len</span><span class="p">({</span><span class="n">pos</span> <span class="k">for</span> <span class="n">pos</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">}))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>Day 15 - Advent of Code 20232023-12-15T19:45:00+10:002023-12-15T19:45:00+10:00Mark Westetag:www.styleincode.fun,2023-12-15:/day-15-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 15 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/15/">solutions</a> for the day 15 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_15_01.py """</span>
<span class="c1"># usage: python3 day_15_01.py < input</span>
<span class="k">def</span> <span class="nf">digest</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" hash per puzzle description """</span>
<span class="n">value</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="p">((</span><span class="n">value</span> <span class="o">+</span> <span class="nb">ord</span><span class="p">(</span><span class="n">t</span><span class="p">))</span> <span class="o">*</span> <span class="mi">17</span><span class="p">)</span> <span class="o">%</span> <span class="mi">256</span>
<span class="k">return</span> <span class="n">value</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">input</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">):</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="n">digest</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_15_02.py """</span>
<span class="c1"># usage: python3 day_15_02.py < input</span>
<span class="k">def</span> <span class="nf">digest</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" hash per puzzle description """</span>
<span class="n">value</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="p">((</span><span class="n">value</span> <span class="o">+</span> <span class="nb">ord</span><span class="p">(</span><span class="n">t</span><span class="p">))</span> <span class="o">*</span> <span class="mi">17</span><span class="p">)</span> <span class="o">%</span> <span class="mi">256</span>
<span class="k">return</span> <span class="n">value</span>
<span class="n">boxes</span> <span class="o">=</span> <span class="p">[[]</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">256</span><span class="p">)]</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="nb">input</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">):</span>
<span class="k">if</span> <span class="n">item</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">'-'</span><span class="p">):</span>
<span class="n">label</span> <span class="o">=</span> <span class="n">item</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">box</span> <span class="o">=</span> <span class="n">digest</span><span class="p">(</span><span class="n">label</span><span class="p">)</span>
<span class="n">boxes</span><span class="p">[</span><span class="n">box</span><span class="p">]</span> <span class="o">=</span> <span class="p">[(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">boxes</span><span class="p">[</span><span class="n">box</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="n">label</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">label</span><span class="p">,</span> <span class="n">focal_length</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'='</span><span class="p">)</span>
<span class="n">box</span> <span class="o">=</span> <span class="n">digest</span><span class="p">(</span><span class="n">label</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">j</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="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">boxes</span><span class="p">[</span><span class="n">box</span><span class="p">]]</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">label</span><span class="p">)</span>
<span class="n">boxes</span><span class="p">[</span><span class="n">box</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">focal_length</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="n">boxes</span><span class="p">[</span><span class="n">box</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">label</span><span class="p">,</span> <span class="n">focal_length</span><span class="p">))</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">box</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">boxes</span><span class="p">):</span>
<span class="k">for</span> <span class="n">j</span><span class="p">,</span> <span class="p">(</span><span class="n">_</span><span class="p">,</span> <span class="n">focal_length</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">box</span><span class="p">):</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">j</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="nb">int</span><span class="p">(</span><span class="n">focal_length</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>Day 14 - Advent of Code 20232023-12-14T15:15:00+10:002023-12-14T15:15:00+10:00Mark Westetag:www.styleincode.fun,2023-12-14:/day-14-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 14 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/14/">solutions</a> for the day 14 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_14_01.py """</span>
<span class="c1"># usage: python3 day_14_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">raw</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="n">raw</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">),</span> <span class="n">raw</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)</span>
<span class="n">platform</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="n">raw</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">]</span>
<span class="n">rounded</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="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">platform</span><span class="p">)</span> <span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="s1">'O'</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">tilt_north</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" move rock north if possible """</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">x</span> <span class="o">-</span> <span class="n">width</span>
<span class="k">return</span> <span class="n">y</span> <span class="k">if</span> <span class="n">y</span> <span class="o">></span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">platform</span><span class="p">[</span><span class="n">y</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'.'</span> <span class="k">else</span> <span class="n">x</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">rounded</span><span class="p">):</span>
<span class="n">platform</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'.'</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">tilt_north</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
<span class="k">while</span> <span class="n">j</span> <span class="o">!=</span> <span class="n">k</span><span class="p">:</span>
<span class="n">j</span> <span class="o">=</span> <span class="n">k</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">tilt_north</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
<span class="n">rounded</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">j</span>
<span class="n">platform</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'O'</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">height</span> <span class="o">-</span> <span class="n">i</span> <span class="o">//</span> <span class="n">width</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">rounded</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code>
</code></pre></div>Day 12 - Advent of Code 20232023-12-12T21:00:00+10:002023-12-12T21:00:00+10:00Mark Westetag:www.styleincode.fun,2023-12-12:/day-12-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 12 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/12/">solutions</a> for the day 12 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_12_01.py """</span>
<span class="c1"># usage: python3 day_12_01.py < input</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">template</span><span class="p">,</span> <span class="n">recipe</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">recipe</span> <span class="o">=</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">recipe</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)))</span>
<span class="n">u</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="sa">r</span><span class="s1">'\.+'</span><span class="p">,</span> <span class="sa">r</span><span class="s1">'\.*'</span>
<span class="n">expr</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">v</span> <span class="o">+</span> <span class="n">u</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">i</span> <span class="o">*</span> <span class="s1">'#'</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">recipe</span><span class="p">])</span> <span class="o">+</span> <span class="n">v</span><span class="p">)</span>
<span class="n">n</span> <span class="o">=</span> <span class="n">template</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'?'</span><span class="p">)</span>
<span class="n">hashes</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="n">recipe</span><span class="p">)</span> <span class="o">-</span> <span class="n">template</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'#'</span><span class="p">)</span>
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">filterfalse</span><span class="p">(</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'#'</span><span class="p">)</span> <span class="o">!=</span> <span class="n">hashes</span><span class="p">,</span>
<span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="s1">'.#'</span><span class="p">,</span> <span class="n">repeat</span><span class="o">=</span><span class="n">n</span><span class="p">)):</span>
<span class="n">q</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
<span class="n">item</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">i</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="s1">'?'</span> <span class="k">else</span> <span class="n">q</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">template</span><span class="p">])</span>
<span class="k">if</span> <span class="n">expr</span><span class="o">.</span><span class="n">fullmatch</span><span class="p">(</span><span class="n">item</span><span class="p">):</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code>
</code></pre></div>Day 11 - Advent of Code 20232023-12-11T17:00:00+10:002023-12-11T17:00:00+10:00Mark Westetag:www.styleincode.fun,2023-12-11:/day-11-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 11 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/11/">solutions</a> for the day 11 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_11_01.py """</span>
<span class="c1"># usage: python3 day_11_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">combinations</span>
<span class="n">image</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">image</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">rstrip</span><span class="p">())</span>
<span class="n">height</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">height</span>
<span class="n">rows</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="n">height</span><span class="p">)</span>
<span class="k">if</span> <span class="n">image</span><span class="p">[</span><span class="n">i</span> <span class="o">*</span> <span class="n">width</span><span class="p">:(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">width</span><span class="p">]</span> <span class="o">==</span> <span class="n">width</span> <span class="o">*</span> <span class="p">[</span><span class="s1">'.'</span><span class="p">]]</span>
<span class="n">cols</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="n">width</span><span class="p">)</span>
<span class="k">if</span> <span class="p">[</span><span class="n">image</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="n">j</span> <span class="o">*</span> <span class="n">width</span><span class="p">]</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">height</span><span class="p">)]</span> <span class="o">==</span> <span class="n">width</span> <span class="o">*</span> <span class="p">[</span><span class="s1">'.'</span><span class="p">]]</span>
<span class="n">new_image</span> <span class="o">=</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="n">height</span><span class="p">):</span>
<span class="n">new_image</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">image</span><span class="p">[</span><span class="n">i</span> <span class="o">*</span> <span class="n">width</span><span class="p">:</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">width</span><span class="p">])</span>
<span class="k">if</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">:</span>
<span class="n">new_image</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">width</span> <span class="o">*</span> <span class="s1">'.'</span><span class="p">)</span>
<span class="n">height</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">rows</span><span class="p">)</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">new_image</span>
<span class="n">new_image</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">image</span><span class="p">):</span>
<span class="n">new_image</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">%</span> <span class="n">width</span> <span class="ow">in</span> <span class="n">cols</span><span class="p">:</span>
<span class="n">new_image</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)</span>
<span class="n">width</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">cols</span><span class="p">)</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">new_image</span>
<span class="n">galaxies</span> <span class="o">=</span> <span class="p">[</span><span class="nb">divmod</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">image</span><span class="p">)</span> <span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="s1">'#'</span><span class="p">]</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">combinations</span><span class="p">(</span><span class="n">galaxies</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="nb">abs</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">y</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_11_02.py """</span>
<span class="c1"># usage: python3 day_11_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">combinations</span>
<span class="n">scale</span> <span class="o">=</span> <span class="mi">1000000</span>
<span class="n">image</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">image</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">rstrip</span><span class="p">())</span>
<span class="n">height</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">height</span>
<span class="n">galaxies</span> <span class="o">=</span> <span class="p">[</span><span class="nb">divmod</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">image</span><span class="p">)</span> <span class="k">if</span> <span class="n">j</span> <span class="o">==</span> <span class="s1">'#'</span><span class="p">]</span>
<span class="n">rows</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="n">height</span><span class="p">)</span>
<span class="k">if</span> <span class="n">image</span><span class="p">[</span><span class="n">i</span> <span class="o">*</span> <span class="n">width</span><span class="p">:(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="n">width</span><span class="p">]</span> <span class="o">==</span> <span class="n">width</span> <span class="o">*</span> <span class="p">[</span><span class="s1">'.'</span><span class="p">]]</span>
<span class="n">cols</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="n">width</span><span class="p">)</span>
<span class="k">if</span> <span class="p">[</span><span class="n">image</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="n">j</span> <span class="o">*</span> <span class="n">width</span><span class="p">]</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">height</span><span class="p">)]</span> <span class="o">==</span> <span class="n">width</span> <span class="o">*</span> <span class="p">[</span><span class="s1">'.'</span><span class="p">]]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">rows</span><span class="p">):</span>
<span class="n">galaxies</span> <span class="o">=</span> <span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="k">if</span> <span class="n">x</span> <span class="o"><</span> <span class="n">i</span> <span class="k">else</span> <span class="p">(</span><span class="n">scale</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">galaxies</span><span class="p">]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">cols</span><span class="p">):</span>
<span class="n">galaxies</span> <span class="o">=</span> <span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="k">if</span> <span class="n">y</span> <span class="o"><</span> <span class="n">i</span> <span class="k">else</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">scale</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">y</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">galaxies</span><span class="p">]</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">combinations</span><span class="p">(</span><span class="n">galaxies</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="nb">abs</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">y</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>Day 10 - Advent of Code 20232023-12-11T08:30:00+10:002023-12-11T08:30:00+10:00Mark Westetag:www.styleincode.fun,2023-12-11:/day-10-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 10 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/10/">solutions</a> for the day 10 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_10_01.py """</span>
<span class="c1"># usage: python3 day_10_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">deltas</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'n'</span><span class="p">:</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="s1">'e'</span><span class="p">:</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="s1">'w'</span><span class="p">:</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> <span class="s1">'s'</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="s1">'.'</span><span class="p">:</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)}</span>
<span class="k">def</span> <span class="nf">look</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" what's there """</span>
<span class="n">r</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="n">deltas</span><span class="p">[</span><span class="n">u</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">pos</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">deltas</span><span class="p">[</span><span class="n">u</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">r</span> <span class="o"><</span> <span class="n">size</span> <span class="ow">and</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">c</span> <span class="o"><</span> <span class="n">size</span><span class="p">:</span>
<span class="k">return</span> <span class="n">maze</span><span class="p">[</span><span class="n">r</span> <span class="o">*</span> <span class="n">size</span> <span class="o">+</span> <span class="n">c</span><span class="p">]</span>
<span class="k">return</span> <span class="s1">'.'</span>
<span class="n">connect</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'|'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'n'</span><span class="p">:</span> <span class="s1">'|F7'</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">:</span> <span class="s1">'L|J'</span><span class="p">},</span>
<span class="s1">'-'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'n'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">:</span> <span class="s1">'-7J'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">:</span> <span class="s1">'-LF'</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">:</span> <span class="s1">''</span><span class="p">},</span>
<span class="s1">'L'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'n'</span><span class="p">:</span> <span class="s1">'|F7'</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">:</span> <span class="s1">'-7J'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">:</span> <span class="s1">''</span><span class="p">},</span>
<span class="s1">'J'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'n'</span><span class="p">:</span> <span class="s1">'|F7'</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">:</span> <span class="s1">'-LF'</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">:</span> <span class="s1">''</span><span class="p">},</span>
<span class="s1">'7'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'n'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">:</span> <span class="s1">'-LF'</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">:</span> <span class="s1">'L|J'</span><span class="p">},</span>
<span class="s1">'F'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'n'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">:</span> <span class="s1">'-7J'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">:</span> <span class="s1">'L|J'</span><span class="p">},</span>
<span class="s1">'.'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'n'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">:</span> <span class="s1">''</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">:</span> <span class="s1">''</span><span class="p">}}</span>
<span class="n">maze</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">size</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">maze</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">rstrip</span><span class="p">())</span>
<span class="n">size</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">start</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">maze</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'S'</span><span class="p">),</span> <span class="n">size</span><span class="p">)</span>
<span class="n">pipe</span> <span class="o">=</span> <span class="p">[</span><span class="nb">set</span><span class="p">(</span><span class="n">connect</span><span class="p">[</span><span class="n">look</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">start</span><span class="p">)][</span><span class="n">j</span><span class="p">])</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="p">[[</span><span class="s1">'n'</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'e'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'w'</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'s'</span><span class="p">,</span> <span class="s1">'n'</span><span class="p">]]</span>
<span class="k">if</span> <span class="n">connect</span><span class="p">[</span><span class="n">look</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">start</span><span class="p">)][</span><span class="n">j</span><span class="p">]]</span>
<span class="n">maze</span><span class="p">[</span><span class="n">maze</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'S'</span><span class="p">)]</span> <span class="o">=</span> <span class="nb">set</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="o">*</span><span class="n">pipe</span><span class="p">)</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="n">path</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">start</span>
<span class="k">while</span> <span class="n">start</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">path</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'n'</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">look</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span> <span class="ow">in</span> <span class="n">connect</span><span class="p">[</span><span class="n">look</span><span class="p">(</span><span class="s1">'.'</span><span class="p">,</span> <span class="n">x</span><span class="p">)][</span><span class="n">i</span><span class="p">]:</span>
<span class="n">next_x</span> <span class="o">=</span> <span class="n">deltas</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">deltas</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">next_x</span> <span class="ow">in</span> <span class="n">path</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">break</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">next_x</span>
<span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code>
</code></pre></div>Day 9 - Advent of Code 20232023-12-09T17:00:00+10:002023-12-09T17:00:00+10:00Mark Westetag:www.styleincode.fun,2023-12-09:/day-9-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 9 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/09/">solutions</a> for the day 9 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_09_01.py """</span>
<span class="c1"># usage: python3 day_09_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">seqs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">seqs</span><span class="o">.</span><span class="n">append</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">line</span><span class="o">.</span><span class="n">split</span><span class="p">())))</span>
<span class="k">while</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="n">seqs</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">]:</span>
<span class="n">seq</span> <span class="o">=</span> <span class="n">seqs</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">seqs</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">seq</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">seq</span><span class="p">[</span><span class="n">i</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="nb">len</span><span class="p">(</span><span class="n">seq</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">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">seqs</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>
<span class="n">carry</span> <span class="o">=</span> <span class="n">seqs</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">seqs</span><span class="p">[</span><span class="n">i</span> <span class="o">-</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="n">seqs</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">carry</span><span class="p">)</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="n">seqs</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>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_09_02.py """</span>
<span class="c1"># usage: python3 day_09_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">seqs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">seqs</span><span class="o">.</span><span class="n">append</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">line</span><span class="o">.</span><span class="n">split</span><span class="p">())))</span>
<span class="k">while</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="n">seqs</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">]:</span>
<span class="n">seq</span> <span class="o">=</span> <span class="n">seqs</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">seqs</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="n">seq</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">seq</span><span class="p">[</span><span class="n">i</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="nb">len</span><span class="p">(</span><span class="n">seq</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">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">seqs</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>
<span class="n">carry</span> <span class="o">=</span> <span class="n">seqs</span><span class="p">[</span><span class="n">i</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="n">seqs</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">seqs</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">carry</span><span class="p">]</span> <span class="o">+</span> <span class="n">seqs</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="n">seqs</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>Day 8 - Advent of Code 20232023-12-09T07:45:00+10:002023-12-09T07:45:00+10:00Mark Westetag:www.styleincode.fun,2023-12-09:/day-8-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 8 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/08/">solutions</a> for the day 8 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_08_01.py """</span>
<span class="c1"># usage: python3 day_08_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">cycle</span>
<span class="n">instructions</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="nb">input</span><span class="p">()</span>
<span class="n">network</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">node</span><span class="p">,</span> <span class="n">other</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' = '</span><span class="p">)</span>
<span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">other</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">)</span>
<span class="n">network</span><span class="p">[</span><span class="n">node</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'L'</span><span class="p">:</span> <span class="n">left</span><span class="p">,</span> <span class="s1">'R'</span><span class="p">:</span> <span class="n">right</span><span class="p">}</span>
<span class="n">position</span><span class="p">,</span> <span class="n">steps</span> <span class="o">=</span> <span class="s1">'AAA'</span><span class="p">,</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">instruction</span> <span class="ow">in</span> <span class="n">cycle</span><span class="p">(</span><span class="n">instructions</span><span class="p">):</span>
<span class="n">position</span> <span class="o">=</span> <span class="n">network</span><span class="p">[</span><span class="n">position</span><span class="p">][</span><span class="n">instruction</span><span class="p">]</span>
<span class="n">steps</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">position</span> <span class="o">==</span> <span class="s1">'ZZZ'</span><span class="p">:</span>
<span class="k">break</span>
<span class="nb">print</span><span class="p">(</span><span class="n">steps</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_08_02.py """</span>
<span class="c1"># usage: python3 day_08_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">cycle</span>
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">lcm</span>
<span class="n">instructions</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="nb">input</span><span class="p">()</span>
<span class="n">network</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">node</span><span class="p">,</span> <span class="n">other</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' = '</span><span class="p">)</span>
<span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">other</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">)</span>
<span class="n">network</span><span class="p">[</span><span class="n">node</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'L'</span><span class="p">:</span> <span class="n">left</span><span class="p">,</span> <span class="s1">'R'</span><span class="p">:</span> <span class="n">right</span><span class="p">}</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">for</span> <span class="n">node</span> <span class="ow">in</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="n">network</span> <span class="k">if</span> <span class="n">i</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">'A'</span><span class="p">)]:</span>
<span class="n">position</span><span class="p">,</span> <span class="n">steps</span> <span class="o">=</span> <span class="n">node</span><span class="p">,</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">instruction</span> <span class="ow">in</span> <span class="n">cycle</span><span class="p">(</span><span class="n">instructions</span><span class="p">):</span>
<span class="n">position</span> <span class="o">=</span> <span class="n">network</span><span class="p">[</span><span class="n">position</span><span class="p">][</span><span class="n">instruction</span><span class="p">]</span>
<span class="n">steps</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">position</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">'Z'</span><span class="p">):</span>
<span class="k">break</span>
<span class="n">answer</span> <span class="o">=</span> <span class="n">lcm</span><span class="p">(</span><span class="n">answer</span><span class="p">,</span> <span class="n">steps</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>Day 7 - Advent of Code 20232023-12-08T18:15:00+10:002023-12-08T18:15:00+10:00Mark Westetag:www.styleincode.fun,2023-12-08:/day-7-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 7 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/07/">solutions</a> for the day 7 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_07_01.py """</span>
<span class="c1"># usage: python3 day_07_01.py < input</span>
<span class="kn">import</span> <span class="nn">functools</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">arrange</span><span class="p">(</span><span class="n">hand</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" format """</span>
<span class="n">ref</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'A'</span><span class="p">:</span> <span class="mi">14</span><span class="p">,</span> <span class="s1">'K'</span><span class="p">:</span> <span class="mi">13</span><span class="p">,</span> <span class="s1">'Q'</span><span class="p">:</span> <span class="mi">12</span><span class="p">,</span> <span class="s1">'J'</span><span class="p">:</span> <span class="mi">11</span><span class="p">,</span> <span class="s1">'T'</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s1">'9'</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
<span class="s1">'8'</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span> <span class="s1">'7'</span><span class="p">:</span> <span class="mi">7</span><span class="p">,</span> <span class="s1">'6'</span><span class="p">:</span> <span class="mi">6</span><span class="p">,</span> <span class="s1">'5'</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s1">'4'</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span> <span class="s1">'3'</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'2'</span><span class="p">:</span> <span class="mi">2</span><span class="p">}</span>
<span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">ref</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">hand</span><span class="p">]</span>
<span class="k">if</span> <span class="n">sort</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span>
<span class="k">def</span> <span class="nf">x_of_a_kind</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" x of a kind """</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">6</span> <span class="o">-</span> <span class="n">x</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">hand</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span> <span class="o">+</span> <span class="n">x</span><span class="p">]))</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">five_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" five of a kind """</span>
<span class="k">return</span> <span class="n">x_of_a_kind</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">hand</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">full_house</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" full house """</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">three_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">hand</span><span class="p">))</span> <span class="o">==</span> <span class="mi">2</span>
<span class="k">def</span> <span class="nf">four_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" four of a kind """</span>
<span class="k">return</span> <span class="n">x_of_a_kind</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">hand</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">three_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" three of a kind """</span>
<span class="k">return</span> <span class="n">x_of_a_kind</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">hand</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">two_pair</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" two pair """</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">two_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">hand</span><span class="p">))</span> <span class="o">==</span> <span class="mi">3</span>
<span class="k">def</span> <span class="nf">two_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" two of a kind """</span>
<span class="k">return</span> <span class="n">x_of_a_kind</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">hand</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">high</span><span class="p">(</span><span class="n">hand1</span><span class="p">,</span> <span class="n">hand2</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" hand1 has high card per puzzle description """</span>
<span class="n">h1</span><span class="p">,</span> <span class="n">h2</span> <span class="o">=</span> <span class="n">arrange</span><span class="p">(</span><span class="n">hand1</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">arrange</span><span class="p">(</span><span class="n">hand2</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">h1</span><span class="p">,</span> <span class="n">h2</span><span class="p">):</span>
<span class="k">if</span> <span class="n">x</span> <span class="o">></span> <span class="n">y</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">y</span> <span class="o">></span> <span class="n">x</span><span class="p">:</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">wins</span><span class="p">(</span><span class="n">hand1</span><span class="p">,</span> <span class="n">hand2</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" hand 1 wins over hand 2 """</span>
<span class="k">def</span> <span class="nf">helper</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" win, lose or draw func """</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">h1</span><span class="p">),</span> <span class="n">func</span><span class="p">(</span><span class="n">h2</span><span class="p">),</span> <span class="n">high</span><span class="p">(</span><span class="n">hand1</span><span class="p">,</span> <span class="n">hand2</span><span class="p">)</span>
<span class="n">ref</span> <span class="o">=</span> <span class="p">{(</span><span class="kc">True</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="n">z</span><span class="p">,</span> <span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="mi">1</span><span class="p">,</span>
<span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="mi">0</span><span class="p">}</span>
<span class="k">return</span> <span class="n">ref</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)]</span>
<span class="n">h1</span><span class="p">,</span> <span class="n">h2</span> <span class="o">=</span> <span class="n">arrange</span><span class="p">(</span><span class="n">hand1</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">arrange</span><span class="p">(</span><span class="n">hand2</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="p">[</span><span class="n">five_of_a_kind</span><span class="p">,</span> <span class="n">four_of_a_kind</span><span class="p">,</span> <span class="n">full_house</span><span class="p">,</span>
<span class="n">three_of_a_kind</span><span class="p">,</span> <span class="n">two_pair</span><span class="p">,</span> <span class="n">two_of_a_kind</span><span class="p">]:</span>
<span class="k">if</span> <span class="p">(</span><span class="n">outcome</span> <span class="o">:=</span> <span class="n">helper</span><span class="p">(</span><span class="n">f</span><span class="p">))</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="n">outcome</span>
<span class="k">return</span> <span class="n">high</span><span class="p">(</span><span class="n">hand1</span><span class="p">,</span> <span class="n">hand2</span><span class="p">)</span>
<span class="n">hands</span> <span class="o">=</span> <span class="p">[</span><span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">]</span>
<span class="n">hands</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">functools</span><span class="o">.</span><span class="n">cmp_to_key</span><span class="p">(</span><span class="n">wins</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">((</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="nb">int</span><span class="p">(</span><span class="n">bid</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">_</span><span class="p">,</span> <span class="n">bid</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">hands</span><span class="p">)))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_07_02.py """</span>
<span class="c1"># usage: python3 day_07_02.py < input</span>
<span class="kn">import</span> <span class="nn">functools</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">arrange</span><span class="p">(</span><span class="n">hand</span><span class="p">,</span> <span class="n">sort</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" format """</span>
<span class="n">ref</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'A'</span><span class="p">:</span> <span class="mi">14</span><span class="p">,</span> <span class="s1">'K'</span><span class="p">:</span> <span class="mi">13</span><span class="p">,</span> <span class="s1">'Q'</span><span class="p">:</span> <span class="mi">12</span><span class="p">,</span> <span class="s1">'J'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'T'</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s1">'9'</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
<span class="s1">'8'</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span> <span class="s1">'7'</span><span class="p">:</span> <span class="mi">7</span><span class="p">,</span> <span class="s1">'6'</span><span class="p">:</span> <span class="mi">6</span><span class="p">,</span> <span class="s1">'5'</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span> <span class="s1">'4'</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span> <span class="s1">'3'</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s1">'2'</span><span class="p">:</span> <span class="mi">2</span><span class="p">}</span>
<span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">ref</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">hand</span><span class="p">]</span>
<span class="k">if</span> <span class="n">sort</span><span class="p">:</span>
<span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="k">return</span> <span class="n">x</span>
<span class="k">def</span> <span class="nf">x_of_a_kind</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" x of a kind """</span>
<span class="n">h</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="n">hand</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</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">6</span> <span class="o">-</span> <span class="n">x</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">h</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span> <span class="o">+</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="p">(</span><span class="mi">5</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">h</span><span class="p">)))]))</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">hand</span> <span class="o">==</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="mi">1</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="k">def</span> <span class="nf">five_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" five of a kind """</span>
<span class="k">return</span> <span class="n">x_of_a_kind</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">hand</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">four_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" four of a kind """</span>
<span class="k">return</span> <span class="n">x_of_a_kind</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">hand</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">full_house</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" full house """</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">three_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</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="n">hand</span> <span class="k">if</span> <span class="n">i</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">))</span> <span class="o">==</span> <span class="mi">2</span>
<span class="k">def</span> <span class="nf">three_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" three of a kind """</span>
<span class="k">return</span> <span class="n">x_of_a_kind</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">hand</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">two_pair</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" two pair """</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">two_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">hand</span><span class="p">))</span> <span class="o">==</span> <span class="mi">3</span>
<span class="k">def</span> <span class="nf">two_of_a_kind</span><span class="p">(</span><span class="n">hand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" two of a kind """</span>
<span class="k">return</span> <span class="n">x_of_a_kind</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">hand</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">high</span><span class="p">(</span><span class="n">hand1</span><span class="p">,</span> <span class="n">hand2</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" hand1 has high card per puzzle description """</span>
<span class="n">h1</span><span class="p">,</span> <span class="n">h2</span> <span class="o">=</span> <span class="n">arrange</span><span class="p">(</span><span class="n">hand1</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">arrange</span><span class="p">(</span><span class="n">hand2</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">sort</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">h1</span><span class="p">,</span> <span class="n">h2</span><span class="p">):</span>
<span class="k">if</span> <span class="n">x</span> <span class="o">></span> <span class="n">y</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">y</span> <span class="o">></span> <span class="n">x</span><span class="p">:</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">wins</span><span class="p">(</span><span class="n">hand1</span><span class="p">,</span> <span class="n">hand2</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" hand 1 wins over hand 2 """</span>
<span class="k">def</span> <span class="nf">helper</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" win, lose or draw func """</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="n">h1</span><span class="p">),</span> <span class="n">func</span><span class="p">(</span><span class="n">h2</span><span class="p">),</span> <span class="n">high</span><span class="p">(</span><span class="n">hand1</span><span class="p">,</span> <span class="n">hand2</span><span class="p">)</span>
<span class="n">ref</span> <span class="o">=</span> <span class="p">{(</span><span class="kc">True</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="n">z</span><span class="p">,</span> <span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="mi">1</span><span class="p">,</span>
<span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span> <span class="mi">0</span><span class="p">}</span>
<span class="k">return</span> <span class="n">ref</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)]</span>
<span class="n">h1</span><span class="p">,</span> <span class="n">h2</span> <span class="o">=</span> <span class="n">arrange</span><span class="p">(</span><span class="n">hand1</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">arrange</span><span class="p">(</span><span class="n">hand2</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="p">[</span><span class="n">five_of_a_kind</span><span class="p">,</span> <span class="n">four_of_a_kind</span><span class="p">,</span> <span class="n">full_house</span><span class="p">,</span>
<span class="n">three_of_a_kind</span><span class="p">,</span> <span class="n">two_pair</span><span class="p">,</span> <span class="n">two_of_a_kind</span><span class="p">]:</span>
<span class="k">if</span> <span class="p">(</span><span class="n">outcome</span> <span class="o">:=</span> <span class="n">helper</span><span class="p">(</span><span class="n">f</span><span class="p">))</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="n">outcome</span>
<span class="k">return</span> <span class="n">high</span><span class="p">(</span><span class="n">hand1</span><span class="p">,</span> <span class="n">hand2</span><span class="p">)</span>
<span class="n">hands</span> <span class="o">=</span> <span class="p">[</span><span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">]</span>
<span class="n">hands</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">functools</span><span class="o">.</span><span class="n">cmp_to_key</span><span class="p">(</span><span class="n">wins</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">((</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="nb">int</span><span class="p">(</span><span class="n">bid</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">_</span><span class="p">,</span> <span class="n">bid</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">hands</span><span class="p">)))</span>
</code></pre></div>Day 6 - Advent of Code 20232023-12-06T20:00:00+10:002023-12-06T20:00:00+10:00Mark Westetag:www.styleincode.fun,2023-12-06:/day-6-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 6 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/06/">solutions</a> for the day 6 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_06_01.py """</span>
<span class="c1"># usage: python3 day_06_01.py < input</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="k">def</span> <span class="nf">travel</span><span class="p">(</span><span class="n">hold</span><span class="p">,</span> <span class="n">limit</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" travel distance """</span>
<span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="n">limit</span> <span class="o">-</span> <span class="n">hold</span><span class="p">))</span> <span class="o">*</span> <span class="n">hold</span>
<span class="n">times</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">input</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">':'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">())</span>
<span class="n">distances</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">input</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">':'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">())</span>
<span class="n">answer</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">duration</span><span class="p">,</span> <span class="n">record</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">times</span><span class="p">,</span> <span class="n">distances</span><span class="p">):</span>
<span class="n">count</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</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="n">duration</span><span class="p">)</span> <span class="k">if</span> <span class="n">travel</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">duration</span><span class="p">)</span> <span class="o">></span> <span class="n">record</span><span class="p">)</span>
<span class="n">answer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">prod</span><span class="p">(</span><span class="n">answer</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_06_02.py """</span>
<span class="c1"># usage: python3 day_06_02.py < input</span>
<span class="k">def</span> <span class="nf">travel</span><span class="p">(</span><span class="n">hold</span><span class="p">,</span> <span class="n">limit</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" travel distance """</span>
<span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="n">limit</span> <span class="o">-</span> <span class="n">hold</span><span class="p">))</span> <span class="o">*</span> <span class="n">hold</span>
<span class="n">time</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">input</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">':'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span>
<span class="n">distance</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">input</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">':'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span>
<span class="n">count</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</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="n">time</span><span class="p">)</span> <span class="k">if</span> <span class="n">travel</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">time</span><span class="p">)</span> <span class="o">></span> <span class="n">distance</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</code></pre></div>Day 5 - Advent of Code 20232023-12-05T20:00:00+10:002023-12-05T20:00:00+10:00Mark Westetag:www.styleincode.fun,2023-12-05:/day-5-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 5 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/05/">solutions</a> for the day 5 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_05_01.py """</span>
<span class="c1"># usage: python3 day_05_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">almanac</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" function almanac """</span>
<span class="k">for</span> <span class="n">destination</span><span class="p">,</span> <span class="n">source</span><span class="p">,</span> <span class="n">length</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">source</span> <span class="o"><=</span> <span class="n">x</span> <span class="o"><</span> <span class="n">source</span> <span class="o">+</span> <span class="n">length</span><span class="p">:</span>
<span class="k">return</span> <span class="n">x</span> <span class="o">-</span> <span class="n">source</span> <span class="o">+</span> <span class="n">destination</span>
<span class="k">return</span> <span class="n">x</span>
<span class="n">_</span><span class="p">,</span> <span class="n">u</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">': '</span><span class="p">)</span>
<span class="n">values</span> <span class="o">=</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">u</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
<span class="k">while</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">():</span>
<span class="n">conditions</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="p">(</span><span class="n">line</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="o">!=</span> <span class="s1">''</span><span class="p">:</span>
<span class="n">conditions</span><span class="o">.</span><span class="n">append</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">line</span><span class="o">.</span><span class="n">split</span><span class="p">())))</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">almanac</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">conditions</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">values</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">min</span><span class="p">(</span><span class="n">values</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_05_02.py """</span>
<span class="c1"># usage: python3 day_05_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">almanac</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" function almanac over range x """</span>
<span class="k">for</span> <span class="n">destination</span><span class="p">,</span> <span class="n">source</span><span class="p">,</span> <span class="n">length</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">translation</span> <span class="o">=</span> <span class="o">-</span> <span class="n">source</span> <span class="o">+</span> <span class="n">destination</span>
<span class="k">if</span> <span class="n">source</span> <span class="o"><=</span> <span class="n">x</span><span class="o">.</span><span class="n">start</span> <span class="ow">and</span> <span class="n">x</span><span class="o">.</span><span class="n">stop</span> <span class="o"><=</span> <span class="n">source</span> <span class="o">+</span> <span class="n">length</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[</span><span class="nb">range</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">start</span> <span class="o">+</span> <span class="n">translation</span><span class="p">,</span> <span class="n">x</span><span class="o">.</span><span class="n">stop</span> <span class="o">+</span> <span class="n">translation</span><span class="p">)]</span>
<span class="k">if</span> <span class="n">source</span> <span class="o"><=</span> <span class="n">x</span><span class="o">.</span><span class="n">start</span> <span class="o"><=</span> <span class="n">source</span> <span class="o">+</span> <span class="n">length</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[</span><span class="nb">range</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">start</span> <span class="o">+</span> <span class="n">translation</span><span class="p">,</span> <span class="n">destination</span> <span class="o">+</span> <span class="n">length</span><span class="p">)]</span> <span class="o">+</span> \
<span class="n">almanac</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">source</span> <span class="o">+</span> <span class="n">length</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">x</span><span class="o">.</span><span class="n">stop</span><span class="p">),</span> <span class="n">data</span><span class="p">)</span>
<span class="k">if</span> <span class="n">source</span> <span class="o"><=</span> <span class="n">x</span><span class="o">.</span><span class="n">stop</span> <span class="o"><=</span> <span class="n">source</span> <span class="o">+</span> <span class="n">length</span><span class="p">:</span>
<span class="k">return</span> <span class="n">almanac</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">start</span><span class="p">,</span> <span class="n">source</span> <span class="o">-</span> <span class="mi">1</span><span class="p">),</span> <span class="n">data</span><span class="p">)</span> <span class="o">+</span> \
<span class="p">[</span><span class="nb">range</span><span class="p">(</span><span class="n">destination</span><span class="p">,</span> <span class="n">x</span><span class="o">.</span><span class="n">stop</span> <span class="o">+</span> <span class="n">translation</span><span class="p">)]</span>
<span class="k">return</span> <span class="p">[</span><span class="n">x</span><span class="p">]</span>
<span class="n">_</span><span class="p">,</span> <span class="n">u</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">': '</span><span class="p">)</span>
<span class="n">u</span> <span class="o">=</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">u</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="nb">range</span><span class="p">(</span><span class="n">u</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">u</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">u</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</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">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">u</span><span class="p">),</span> <span class="mi">2</span><span class="p">)]</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
<span class="k">while</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">():</span>
<span class="n">conditions</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="p">(</span><span class="n">line</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="o">!=</span> <span class="s1">''</span><span class="p">:</span>
<span class="n">conditions</span><span class="o">.</span><span class="n">append</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">line</span><span class="o">.</span><span class="n">split</span><span class="p">())))</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
<span class="n">output</span> <span class="o">+=</span> <span class="n">almanac</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">conditions</span><span class="p">)</span>
<span class="n">values</span> <span class="o">=</span> <span class="n">output</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">min</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">start</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">output</span><span class="p">))</span>
</code></pre></div>Day 4 - Advent of Code 20232023-12-04T17:30:00+10:002023-12-04T17:30:00+10:00Mark Westetag:www.styleincode.fun,2023-12-04:/day-4-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 4 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/04/">solutions</a> for the day 4 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_04_01.py """</span>
<span class="c1"># usage: python3 day_04_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">process</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" card # and matches """</span>
<span class="n">label</span><span class="p">,</span> <span class="n">game</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">': '</span><span class="p">)</span>
<span class="n">_</span><span class="p">,</span> <span class="n">seq</span> <span class="o">=</span> <span class="n">label</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">game</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' | '</span><span class="p">)</span>
<span class="k">return</span> <span class="n">seq</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">split</span><span class="p">())</span> <span class="o">&</span> <span class="nb">set</span><span class="p">(</span><span class="n">y</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">_</span><span class="p">,</span> <span class="n">matches</span> <span class="o">=</span> <span class="n">process</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="k">if</span> <span class="n">matches</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="nb">pow</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">matches</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_04_02.py """</span>
<span class="c1"># usage: python3 day_04_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">process</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" card # and matches """</span>
<span class="n">label</span><span class="p">,</span> <span class="n">game</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">': '</span><span class="p">)</span>
<span class="n">_</span><span class="p">,</span> <span class="n">seq</span> <span class="o">=</span> <span class="n">label</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">game</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' | '</span><span class="p">)</span>
<span class="k">return</span> <span class="n">seq</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">split</span><span class="p">())</span> <span class="o">&</span> <span class="nb">set</span><span class="p">(</span><span class="n">y</span><span class="o">.</span><span class="n">split</span><span class="p">()))</span>
<span class="n">cards</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">num</span><span class="p">,</span> <span class="n">matches</span> <span class="o">=</span> <span class="n">process</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="n">cards</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">num</span><span class="p">)]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="n">matches</span><span class="p">]</span>
<span class="k">for</span> <span class="n">num</span><span class="p">,</span> <span class="p">(</span><span class="n">qty</span><span class="p">,</span> <span class="n">matches</span><span class="p">)</span> <span class="ow">in</span> <span class="n">cards</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">qty</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="n">num</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">num</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">+</span> <span class="n">matches</span><span class="p">):</span>
<span class="n">cards</span><span class="p">[</span><span class="n">i</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="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">cards</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
</code></pre></div>Day 3 - Advent of Code 20232023-12-03T18:00:00+10:002023-12-03T18:00:00+10:00Mark Westetag:www.styleincode.fun,2023-12-03:/day-3-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 3 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/03/">solutions</a> for the day 3 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_03_01.py """</span>
<span class="c1"># usage: python3 day_03_01.py < input</span>
<span class="kn">import</span> <span class="nn">string</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">symbol</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" is a symbol adjacent text """</span>
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s1">'width'</span><span class="p">],</span> <span class="n">data</span><span class="p">[</span><span class="s1">'height'</span><span class="p">]</span>
<span class="n">ignore</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'.'</span><span class="p">,</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">]</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">digits</span><span class="p">)</span>
<span class="n">row</span><span class="p">,</span> <span class="n">col</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">col</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">col</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</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">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
<span class="k">if</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">row</span> <span class="o">+</span> <span class="n">y</span> <span class="o"><</span> <span class="n">height</span> <span class="ow">and</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">x</span> <span class="o"><</span> <span class="n">width</span><span class="p">:</span>
<span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="s1">'plan'</span><span class="p">][(</span><span class="n">row</span> <span class="o">+</span> <span class="n">y</span><span class="p">)</span> <span class="o">*</span> <span class="n">width</span> <span class="o">+</span> <span class="n">x</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">ignore</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">schematic</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'plan'</span><span class="p">:</span> <span class="p">[],</span> <span class="s1">'width'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'height'</span><span class="p">:</span> <span class="mi">0</span><span class="p">}</span>
<span class="n">line</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">schematic</span><span class="p">[</span><span class="s1">'plan'</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="n">schematic</span><span class="p">[</span><span class="s1">'height'</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">schematic</span><span class="p">[</span><span class="s1">'width'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">char</span> <span class="k">if</span> <span class="n">char</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="k">else</span> <span class="s1">' '</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">schematic</span><span class="p">[</span><span class="s1">'plan'</span><span class="p">]]</span>
<span class="n">indexes</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="p">,</span> <span class="n">char</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">values</span><span class="p">)</span>
<span class="k">if</span> <span class="n">char</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="ow">and</span> <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">values</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">())]</span>
<span class="n">values</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">values</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">indexes</span><span class="p">,</span> <span class="n">values</span><span class="p">):</span>
<span class="k">if</span> <span class="n">symbol</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">schematic</span><span class="p">):</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_03_02.py """</span>
<span class="c1"># usage: python3 day_03_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">symbol</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" is the * symbol adjacent text """</span>
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s1">'width'</span><span class="p">],</span> <span class="n">data</span><span class="p">[</span><span class="s1">'height'</span><span class="p">]</span>
<span class="n">row</span><span class="p">,</span> <span class="n">col</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">col</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">col</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</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">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
<span class="k">if</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">row</span> <span class="o">+</span> <span class="n">y</span> <span class="o"><</span> <span class="n">height</span> <span class="ow">and</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">x</span> <span class="o"><</span> <span class="n">width</span><span class="p">:</span>
<span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="s1">'plan'</span><span class="p">][(</span><span class="n">row</span> <span class="o">+</span> <span class="n">y</span><span class="p">)</span> <span class="o">*</span> <span class="n">width</span> <span class="o">+</span> <span class="n">x</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'*'</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="n">row</span> <span class="o">+</span> <span class="n">y</span><span class="p">)</span> <span class="o">*</span> <span class="n">width</span> <span class="o">+</span> <span class="n">x</span>
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">schematic</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'plan'</span><span class="p">:</span> <span class="p">[],</span> <span class="s1">'width'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'height'</span><span class="p">:</span> <span class="mi">0</span><span class="p">}</span>
<span class="n">line</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">schematic</span><span class="p">[</span><span class="s1">'plan'</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="n">schematic</span><span class="p">[</span><span class="s1">'height'</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">schematic</span><span class="p">[</span><span class="s1">'width'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">char</span> <span class="k">if</span> <span class="n">char</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="k">else</span> <span class="s1">' '</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">schematic</span><span class="p">[</span><span class="s1">'plan'</span><span class="p">]]</span>
<span class="n">indexes</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="p">,</span> <span class="n">char</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">values</span><span class="p">)</span>
<span class="k">if</span> <span class="n">char</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="ow">and</span> <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">values</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">isspace</span><span class="p">())]</span>
<span class="n">values</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">values</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">gears</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">indexes</span><span class="p">,</span> <span class="n">values</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">j</span> <span class="o">:=</span> <span class="n">symbol</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">schematic</span><span class="p">))</span> <span class="o">></span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">gears</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">k</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
<span class="n">gears</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">k</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">gears</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="n">i</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">i</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>Day 2 - Advent of Code 20232023-12-02T18:00:00+10:002023-12-02T18:00:00+10:00Mark Westetag:www.styleincode.fun,2023-12-02:/day-2-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 2 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/02/">solutions</a> for the day 2 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_02_01.py """</span>
<span class="c1"># usage: python3 day_02_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" extract game information """</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">': '</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="n">z</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">)</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">y</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'; '</span><span class="p">)]</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="nb">dict</span><span class="p">([</span><span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">w</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)))</span> <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">z</span><span class="p">])</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">y</span><span class="p">]</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]),</span> <span class="n">y</span>
<span class="n">bag</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'red'</span><span class="p">:</span> <span class="mi">12</span><span class="p">,</span> <span class="s1">'green'</span><span class="p">:</span> <span class="mi">13</span><span class="p">,</span> <span class="s1">'blue'</span><span class="p">:</span> <span class="mi">14</span><span class="p">}</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">detail</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">game</span><span class="p">,</span> <span class="n">plays</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">detail</span><span class="p">)</span>
<span class="k">for</span> <span class="n">play</span> <span class="ow">in</span> <span class="n">plays</span><span class="p">:</span>
<span class="k">for</span> <span class="n">colour</span><span class="p">,</span> <span class="n">number</span> <span class="ow">in</span> <span class="n">play</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">okay</span> <span class="o">:=</span> <span class="n">bag</span><span class="p">[</span><span class="n">colour</span><span class="p">]</span> <span class="o">>=</span> <span class="nb">int</span><span class="p">(</span><span class="n">number</span><span class="p">)):</span>
<span class="k">break</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">okay</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="n">game</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_02_02.py """</span>
<span class="c1"># usage: python3 day_02_02.py < input</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" extract game information """</span>
<span class="n">_</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">': '</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="n">z</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">)</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">y</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'; '</span><span class="p">)]</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="nb">dict</span><span class="p">([</span><span class="nb">tuple</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">w</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' '</span><span class="p">)))</span> <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">z</span><span class="p">])</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="n">y</span><span class="p">]</span>
<span class="k">return</span> <span class="n">y</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">detail</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">plays</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">detail</span><span class="p">)</span>
<span class="n">needed</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">play</span> <span class="ow">in</span> <span class="n">plays</span><span class="p">:</span>
<span class="k">for</span> <span class="n">colour</span><span class="p">,</span> <span class="n">number</span> <span class="ow">in</span> <span class="n">play</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">needed</span><span class="p">[</span><span class="n">colour</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">needed</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">colour</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="nb">int</span><span class="p">(</span><span class="n">number</span><span class="p">))</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="n">math</span><span class="o">.</span><span class="n">prod</span><span class="p">(</span><span class="n">needed</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>Day 1 - Advent of Code 20232023-12-01T16:15:00+10:002023-12-01T16:15:00+10:00Mark Westetag:www.styleincode.fun,2023-12-01:/day-1-advent-of-code-2023.html<p>Working solutions for the Advent of Code 2023 day 1 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2023/01/">solutions</a> for the day 1 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_01_01.py """</span>
<span class="c1"># usage: python3 day_01_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">digits</span> <span class="o">=</span> <span class="p">[</span><span class="n">character</span> <span class="k">for</span> <span class="n">character</span> <span class="ow">in</span> <span class="n">line</span> <span class="k">if</span> <span class="n">character</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()]</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">digits</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">digits</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_01_02.py """</span>
<span class="c1"># usage: python3 day_01_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">text2digits</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" retain digits while converting digits expressed as words """</span>
<span class="n">ref</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'one'</span><span class="p">:</span> <span class="s1">'1'</span><span class="p">,</span> <span class="s1">'two'</span><span class="p">:</span> <span class="s1">'2'</span><span class="p">,</span> <span class="s1">'three'</span><span class="p">:</span> <span class="s1">'3'</span><span class="p">,</span> <span class="s1">'four'</span><span class="p">:</span> <span class="s1">'4'</span><span class="p">,</span>
<span class="s1">'five'</span><span class="p">:</span> <span class="s1">'5'</span><span class="p">,</span> <span class="s1">'six'</span><span class="p">:</span> <span class="s1">'6'</span><span class="p">,</span> <span class="s1">'seven'</span><span class="p">:</span> <span class="s1">'7'</span><span class="p">,</span> <span class="s1">'eight'</span><span class="p">:</span> <span class="s1">'8'</span><span class="p">,</span>
<span class="s1">'nine'</span><span class="p">:</span> <span class="s1">'9'</span><span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">character</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="k">if</span> <span class="n">character</span><span class="o">.</span><span class="n">isdigit</span><span class="p">():</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">character</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">word</span><span class="p">,</span> <span class="n">digit</span> <span class="ow">in</span> <span class="n">ref</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">text</span><span class="p">[</span><span class="n">i</span><span class="p">:]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">word</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">digit</span><span class="p">)</span>
<span class="k">break</span>
<span class="k">return</span> <span class="n">result</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">digits</span> <span class="o">=</span> <span class="n">text2digits</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">digits</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">digits</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>Day 20 - Advent of Code 20162023-11-27T10:00:00+10:002023-11-27T10:00:00+10:00Mark Westetag:www.styleincode.fun,2023-11-27:/day-20-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 20 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/20/">solutions</a> for the day 20 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_20_01.py """</span>
<span class="c1"># usage: python3 day_20_01.py < input</span>
<span class="n">rules</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">condition</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">begin</span><span class="p">,</span> <span class="n">end</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">condition</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'-'</span><span class="p">))</span>
<span class="n">rules</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">begin</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
<span class="n">limit</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">32</span><span class="p">)</span>
<span class="n">ip</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">ip</span> <span class="o"><</span> <span class="n">limit</span><span class="p">:</span>
<span class="k">for</span> <span class="n">begin</span><span class="p">,</span> <span class="n">end</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
<span class="k">if</span> <span class="n">begin</span> <span class="o"><=</span> <span class="n">ip</span> <span class="o"><=</span> <span class="n">end</span><span class="p">:</span>
<span class="n">ip</span> <span class="o">=</span> <span class="n">end</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">break</span>
<span class="nb">print</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_20_02.py """</span>
<span class="c1"># usage: python3 day_20_02.py < input</span>
<span class="n">rules</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">condition</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">begin</span><span class="p">,</span> <span class="n">end</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">condition</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'-'</span><span class="p">))</span>
<span class="n">rules</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">begin</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
<span class="n">limit</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">32</span><span class="p">)</span>
<span class="n">answer</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">ip</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">ip</span> <span class="o"><</span> <span class="n">limit</span><span class="p">:</span>
<span class="k">for</span> <span class="n">begin</span><span class="p">,</span> <span class="n">end</span> <span class="ow">in</span> <span class="n">rules</span><span class="p">:</span>
<span class="k">if</span> <span class="n">begin</span> <span class="o"><=</span> <span class="n">ip</span> <span class="o"><=</span> <span class="n">end</span><span class="p">:</span>
<span class="n">ip</span> <span class="o">=</span> <span class="n">end</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">answer</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">ip</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">)</span>
</code></pre></div>Day 19 - Advent of Code 20162023-11-26T14:30:00+10:002023-11-26T14:30:00+10:00Mark Westetag:www.styleincode.fun,2023-11-26:/day-19-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 19 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/19/">solutions</a> for the day 19 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_19_01.py """</span>
<span class="c1"># usage: python3 day_19_01.py 3014387</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">next_elf</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" next elf with gifts """</span>
<span class="k">while</span> <span class="n">circle</span><span class="p">[</span><span class="n">x</span> <span class="o">:=</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="n">elves</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">return</span> <span class="n">x</span>
<span class="n">elves</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">circle</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</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="n">elves</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)]</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">circle</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">!=</span> <span class="n">elves</span><span class="p">:</span>
<span class="n">j</span> <span class="o">=</span> <span class="n">next_elf</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="n">circle</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="n">circle</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
<span class="n">circle</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">next_elf</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="cm">/* day_19_02.c */</span>
<span class="c1">// usage: gcc -o day_19_02 day_19_02.c</span>
<span class="c1">// ./day_19_02 3014387</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdio.h></span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdlib.h></span>
<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">argc</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">argv</span><span class="p">[])</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">elves</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">atoi</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]);</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">remaining</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elves</span><span class="p">;</span>
<span class="w"> </span><span class="kt">int</span><span class="o">**</span><span class="w"> </span><span class="n">circle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="o">**</span><span class="p">)</span><span class="w"> </span><span class="n">malloc</span><span class="p">(</span><span class="n">elves</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">int</span><span class="o">*</span><span class="p">));</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">elves</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">malloc</span><span class="p">(</span><span class="mi">3</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="kt">int</span><span class="p">));</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">elves</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">elves</span><span class="p">;</span>
<span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">elves</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">elf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">other_elf</span><span class="p">;</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">circle</span><span class="p">[</span><span class="n">elf</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">elves</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">other_elf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">elf</span><span class="p">;</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">remaining</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">other_elf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">other_elf</span><span class="p">][</span><span class="mi">2</span><span class="p">];</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">elf</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">other_elf</span><span class="p">][</span><span class="mi">0</span><span class="p">];</span>
<span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">circle</span><span class="p">[</span><span class="n">other_elf</span><span class="p">][</span><span class="mi">1</span><span class="p">]][</span><span class="mi">2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">other_elf</span><span class="p">][</span><span class="mi">2</span><span class="p">];</span>
<span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">circle</span><span class="p">[</span><span class="n">other_elf</span><span class="p">][</span><span class="mi">2</span><span class="p">]][</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">other_elf</span><span class="p">][</span><span class="mi">1</span><span class="p">];</span>
<span class="w"> </span><span class="n">remaining</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="n">elf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">circle</span><span class="p">[</span><span class="n">elf</span><span class="p">][</span><span class="mi">2</span><span class="p">];</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">"%d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">elf</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">elves</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">free</span><span class="p">(</span><span class="n">circle</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">free</span><span class="p">(</span><span class="n">circle</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div>Day 18 - Advent of Code 20162023-11-25T11:00:00+10:002023-11-25T11:00:00+10:00Mark Westetag:www.styleincode.fun,2023-11-25:/day-18-advent-of-code-2016.html<p>Working solution for the Advent of Code 2016 day 18 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/18/">solution</a> for the day 18 puzzles.</p>
<h3>Parts One and Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_18_01_02.py """</span>
<span class="c1"># usage: python3 day_18_01_02.py 40 < input</span>
<span class="c1"># usage: python3 day_18_01_02.py 400000 < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">situations</span> <span class="o">=</span> <span class="p">[[</span><span class="s1">'^'</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'^'</span><span class="p">,</span> <span class="s1">'^'</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'.'</span><span class="p">,</span> <span class="s1">'.'</span><span class="p">,</span> <span class="s1">'^'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'.'</span><span class="p">,</span> <span class="s1">'^'</span><span class="p">,</span> <span class="s1">'^'</span><span class="p">]]</span>
<span class="n">rows</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">row</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'.'</span><span class="p">]</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="nb">input</span><span class="p">())</span> <span class="o">+</span> <span class="p">[</span><span class="s1">'.'</span><span class="p">]</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">rows</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">prev</span> <span class="o">=</span> <span class="n">row</span>
<span class="n">row</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'.'</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">prev</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">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">prev</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">prev</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">:</span><span class="n">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">]</span> <span class="ow">in</span> <span class="n">situations</span><span class="p">:</span>
<span class="n">row</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'^'</span>
<span class="n">count</span> <span class="o">+=</span> <span class="n">row</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'.'</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">count</span> <span class="o">-</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">rows</span><span class="p">)</span>
</code></pre></div>Day 17 - Advent of Code 20162023-11-19T12:30:00+10:002023-11-19T12:30:00+10:00Mark Westetag:www.styleincode.fun,2023-11-19:/day-17-advent-of-code-2016.html<p>Working solution for the Advent of Code 2016 day 17 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/17/">solution</a> for the day 17 puzzles.</p>
<h3>Parts One and Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_17_01_02.py """</span>
<span class="c1"># usage: python3 day_17_01_02.py udskfozm</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">hashlib</span> <span class="kn">import</span> <span class="n">md5</span>
<span class="k">def</span> <span class="nf">status</span><span class="p">(</span><span class="n">secret</span><span class="p">,</span> <span class="n">salt</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" what's the door status """</span>
<span class="n">digest</span> <span class="o">=</span> <span class="n">md5</span><span class="p">()</span>
<span class="n">digest</span><span class="o">.</span><span class="n">update</span><span class="p">((</span><span class="n">secret</span> <span class="o">+</span> <span class="n">salt</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
<span class="k">return</span> <span class="p">[</span><span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="s1">'bcdef'</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">digest</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()[:</span><span class="mi">4</span><span class="p">]]</span>
<span class="k">def</span> <span class="nf">move</span><span class="p">(</span><span class="n">pos</span><span class="p">,</span> <span class="n">goal</span><span class="p">,</span> <span class="n">secret</span><span class="p">,</span> <span class="n">steps</span><span class="o">=</span><span class="s1">''</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" move to goal """</span>
<span class="k">global</span> <span class="n">solution</span>
<span class="k">if</span> <span class="n">pos</span> <span class="o">==</span> <span class="n">goal</span><span class="p">:</span>
<span class="k">return</span> <span class="n">pos</span><span class="p">,</span> <span class="n">steps</span>
<span class="n">deltas</span> <span class="o">=</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="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</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> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
<span class="n">symbols</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'U'</span><span class="p">,</span> <span class="s1">'D'</span><span class="p">,</span> <span class="s1">'L'</span><span class="p">,</span> <span class="s1">'R'</span><span class="p">]</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">locked</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">status</span><span class="p">(</span><span class="n">secret</span><span class="p">,</span> <span class="n">steps</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">locked</span><span class="p">:</span>
<span class="k">continue</span>
<span class="n">row</span> <span class="o">=</span> <span class="n">pos</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">deltas</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">col</span> <span class="o">=</span> <span class="n">pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">deltas</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">row</span> <span class="o"><=</span> <span class="mi">3</span> <span class="ow">and</span> <span class="mi">0</span> <span class="o"><=</span> <span class="n">col</span> <span class="o"><=</span> <span class="mi">3</span><span class="p">:</span>
<span class="n">next_pos</span> <span class="o">=</span> <span class="n">row</span><span class="p">,</span> <span class="n">col</span>
<span class="n">next_steps</span> <span class="o">=</span> <span class="n">steps</span> <span class="o">+</span> <span class="n">symbols</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
<span class="n">end_pos</span><span class="p">,</span> <span class="n">end_steps</span> <span class="o">=</span> <span class="n">move</span><span class="p">(</span><span class="n">next_pos</span><span class="p">,</span> <span class="n">goal</span><span class="p">,</span> <span class="n">secret</span><span class="p">,</span> <span class="n">next_steps</span><span class="p">)</span>
<span class="k">if</span> <span class="n">end_pos</span> <span class="o">==</span> <span class="n">goal</span><span class="p">:</span>
<span class="k">if</span> <span class="n">solution</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">''</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">end_steps</span><span class="p">)</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span>
<span class="n">solution</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">end_steps</span>
<span class="k">if</span> <span class="n">solution</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">''</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">end_steps</span><span class="p">)</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="p">[</span><span class="mi">1</span><span class="p">]):</span>
<span class="n">solution</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">end_steps</span>
<span class="k">return</span> <span class="n">pos</span><span class="p">,</span> <span class="n">steps</span>
<span class="n">passcode</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">start</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="n">end</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">3</span>
<span class="n">solution</span> <span class="o">=</span> <span class="p">[</span><span class="s1">''</span><span class="p">,</span> <span class="s1">''</span><span class="p">]</span>
<span class="n">move</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">passcode</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">solution</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">solution</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
</code></pre></div>Day 16 - Advent of Code 20162023-11-11T11:30:00+10:002023-11-11T11:30:00+10:00Mark Westetag:www.styleincode.fun,2023-11-11:/day-16-advent-of-code-2016.html<p>Working solution for the Advent of Code 2016 day 16 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/16/">solution</a> for the day 16 puzzles.</p>
<h3>Parts One and Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_16_01_02.py """</span>
<span class="c1"># usage: python3 day_16_01_02.py 272 10001110011110000</span>
<span class="c1"># usage: python3 day_16_01_02.py 35651584 10001110011110000</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">disk_size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">state</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="n">disk</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'0'</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">disk_size</span><span class="p">)]</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">data</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">state</span><span class="p">):</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">disk_size</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">disk</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">data</span>
<span class="n">index</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">state</span><span class="p">)</span>
<span class="k">while</span> <span class="n">index</span> <span class="o"><</span> <span class="n">disk_size</span><span class="p">:</span>
<span class="n">disk</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'0'</span>
<span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">disk</span><span class="p">[:</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]):</span>
<span class="k">if</span> <span class="n">index</span> <span class="o">==</span> <span class="n">disk_size</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">disk</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'1'</span> <span class="k">if</span> <span class="n">data</span> <span class="o">==</span> <span class="s1">'0'</span> <span class="k">else</span> <span class="s1">'0'</span>
<span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">data</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">disk</span><span class="p">)</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">checksum</span> <span class="o">=</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">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span>
<span class="n">chunk</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">]</span>
<span class="n">checksum</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'1'</span> <span class="k">if</span> <span class="n">chunk</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'00'</span><span class="p">,</span> <span class="s1">'11'</span><span class="p">]</span> <span class="k">else</span> <span class="s1">'0'</span><span class="p">)</span>
<span class="n">checksum</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">checksum</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">checksum</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">checksum</span>
<span class="nb">print</span><span class="p">(</span><span class="n">checksum</span><span class="p">)</span>
</code></pre></div>Day 15 - Advent of Code 20162023-11-08T19:15:00+10:002023-11-08T19:15:00+10:00Mark Westetag:www.styleincode.fun,2023-11-08:/day-15-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 15 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/15/">solutions</a> for the day 15 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_15_01.py """</span>
<span class="c1"># usage: python3 day_15_01.py < input</span>
<span class="n">discs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">atoms</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">total</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="n">position</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</span><span class="p">[</span><span class="mi">11</span><span class="p">][:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">discs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">position</span><span class="p">,</span> <span class="n">total</span><span class="p">))</span>
<span class="n">t</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">check</span> <span class="o">=</span> <span class="p">[</span><span class="kc">False</span><span class="p">]</span>
<span class="k">while</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span><span class="n">check</span><span class="p">):</span>
<span class="n">t</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">check</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">position</span><span class="p">,</span> <span class="n">total</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">discs</span><span class="p">):</span>
<span class="n">discs</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">((</span><span class="n">position</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="n">total</span><span class="p">,</span> <span class="n">total</span><span class="p">)</span>
<span class="n">check</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">total</span> <span class="o">-</span> <span class="p">(</span><span class="n">position</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">==</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="n">total</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_15_02.py """</span>
<span class="c1"># usage: python3 day_15_02.py < input</span>
<span class="n">discs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">atoms</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">total</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="n">position</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</span><span class="p">[</span><span class="mi">11</span><span class="p">][:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">discs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">position</span><span class="p">,</span> <span class="n">total</span><span class="p">))</span>
<span class="n">discs</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">11</span><span class="p">))</span>
<span class="n">t</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">check</span> <span class="o">=</span> <span class="p">[</span><span class="kc">False</span><span class="p">]</span>
<span class="k">while</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span><span class="n">check</span><span class="p">):</span>
<span class="n">t</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">check</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">position</span><span class="p">,</span> <span class="n">total</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">discs</span><span class="p">):</span>
<span class="n">discs</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="p">((</span><span class="n">position</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="n">total</span><span class="p">,</span> <span class="n">total</span><span class="p">)</span>
<span class="n">check</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">total</span> <span class="o">-</span> <span class="p">(</span><span class="n">position</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">==</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="n">total</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">t</span><span class="p">)</span>
</code></pre></div>Day 14 - Advent of Code 20162023-11-04T15:30:00+10:002023-11-04T15:30:00+10:00Mark Westetag:www.styleincode.fun,2023-11-04:/day-14-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 14 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/14/">solutions</a> for the day 14 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_14_01.py """</span>
<span class="c1"># usage: python3 day_14_01.py "ihaygndm"</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">hashlib</span> <span class="kn">import</span> <span class="n">md5</span>
<span class="k">def</span> <span class="nf">n_tuple</span><span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" determine if n-tuple of single character occurs """</span>
<span class="k">for</span> <span class="n">pos</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">text</span><span class="p">[:</span><span class="mi">1</span> <span class="o">-</span> <span class="n">num</span><span class="p">]):</span>
<span class="n">chunk</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="n">pos</span><span class="p">:</span><span class="n">pos</span> <span class="o">+</span> <span class="n">num</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">chunk</span><span class="p">))</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">if</span> <span class="n">chunk</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">text</span><span class="p">[</span><span class="n">pos</span> <span class="o">+</span> <span class="n">num</span><span class="p">:</span><span class="n">pos</span> <span class="o">+</span> <span class="n">num</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]:</span>
<span class="k">return</span> <span class="n">chunk</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="s1">''</span>
<span class="k">def</span> <span class="nf">triple</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" determine if triple of single character occurs """</span>
<span class="k">return</span> <span class="n">n_tuple</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">quintuple</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" determine if quintuple of single character occurs """</span>
<span class="k">return</span> <span class="n">n_tuple</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">md5_digest</span><span class="p">(</span><span class="n">salt_arg</span><span class="p">,</span> <span class="n">index_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" generate digest """</span>
<span class="n">digest</span> <span class="o">=</span> <span class="n">md5</span><span class="p">()</span>
<span class="n">digest</span><span class="o">.</span><span class="n">update</span><span class="p">((</span><span class="n">salt_arg</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">index_arg</span><span class="p">))</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
<span class="k">return</span> <span class="n">digest</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
<span class="n">salt</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">goal</span> <span class="o">=</span> <span class="mi">64</span>
<span class="n">answer</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">keys</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">index</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">keys</span> <span class="o"><</span> <span class="n">goal</span><span class="p">:</span>
<span class="n">hexdigest5</span> <span class="o">=</span> <span class="n">md5_digest</span><span class="p">(</span><span class="n">salt</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="n">digit</span> <span class="o">:=</span> <span class="n">quintuple</span><span class="p">(</span><span class="n">hexdigest5</span><span class="p">))</span> <span class="o">!=</span> <span class="s1">''</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="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">index</span> <span class="o">-</span> <span class="mi">1001</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">hexdigest3</span> <span class="o">=</span> <span class="n">md5_digest</span><span class="p">(</span><span class="n">salt</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
<span class="k">if</span> <span class="n">digit</span> <span class="o">==</span> <span class="n">triple</span><span class="p">(</span><span class="n">hexdigest3</span><span class="p">):</span>
<span class="n">answer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="n">keys</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">answer</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">[</span><span class="n">goal</span> <span class="o">-</span> <span class="mi">1</span><span class="p">])</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_14_02.py """</span>
<span class="c1"># usage: python3 day_14_02.py "ihaygndm"</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">hashlib</span> <span class="kn">import</span> <span class="n">md5</span>
<span class="k">def</span> <span class="nf">n_tuple</span><span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" determine if n-tuple of single character occurs """</span>
<span class="k">for</span> <span class="n">pos</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">text</span><span class="p">[:</span><span class="mi">1</span> <span class="o">-</span> <span class="n">num</span><span class="p">]):</span>
<span class="n">chunk</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="n">pos</span><span class="p">:</span><span class="n">pos</span> <span class="o">+</span> <span class="n">num</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">chunk</span><span class="p">))</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">if</span> <span class="n">chunk</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">text</span><span class="p">[</span><span class="n">pos</span> <span class="o">+</span> <span class="n">num</span><span class="p">:</span><span class="n">pos</span> <span class="o">+</span> <span class="n">num</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]:</span>
<span class="k">return</span> <span class="n">chunk</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">return</span> <span class="s1">''</span>
<span class="k">def</span> <span class="nf">triple</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" determine if triple of single character occurs """</span>
<span class="k">return</span> <span class="n">n_tuple</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">quintuple</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" determine if quintuple of single character occurs """</span>
<span class="k">return</span> <span class="n">n_tuple</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">md5_digest</span><span class="p">(</span><span class="n">salt_arg</span><span class="p">,</span> <span class="n">index_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" generate digest """</span>
<span class="n">digest</span> <span class="o">=</span> <span class="n">md5</span><span class="p">()</span>
<span class="n">digest</span><span class="o">.</span><span class="n">update</span><span class="p">((</span><span class="n">salt_arg</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">index_arg</span><span class="p">))</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2016</span><span class="p">):</span>
<span class="n">md</span> <span class="o">=</span> <span class="n">digest</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
<span class="n">digest</span> <span class="o">=</span> <span class="n">md5</span><span class="p">()</span>
<span class="n">digest</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">md</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
<span class="k">return</span> <span class="n">digest</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
<span class="n">salt</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">goal</span> <span class="o">=</span> <span class="mi">64</span>
<span class="n">answer</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">keys</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">index</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">keys</span> <span class="o"><</span> <span class="n">goal</span><span class="p">:</span>
<span class="n">hexdigest5</span> <span class="o">=</span> <span class="n">md5_digest</span><span class="p">(</span><span class="n">salt</span><span class="p">,</span> <span class="n">index</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="n">digit</span> <span class="o">:=</span> <span class="n">quintuple</span><span class="p">(</span><span class="n">hexdigest5</span><span class="p">))</span> <span class="o">!=</span> <span class="s1">''</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="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">index</span> <span class="o">-</span> <span class="mi">1001</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">hexdigest3</span> <span class="o">=</span> <span class="n">md5_digest</span><span class="p">(</span><span class="n">salt</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
<span class="k">if</span> <span class="n">digit</span> <span class="o">==</span> <span class="n">triple</span><span class="p">(</span><span class="n">hexdigest3</span><span class="p">):</span>
<span class="n">answer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="n">keys</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">answer</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="n">answer</span><span class="p">[</span><span class="n">goal</span> <span class="o">-</span> <span class="mi">1</span><span class="p">])</span>
</code></pre></div>Day 12 - Advent of Code 20162023-11-04T10:45:00+10:002023-11-04T10:45:00+10:00Mark Westetag:www.styleincode.fun,2023-11-04:/day-12-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 12 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/12/">solutions</a> for the day 12 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_12_01.py """</span>
<span class="c1"># usage: python3 day_12_01.py < input</span>
<span class="n">registers</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'a'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'c'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">:</span> <span class="mi">0</span><span class="p">}</span>
<span class="n">code</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">operation</span><span class="p">,</span> <span class="o">*</span><span class="n">atoms</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">code</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">operation</span><span class="p">,</span> <span class="n">atoms</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">counter</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">code</span><span class="p">):</span>
<span class="n">operation</span><span class="p">,</span> <span class="n">atoms</span> <span class="o">=</span> <span class="n">code</span><span class="p">[</span><span class="n">counter</span><span class="p">]</span>
<span class="k">match</span> <span class="n">operation</span><span class="p">:</span>
<span class="k">case</span> <span class="s1">'inc'</span><span class="p">:</span>
<span class="n">registers</span><span class="p">[</span><span class="n">atoms</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="k">case</span> <span class="s1">'dec'</span><span class="p">:</span>
<span class="n">registers</span><span class="p">[</span><span class="n">atoms</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="k">case</span> <span class="s1">'cpy'</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">registers</span><span class="p">[</span><span class="n">atoms</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="n">registers</span><span class="p">[</span><span class="n">atoms</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">registers</span><span class="p">[</span><span class="n">atoms</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
<span class="k">case</span> <span class="s1">'jnz'</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">registers</span><span class="p">[</span><span class="n">atoms</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="p">:</span>
<span class="n">counter</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</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="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</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="p">:</span>
<span class="n">counter</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</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="n">counter</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">registers</span><span class="p">[</span><span class="s1">'a'</span><span class="p">])</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_12_02.py """</span>
<span class="c1"># usage: python3 day_12_02.py < input</span>
<span class="n">registers</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'a'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'c'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">:</span> <span class="mi">0</span><span class="p">}</span>
<span class="n">code</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">operation</span><span class="p">,</span> <span class="o">*</span><span class="n">atoms</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">code</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">operation</span><span class="p">,</span> <span class="n">atoms</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">counter</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="n">code</span><span class="p">):</span>
<span class="n">operation</span><span class="p">,</span> <span class="n">atoms</span> <span class="o">=</span> <span class="n">code</span><span class="p">[</span><span class="n">counter</span><span class="p">]</span>
<span class="k">match</span> <span class="n">operation</span><span class="p">:</span>
<span class="k">case</span> <span class="s1">'inc'</span><span class="p">:</span>
<span class="n">registers</span><span class="p">[</span><span class="n">atoms</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="k">case</span> <span class="s1">'dec'</span><span class="p">:</span>
<span class="n">registers</span><span class="p">[</span><span class="n">atoms</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="k">case</span> <span class="s1">'cpy'</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">registers</span><span class="p">[</span><span class="n">atoms</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="n">registers</span><span class="p">[</span><span class="n">atoms</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">registers</span><span class="p">[</span><span class="n">atoms</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
<span class="k">case</span> <span class="s1">'jnz'</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">registers</span><span class="p">[</span><span class="n">atoms</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="p">:</span>
<span class="n">counter</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</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="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</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="p">:</span>
<span class="n">counter</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">atoms</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="n">counter</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">registers</span><span class="p">[</span><span class="s1">'a'</span><span class="p">])</span>
</code></pre></div>Day 10 - Advent of Code 20162023-10-14T10:45:00+10:002023-10-14T10:45:00+10:00Mark Westetag:www.styleincode.fun,2023-10-14:/day-10-advent-of-code-2016.html<p>Working solution for the Advent of Code 2016 day 10 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/10/">solution</a> for the day 10 puzzles.</p>
<h3>Parts One and Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_10_01_02.py """</span>
<span class="c1"># usage: python3 day_10_01_02.py 17 61 < input</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">target</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
<span class="n">rules</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">line</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="n">tokens</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'value'</span><span class="p">:</span>
<span class="n">bot</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tokens</span><span class="p">[</span><span class="mi">5</span><span class="p">])</span>
<span class="n">data</span><span class="p">[(</span><span class="s1">'bot'</span><span class="p">,</span> <span class="n">bot</span><span class="p">)]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">tokens</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
<span class="k">elif</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'bot'</span><span class="p">:</span>
<span class="n">rules</span><span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">tokens</span><span class="p">[</span><span class="mi">1</span><span class="p">])]</span> <span class="o">=</span> <span class="p">(</span><span class="n">tokens</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span> <span class="nb">int</span><span class="p">(</span><span class="n">tokens</span><span class="p">[</span><span class="mi">6</span><span class="p">]),</span>
<span class="n">tokens</span><span class="p">[</span><span class="mi">10</span><span class="p">],</span> <span class="nb">int</span><span class="p">(</span><span class="n">tokens</span><span class="p">[</span><span class="mi">11</span><span class="p">]))</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">while</span> <span class="nb">any</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">chips</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="k">for</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">),</span> <span class="n">chips</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">'bot'</span><span class="p">):</span>
<span class="k">for</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">bot</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">'bot'</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">[(</span><span class="n">i</span><span class="p">,</span> <span class="n">bot</span><span class="p">)])</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
<span class="n">data</span><span class="p">[(</span><span class="n">i</span><span class="p">,</span> <span class="n">bot</span><span class="p">)]</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span>
<span class="n">low</span> <span class="o">=</span> <span class="n">data</span><span class="p">[(</span><span class="n">i</span><span class="p">,</span> <span class="n">bot</span><span class="p">)]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">high</span> <span class="o">=</span> <span class="n">data</span><span class="p">[(</span><span class="n">i</span><span class="p">,</span> <span class="n">bot</span><span class="p">)]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="k">if</span> <span class="p">(</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="p">)</span> <span class="o">==</span> <span class="n">target</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">'part 1 - </span><span class="si">{</span><span class="n">bot</span><span class="si">}</span><span class="s1">'</span><span class="p">)</span>
<span class="n">data</span><span class="p">[(</span><span class="n">rules</span><span class="p">[</span><span class="n">bot</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">rules</span><span class="p">[</span><span class="n">bot</span><span class="p">][</span><span class="mi">1</span><span class="p">])]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">low</span><span class="p">)</span>
<span class="n">data</span><span class="p">[(</span><span class="n">rules</span><span class="p">[</span><span class="n">bot</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span> <span class="n">rules</span><span class="p">[</span><span class="n">bot</span><span class="p">][</span><span class="mi">3</span><span class="p">])]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">high</span><span class="p">)</span>
<span class="n">ans</span> <span class="o">=</span> <span class="n">data</span><span class="p">[(</span><span class="s1">'output'</span><span class="p">,</span> <span class="mi">0</span><span class="p">)][</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">data</span><span class="p">[(</span><span class="s1">'output'</span><span class="p">,</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="n">data</span><span class="p">[(</span><span class="s1">'output'</span><span class="p">,</span> <span class="mi">2</span><span class="p">)][</span><span class="mi">0</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">'part 2 - </span><span class="si">{</span><span class="n">ans</span><span class="si">}</span><span class="s1">'</span><span class="p">)</span>
</code></pre></div>Day 9 - Advent of Code 20162023-10-08T14:00:00+10:002023-10-08T14:00:00+10:00Mark Westetag:www.styleincode.fun,2023-10-08:/day-9-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 9 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/09/">solutions</a> for the day 9 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_09_01.py """</span>
<span class="c1"># usage: python3 day_09_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">length</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate uncompressed length """</span>
<span class="n">raw</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">raw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">isspace</span><span class="p">():</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="s1">'('</span><span class="p">:</span>
<span class="n">width</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">while</span> <span class="p">(</span><span class="n">x</span> <span class="o">:=</span> <span class="n">raw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span> <span class="o">!=</span> <span class="s1">'x'</span><span class="p">:</span>
<span class="n">width</span> <span class="o">+=</span> <span class="n">x</span>
<span class="n">repeat</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">while</span> <span class="p">(</span><span class="n">x</span> <span class="o">:=</span> <span class="n">raw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span> <span class="o">!=</span> <span class="s1">')'</span><span class="p">:</span>
<span class="n">repeat</span> <span class="o">+=</span> <span class="n">x</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">width</span><span class="p">)):</span>
<span class="n">raw</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">count</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">width</span><span class="p">)</span> <span class="o">*</span> <span class="nb">int</span><span class="p">(</span><span class="n">repeat</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">count</span>
<span class="k">assert</span> <span class="n">length</span><span class="p">(</span><span class="s1">'ADVENT'</span><span class="p">)</span> <span class="o">==</span> <span class="mi">6</span>
<span class="k">assert</span> <span class="n">length</span><span class="p">(</span><span class="s1">'A(1x5)BC'</span><span class="p">)</span> <span class="o">==</span> <span class="mi">7</span>
<span class="k">assert</span> <span class="n">length</span><span class="p">(</span><span class="s1">'(3x3)XYZ'</span><span class="p">)</span> <span class="o">==</span> <span class="mi">9</span>
<span class="k">assert</span> <span class="n">length</span><span class="p">(</span><span class="s1">'A(2x2)BCD(2x2)EFG'</span><span class="p">)</span> <span class="o">==</span> <span class="mi">11</span>
<span class="k">assert</span> <span class="n">length</span><span class="p">(</span><span class="s1">'(6x1)(1x3)A'</span><span class="p">)</span> <span class="o">==</span> <span class="mi">6</span>
<span class="k">assert</span> <span class="n">length</span><span class="p">(</span><span class="s1">'X(8x2)(3x3)ABCY'</span><span class="p">)</span> <span class="o">==</span> <span class="mi">18</span>
<span class="n">in_file</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="n">length</span><span class="p">(</span><span class="n">in_file</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_09_02.py """</span>
<span class="c1"># usage: python3 day_09_02.py < input</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">deque</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">length</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate uncompressed length v2 """</span>
<span class="n">raw</span> <span class="o">=</span> <span class="n">deque</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">raw</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">if</span> <span class="n">x</span><span class="o">.</span><span class="n">isspace</span><span class="p">():</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="s1">'('</span><span class="p">:</span>
<span class="n">width</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">while</span> <span class="p">(</span><span class="n">x</span> <span class="o">:=</span> <span class="n">raw</span><span class="o">.</span><span class="n">popleft</span><span class="p">())</span> <span class="o">!=</span> <span class="s1">'x'</span><span class="p">:</span>
<span class="n">width</span> <span class="o">+=</span> <span class="n">x</span>
<span class="n">repeat</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">while</span> <span class="p">(</span><span class="n">x</span> <span class="o">:=</span> <span class="n">raw</span><span class="o">.</span><span class="n">popleft</span><span class="p">())</span> <span class="o">!=</span> <span class="s1">')'</span><span class="p">:</span>
<span class="n">repeat</span> <span class="o">+=</span> <span class="n">x</span>
<span class="n">pattern</span> <span class="o">=</span> <span class="n">deque</span><span class="p">()</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">width</span><span class="p">)):</span>
<span class="n">pattern</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">raw</span><span class="o">.</span><span class="n">popleft</span><span class="p">())</span>
<span class="n">raw</span><span class="o">.</span><span class="n">extendleft</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">repeat</span><span class="p">)</span> <span class="o">*</span> <span class="n">pattern</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">count</span>
<span class="k">assert</span> <span class="n">length</span><span class="p">(</span><span class="s1">'(3x3)XYZ'</span><span class="p">)</span> <span class="o">==</span> <span class="mi">9</span>
<span class="k">assert</span> <span class="n">length</span><span class="p">(</span><span class="s1">'X(8x2)(3x3)ABCY'</span><span class="p">)</span> <span class="o">==</span> <span class="mi">20</span>
<span class="k">assert</span> <span class="n">length</span><span class="p">(</span><span class="s1">'(27x12)(20x12)(13x14)(7x10)(1x12)A'</span><span class="p">)</span> <span class="o">==</span> <span class="mi">241920</span>
<span class="k">assert</span> <span class="n">length</span><span class="p">(</span><span class="s1">'(25x3)(3x3)ABC(2x3)XY(5x2)PQRSTX(18x9)(3x2)TWO(5x7)SEVEN'</span><span class="p">)</span> <span class="o">==</span> <span class="mi">445</span>
<span class="n">in_file</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="n">length</span><span class="p">(</span><span class="n">in_file</span><span class="p">))</span>
</code></pre></div>Day 8 - Advent of Code 20162023-10-07T15:45:00+10:002023-10-07T15:45:00+10:00Mark Westetag:www.styleincode.fun,2023-10-07:/day-8-advent-of-code-2016.html<p>Working solution for the Advent of Code 2016 day 8 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/08/">solution</a> for the day 8 puzzles.</p>
<h3>Parts One and Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_08_01_02.py """</span>
<span class="c1"># usage: python3 day_08_01_02.py < input</span>
<span class="n">lcd</span> <span class="o">=</span> <span class="p">[</span><span class="nb">list</span><span class="p">(</span><span class="mi">50</span> <span class="o">*</span> <span class="s1">'.'</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">6</span><span class="p">)]</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">ins</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">tokens</span> <span class="o">=</span> <span class="n">ins</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'rect'</span><span class="p">:</span>
<span class="n">w</span><span class="p">,</span> <span class="n">h</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)]</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">h</span><span class="p">):</span>
<span class="n">lcd</span><span class="p">[</span><span class="n">j</span><span class="p">][:</span><span class="n">w</span><span class="p">]</span> <span class="o">=</span> <span class="n">w</span> <span class="o">*</span> <span class="s1">'#'</span>
<span class="k">elif</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'row'</span><span class="p">:</span>
<span class="n">row</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tokens</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'='</span><span class="p">)[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">shift</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tokens</span><span class="p">[</span><span class="mi">4</span><span class="p">])</span>
<span class="n">text</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">lcd</span><span class="p">[</span><span class="n">row</span><span class="p">]</span>
<span class="n">lcd</span><span class="p">[</span><span class="n">row</span><span class="p">]</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="mi">50</span> <span class="o">-</span> <span class="n">shift</span><span class="p">:</span><span class="mi">50</span> <span class="o">-</span> <span class="n">shift</span> <span class="o">+</span> <span class="mi">50</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'column'</span><span class="p">:</span>
<span class="n">col</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tokens</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'='</span><span class="p">)[</span><span class="mi">1</span><span class="p">])</span>
<span class="n">shift</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">tokens</span><span class="p">[</span><span class="mi">4</span><span class="p">])</span>
<span class="n">text</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="p">[</span><span class="n">lcd</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">col</span><span class="p">]</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">6</span><span class="p">)]</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">6</span><span class="p">):</span>
<span class="n">lcd</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">col</span><span class="p">]</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="mi">6</span> <span class="o">-</span> <span class="n">shift</span> <span class="o">+</span> <span class="n">j</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">((</span><span class="n">row</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'#'</span><span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">lcd</span><span class="p">)))</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">lcd</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">row</span><span class="p">))</span>
</code></pre></div>Day 7 - Advent of Code 20162023-10-04T21:45:00+10:002023-10-04T21:45:00+10:00Mark Westetag:www.styleincode.fun,2023-10-04:/day-7-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 7 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/07/">solutions</a> for the day 7 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_07_01.py """</span>
<span class="c1"># usage: python3 day_07_01.py < input</span>
<span class="k">def</span> <span class="nf">abba</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" check for abba pattern """</span>
<span class="k">return</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">text</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="n">text</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">tls</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" does text support tls per puzzle description """</span>
<span class="n">legit</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">hypernet</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">char</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s1">'['</span><span class="p">:</span>
<span class="n">hypernet</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s1">']'</span><span class="p">:</span>
<span class="n">hypernet</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">continue</span>
<span class="n">chunk</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span> <span class="o">+</span> <span class="mi">4</span><span class="p">]</span>
<span class="k">if</span> <span class="s1">'['</span> <span class="ow">in</span> <span class="n">chunk</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="s1">']'</span> <span class="ow">in</span> <span class="n">chunk</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span> <span class="o"><</span> <span class="mi">4</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">if</span> <span class="n">abba</span><span class="p">(</span><span class="n">chunk</span><span class="p">):</span>
<span class="k">if</span> <span class="n">hypernet</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">legit</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">legit</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">ip</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">if</span> <span class="n">tls</span><span class="p">(</span><span class="n">ip</span><span class="p">):</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_07_02.py """</span>
<span class="c1"># usage: python3 day_07_02.py < input</span>
<span class="k">def</span> <span class="nf">aba</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" check for aba pattern """</span>
<span class="k">return</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">text</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">and</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">bab</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate bab from aba """</span>
<span class="k">return</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">ssl</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" does text support ssl per puzzle description """</span>
<span class="n">inner</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="n">outer</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="n">hypernet</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">char</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s1">'['</span><span class="p">:</span>
<span class="n">hypernet</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s1">']'</span><span class="p">:</span>
<span class="n">hypernet</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">continue</span>
<span class="n">chunk</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span> <span class="o">+</span> <span class="mi">3</span><span class="p">]</span>
<span class="k">if</span> <span class="s1">'['</span> <span class="ow">in</span> <span class="n">chunk</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="s1">']'</span> <span class="ow">in</span> <span class="n">chunk</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span> <span class="o"><</span> <span class="mi">3</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">if</span> <span class="n">aba</span><span class="p">(</span><span class="n">chunk</span><span class="p">):</span>
<span class="k">if</span> <span class="n">hypernet</span><span class="p">:</span>
<span class="n">inner</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">outer</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span>
<span class="k">for</span> <span class="n">chunk</span> <span class="ow">in</span> <span class="n">inner</span><span class="p">:</span>
<span class="k">if</span> <span class="n">bab</span><span class="p">(</span><span class="n">chunk</span><span class="p">)</span> <span class="ow">in</span> <span class="n">outer</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">ip</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">if</span> <span class="n">ssl</span><span class="p">(</span><span class="n">ip</span><span class="p">):</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</code></pre></div>Day 6 - Advent of Code 20162023-09-29T06:45:00+10:002023-09-29T06:45:00+10:00Mark Westetag:www.styleincode.fun,2023-09-29:/day-6-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 6 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/06/">solutions</a> for the day 6 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_06_01.py """</span>
<span class="c1"># usage: python3 day_06_01.py < input</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">line</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">for</span> <span class="n">pos</span><span class="p">,</span> <span class="n">character</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
<span class="n">distribution</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pos</span><span class="p">,</span> <span class="p">{})</span>
<span class="n">distribution</span><span class="p">[</span><span class="n">character</span><span class="p">]</span> <span class="o">=</span> <span class="n">distribution</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">character</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="n">data</span><span class="p">[</span><span class="n">pos</span><span class="p">]</span> <span class="o">=</span> <span class="n">distribution</span>
<span class="n">message</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">distribution</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="n">message</span> <span class="o">+=</span> <span class="nb">max</span><span class="p">(</span><span class="n">distribution</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_06_02.py """</span>
<span class="c1"># usage: python3 day_06_02.py < input</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">line</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">for</span> <span class="n">pos</span><span class="p">,</span> <span class="n">character</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">line</span><span class="p">):</span>
<span class="n">distribution</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pos</span><span class="p">,</span> <span class="p">{})</span>
<span class="n">distribution</span><span class="p">[</span><span class="n">character</span><span class="p">]</span> <span class="o">=</span> <span class="n">distribution</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">character</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="n">data</span><span class="p">[</span><span class="n">pos</span><span class="p">]</span> <span class="o">=</span> <span class="n">distribution</span>
<span class="n">message</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">distribution</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="n">message</span> <span class="o">+=</span> <span class="nb">min</span><span class="p">(</span><span class="n">distribution</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
</code></pre></div>Day 5 - Advent of Code 20162023-09-25T10:45:00+10:002023-09-25T10:45:00+10:00Mark Westetag:www.styleincode.fun,2023-09-25:/day-5-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 5 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/05/">solutions</a> for the day 5 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_05_01.py """</span>
<span class="c1"># usage: python3 day_05_01.py < input</span>
<span class="kn">from</span> <span class="nn">hashlib</span> <span class="kn">import</span> <span class="n">md5</span>
<span class="n">door_id</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="n">length</span> <span class="o">=</span> <span class="mi">8</span>
<span class="n">password</span> <span class="o">=</span> <span class="s1">''</span>
<span class="n">salt</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">length</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">seed</span> <span class="o">=</span> <span class="n">door_id</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">salt</span><span class="p">)</span>
<span class="n">seed_hash</span> <span class="o">=</span> <span class="n">md5</span><span class="p">(</span><span class="n">seed</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
<span class="k">if</span> <span class="n">seed_hash</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'00000'</span><span class="p">):</span>
<span class="n">password</span> <span class="o">=</span> <span class="n">password</span> <span class="o">+</span> <span class="n">seed_hash</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
<span class="n">length</span> <span class="o">-=</span> <span class="mi">1</span>
<span class="n">salt</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">password</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_05_02.py """</span>
<span class="c1"># usage: python3 day_05_02.py < input</span>
<span class="kn">from</span> <span class="nn">hashlib</span> <span class="kn">import</span> <span class="n">md5</span>
<span class="n">door_id</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="n">positions</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="n">valid</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">positions</span><span class="p">]</span>
<span class="n">password</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'-'</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">positions</span><span class="p">]</span>
<span class="n">salt</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">password</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'-'</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">seed</span> <span class="o">=</span> <span class="n">door_id</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">salt</span><span class="p">)</span>
<span class="n">seed_hash</span> <span class="o">=</span> <span class="n">md5</span><span class="p">(</span><span class="n">seed</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
<span class="k">if</span> <span class="n">seed_hash</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'00000'</span><span class="p">):</span>
<span class="n">pos</span> <span class="o">=</span> <span class="n">seed_hash</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
<span class="k">if</span> <span class="n">pos</span> <span class="ow">in</span> <span class="n">valid</span><span class="p">:</span>
<span class="n">ipos</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">pos</span><span class="p">)</span>
<span class="k">if</span> <span class="n">password</span><span class="p">[</span><span class="n">ipos</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'-'</span><span class="p">:</span>
<span class="n">password</span><span class="p">[</span><span class="n">ipos</span><span class="p">]</span> <span class="o">=</span> <span class="n">seed_hash</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span>
<span class="n">salt</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">password</span><span class="p">))</span>
</code></pre></div>Day 4 - Advent of Code 20162023-09-24T17:45:00+10:002023-09-24T17:45:00+10:00Mark Westetag:www.styleincode.fun,2023-09-24:/day-4-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 4 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/04/">solutions</a> for the day 4 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_04_01.py """</span>
<span class="c1"># usage: python3 day_04_01.py < input</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="k">def</span> <span class="nf">make_checksum</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate text checksum per puzzle description """</span>
<span class="n">counts</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'-'</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
<span class="k">while</span> <span class="n">t</span><span class="p">:</span>
<span class="n">letter</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">freq</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">letter</span><span class="p">)</span>
<span class="n">letters</span> <span class="o">=</span> <span class="n">counts</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">letters</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">letter</span><span class="p">)</span>
<span class="n">counts</span><span class="p">[</span><span class="n">freq</span><span class="p">]</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">letters</span><span class="p">)</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">letter</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
<span class="n">sequence</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">counts</span><span class="o">.</span><span class="n">keys</span><span class="p">(),</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">sequence</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">counts</span><span class="p">[</span><span class="n">f</span><span class="p">])</span>
<span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sequence</span><span class="p">[:</span><span class="mi">5</span><span class="p">])</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'([^0-9]*)-[0-9]*\['</span><span class="p">)</span>
<span class="n">sector</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'[^0-9]*-([0-9]*)\['</span><span class="p">)</span>
<span class="n">checksum</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'\[([a-z]*)\]'</span><span class="p">)</span>
<span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">room</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">name_value</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">room</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">make_checksum</span><span class="p">(</span><span class="n">name_value</span><span class="p">)</span> <span class="o">==</span> <span class="n">checksum</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">room</span><span class="p">)[</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">sector_value</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sector</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">room</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">total</span> <span class="o">+=</span> <span class="n">sector_value</span>
<span class="nb">print</span><span class="p">(</span><span class="n">total</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_04_02.py """</span>
<span class="c1"># usage: python3 day_04_02.py < input</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="k">def</span> <span class="nf">make_checksum</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate text checksum per puzzle description """</span>
<span class="n">counts</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'-'</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
<span class="k">while</span> <span class="n">t</span><span class="p">:</span>
<span class="n">letter</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">freq</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">letter</span><span class="p">)</span>
<span class="n">letters</span> <span class="o">=</span> <span class="n">counts</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">freq</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">letters</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">letter</span><span class="p">)</span>
<span class="n">counts</span><span class="p">[</span><span class="n">freq</span><span class="p">]</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">letters</span><span class="p">)</span>
<span class="n">t</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">letter</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
<span class="n">sequence</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">counts</span><span class="o">.</span><span class="n">keys</span><span class="p">(),</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">sequence</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">counts</span><span class="p">[</span><span class="n">f</span><span class="p">])</span>
<span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sequence</span><span class="p">[:</span><span class="mi">5</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">decrypt</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">shift</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate cleartext per puzzle description """</span>
<span class="n">a</span> <span class="o">=</span> <span class="nb">ord</span><span class="p">(</span><span class="s1">'a'</span><span class="p">)</span>
<span class="n">letters</span> <span class="o">=</span> <span class="p">[</span><span class="nb">chr</span><span class="p">((</span><span class="nb">ord</span><span class="p">(</span><span class="n">char</span><span class="p">)</span> <span class="o">-</span> <span class="n">a</span> <span class="o">+</span> <span class="n">shift</span><span class="p">)</span> <span class="o">%</span> <span class="mi">26</span> <span class="o">+</span> <span class="n">a</span><span class="p">)</span> <span class="k">if</span> <span class="n">char</span> <span class="o">!=</span> <span class="s1">'-'</span> <span class="k">else</span> <span class="s1">' '</span>
<span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">text</span><span class="p">]</span>
<span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">letters</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'([^0-9]*)-[0-9]*\['</span><span class="p">)</span>
<span class="n">sector</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'[^0-9]*-([0-9]*)\['</span><span class="p">)</span>
<span class="n">checksum</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">'\[([a-z]*)\]'</span><span class="p">)</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">room</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">name_value</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">room</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">make_checksum</span><span class="p">(</span><span class="n">name_value</span><span class="p">)</span> <span class="o">==</span> <span class="n">checksum</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">room</span><span class="p">)[</span><span class="mi">0</span><span class="p">]:</span>
<span class="n">sector_value</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sector</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">room</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="s1">'north'</span> <span class="ow">in</span> <span class="n">decrypt</span><span class="p">(</span><span class="n">name_value</span><span class="p">,</span> <span class="n">sector_value</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="n">sector_value</span><span class="p">)</span>
<span class="k">break</span>
</code></pre></div>Day 3 - Advent of Code 20162023-09-23T11:15:00+10:002023-09-23T11:15:00+10:00Mark Westetag:www.styleincode.fun,2023-09-23:/day-3-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 3 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/03/">solutions</a> for the day 3 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_03_01.py """</span>
<span class="c1"># usage: python3 day_03_01.py < input</span>
<span class="k">def</span> <span class="nf">possible</span><span class="p">(</span><span class="n">s1</span><span class="p">,</span> <span class="n">s2</span><span class="p">,</span> <span class="n">s3</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" can these side lengths form a triangle """</span>
<span class="k">return</span> <span class="nb">all</span><span class="p">([</span><span class="n">s1</span> <span class="o">+</span> <span class="n">s2</span> <span class="o">></span> <span class="n">s3</span><span class="p">,</span>
<span class="n">s1</span> <span class="o">+</span> <span class="n">s3</span> <span class="o">></span> <span class="n">s2</span><span class="p">,</span>
<span class="n">s2</span> <span class="o">+</span> <span class="n">s3</span> <span class="o">></span> <span class="n">s1</span><span class="p">])</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">triangle</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">triangle</span><span class="o">.</span><span class="n">split</span><span class="p">()]</span>
<span class="k">if</span> <span class="n">possible</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">):</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_03_02.py """</span>
<span class="c1"># usage: python3 day_03_02.py < input</span>
<span class="k">def</span> <span class="nf">possible</span><span class="p">(</span><span class="n">s1</span><span class="p">,</span> <span class="n">s2</span><span class="p">,</span> <span class="n">s3</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" can these side lengths form a triangle """</span>
<span class="k">return</span> <span class="nb">all</span><span class="p">([</span><span class="n">s1</span> <span class="o">+</span> <span class="n">s2</span> <span class="o">></span> <span class="n">s3</span><span class="p">,</span>
<span class="n">s1</span> <span class="o">+</span> <span class="n">s3</span> <span class="o">></span> <span class="n">s2</span><span class="p">,</span>
<span class="n">s2</span> <span class="o">+</span> <span class="n">s3</span> <span class="o">></span> <span class="n">s1</span><span class="p">])</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">triangles</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span>
<span class="n">line</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="n">triangles</span><span class="o">.</span><span class="n">append</span><span class="p">([</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()])</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</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">3</span><span class="p">):</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="n">triangles</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">i</span><span class="p">],</span> <span class="n">triangles</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="n">i</span><span class="p">],</span> <span class="n">triangles</span><span class="p">[</span><span class="mi">2</span><span class="p">][</span><span class="n">i</span><span class="p">]</span>
<span class="k">if</span> <span class="n">possible</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">):</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</code></pre></div>Day 2 - Advent of Code 20162023-09-22T15:30:00+10:002023-09-22T15:30:00+10:00Mark Westetag:www.styleincode.fun,2023-09-22:/day-2-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 2 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/02/">solutions</a> for the day 2 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_02_01.py """</span>
<span class="c1"># usage: python3 day_02_01.py < input</span>
<span class="n">keypad</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="mi">2</span><span class="p">:</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span> <span class="mi">3</span><span class="p">:</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</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">4</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">],</span> <span class="mi">5</span><span class="p">:</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">6</span><span class="p">],</span> <span class="mi">6</span><span class="p">:</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">],</span>
<span class="mi">7</span><span class="p">:</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">],</span> <span class="mi">8</span><span class="p">:</span> <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">9</span><span class="p">],</span> <span class="mi">9</span><span class="p">:</span> <span class="p">[</span><span class="mi">6</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">]}</span>
<span class="n">compass</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'U'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'D'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'L'</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'R'</span><span class="p">:</span> <span class="mi">3</span><span class="p">}</span>
<span class="n">key</span> <span class="o">=</span> <span class="mi">5</span>
<span class="n">code</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">line</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">keypad</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="n">compass</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span>
<span class="n">code</span> <span class="o">=</span> <span class="n">code</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">code</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_02_02.py """</span>
<span class="c1"># usage: python3 day_02_02.py < input</span>
<span class="n">keypad</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'1'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'1'</span><span class="p">,</span> <span class="s1">'3'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">,</span> <span class="s1">'1'</span><span class="p">],</span> <span class="s1">'2'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'2'</span><span class="p">,</span> <span class="s1">'6'</span><span class="p">,</span> <span class="s1">'2'</span><span class="p">,</span> <span class="s1">'3'</span><span class="p">],</span>
<span class="s1">'3'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'1'</span><span class="p">,</span> <span class="s1">'7'</span><span class="p">,</span> <span class="s1">'2'</span><span class="p">,</span> <span class="s1">'4'</span><span class="p">],</span> <span class="s1">'4'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'4'</span><span class="p">,</span> <span class="s1">'8'</span><span class="p">,</span> <span class="s1">'3'</span><span class="p">,</span> <span class="s1">'4'</span><span class="p">],</span>
<span class="s1">'5'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'5'</span><span class="p">,</span> <span class="s1">'5'</span><span class="p">,</span> <span class="s1">'5'</span><span class="p">,</span> <span class="s1">'6'</span><span class="p">],</span> <span class="s1">'6'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'2'</span><span class="p">,</span> <span class="s1">'A'</span><span class="p">,</span> <span class="s1">'5'</span><span class="p">,</span> <span class="s1">'7'</span><span class="p">],</span>
<span class="s1">'7'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'3'</span><span class="p">,</span> <span class="s1">'B'</span><span class="p">,</span> <span class="s1">'6'</span><span class="p">,</span> <span class="s1">'8'</span><span class="p">],</span> <span class="s1">'8'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'4'</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">,</span> <span class="s1">'7'</span><span class="p">,</span> <span class="s1">'9'</span><span class="p">],</span>
<span class="s1">'9'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'9'</span><span class="p">,</span> <span class="s1">'9'</span><span class="p">,</span> <span class="s1">'8'</span><span class="p">,</span> <span class="s1">'9'</span><span class="p">],</span> <span class="s1">'A'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'6'</span><span class="p">,</span> <span class="s1">'A'</span><span class="p">,</span> <span class="s1">'A'</span><span class="p">,</span> <span class="s1">'B'</span><span class="p">],</span>
<span class="s1">'B'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'7'</span><span class="p">,</span> <span class="s1">'D'</span><span class="p">,</span> <span class="s1">'A'</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">],</span> <span class="s1">'C'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'8'</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">,</span> <span class="s1">'B'</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">],</span>
<span class="s1">'D'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'B'</span><span class="p">,</span> <span class="s1">'D'</span><span class="p">,</span> <span class="s1">'D'</span><span class="p">,</span> <span class="s1">'D'</span><span class="p">]}</span>
<span class="n">compass</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'U'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">'D'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'L'</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'R'</span><span class="p">:</span> <span class="mi">3</span><span class="p">}</span>
<span class="n">key</span> <span class="o">=</span> <span class="s1">'5'</span>
<span class="n">code</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">line</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">line</span><span class="p">:</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">keypad</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="n">compass</span><span class="p">[</span><span class="n">i</span><span class="p">]]</span>
<span class="n">code</span> <span class="o">=</span> <span class="n">code</span> <span class="o">+</span> <span class="n">key</span>
<span class="nb">print</span><span class="p">(</span><span class="n">code</span><span class="p">)</span>
</code></pre></div>Day 1 - Advent of Code 20162023-08-27T16:15:00+10:002023-08-27T16:15:00+10:00Mark Westetag:www.styleincode.fun,2023-08-27:/day-1-advent-of-code-2016.html<p>Working solutions for the Advent of Code 2016 day 1 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2016/01/">solutions</a> for the day 1 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_01_01.py """</span>
<span class="c1"># usage: python3 day_01_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">sequence</span><span class="p">():</span>
<span class="w"> </span><span class="sd">""" issue next item in sequence """</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">i</span>
<span class="n">heading</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">position</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">():</span>
<span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'L'</span><span class="p">:</span>
<span class="n">heading</span> <span class="o">=</span> <span class="p">(</span><span class="n">heading</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">heading</span> <span class="o">=</span> <span class="p">(</span><span class="n">heading</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span>
<span class="n">steps</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
<span class="k">match</span> <span class="n">heading</span><span class="p">:</span>
<span class="k">case</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">position</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+=</span> <span class="n">steps</span>
<span class="k">case</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">position</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+=</span> <span class="n">steps</span>
<span class="k">case</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">position</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-=</span> <span class="n">steps</span>
<span class="k">case</span> <span class="mi">3</span><span class="p">:</span>
<span class="n">position</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-=</span> <span class="n">steps</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">position</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="nb">abs</span><span class="p">(</span><span class="n">position</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_01_02.py """</span>
<span class="c1"># usage: python3 day_01_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">sequence</span><span class="p">():</span>
<span class="w"> </span><span class="sd">""" issue next item in sequence """</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">i</span>
<span class="k">def</span> <span class="nf">step</span><span class="p">(</span><span class="n">hdg</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" step one unit from position in direction of heading """</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">pos</span>
<span class="k">match</span> <span class="n">hdg</span><span class="p">:</span>
<span class="k">case</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">case</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="k">case</span> <span class="mi">2</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">case</span> <span class="mi">3</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="n">heading</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">position</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">trail</span> <span class="o">=</span> <span class="p">[</span><span class="n">position</span><span class="p">]</span>
<span class="n">second_visit</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">():</span>
<span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'L'</span><span class="p">:</span>
<span class="n">heading</span> <span class="o">=</span> <span class="p">(</span><span class="n">heading</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">heading</span> <span class="o">=</span> <span class="p">(</span><span class="n">heading</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">:])):</span>
<span class="n">position</span> <span class="o">=</span> <span class="n">step</span><span class="p">(</span><span class="n">heading</span><span class="p">,</span> <span class="n">position</span><span class="p">)</span>
<span class="k">if</span> <span class="n">position</span> <span class="ow">in</span> <span class="n">trail</span><span class="p">:</span>
<span class="n">second_visit</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">break</span>
<span class="n">trail</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">position</span><span class="p">)</span>
<span class="k">if</span> <span class="n">second_visit</span><span class="p">:</span>
<span class="k">break</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">position</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">+</span> <span class="nb">abs</span><span class="p">(</span><span class="n">position</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
</code></pre></div>Day 20 - Advent of Code 20152023-04-14T09:45:00+10:002023-04-14T09:45:00+10:00Mark Westetag:www.styleincode.fun,2023-04-14:/day-20-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 20 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/20/">solutions</a> for the day 20 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_20_01.py """</span>
<span class="c1"># usage: python3 day_20_01.py < input</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="k">def</span> <span class="nf">sum_factors</span><span class="p">(</span><span class="n">dividend</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" sum factors of dividend """</span>
<span class="n">factors</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="n">limit</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">dividend</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">1</span><span class="p">,</span> <span class="n">limit</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">quotient</span><span class="p">,</span> <span class="n">remainder</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">dividend</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
<span class="k">if</span> <span class="n">remainder</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">factors</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="n">factors</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">quotient</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="n">factors</span><span class="p">)</span>
<span class="n">presents</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">())</span>
<span class="n">house</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">while</span> <span class="n">sum_factors</span><span class="p">(</span><span class="n">house</span><span class="p">)</span> <span class="o">*</span> <span class="mi">10</span> <span class="o"><</span> <span class="n">presents</span><span class="p">:</span>
<span class="n">house</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">house</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_20_02.py """</span>
<span class="c1"># usage: python3 day_20_02.py < input</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="k">def</span> <span class="nf">sum_limited_factors</span><span class="p">(</span><span class="n">dividend</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" sum limited factors of dividend """</span>
<span class="n">factors</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="n">limit</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n">dividend</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">1</span><span class="p">,</span> <span class="n">limit</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
<span class="n">quotient</span><span class="p">,</span> <span class="n">remainder</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">dividend</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
<span class="k">if</span> <span class="n">remainder</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">if</span> <span class="n">quotient</span> <span class="o"><=</span> <span class="mi">50</span><span class="p">:</span>
<span class="n">factors</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">if</span> <span class="n">i</span> <span class="o"><=</span> <span class="mi">50</span><span class="p">:</span>
<span class="n">factors</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">quotient</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="n">factors</span><span class="p">)</span>
<span class="n">presents</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">())</span>
<span class="n">house</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">while</span> <span class="n">sum_limited_factors</span><span class="p">(</span><span class="n">house</span><span class="p">)</span> <span class="o">*</span> <span class="mi">11</span> <span class="o"><</span> <span class="n">presents</span><span class="p">:</span>
<span class="n">house</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">house</span><span class="p">)</span>
</code></pre></div>Day 19 - Advent of Code 20152023-04-08T09:45:00+10:002023-04-08T09:45:00+10:00Mark Westetag:www.styleincode.fun,2023-04-08:/day-19-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 19 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/19/">solutions</a> for the day 19 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_19_01.py """</span>
<span class="c1"># usage: python3 day_19_01.py < input</span>
<span class="k">def</span> <span class="nf">generate</span><span class="p">(</span><span class="n">seed_molecule</span><span class="p">,</span> <span class="n">rules_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" produce next molecules from seed molecule using rules """</span>
<span class="n">next_molecules</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">rules_arg</span><span class="p">:</span>
<span class="n">start</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">seed_molecule</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">start</span><span class="p">)</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">next_molecules</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">seed_molecule</span><span class="p">[:</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">value</span> <span class="o">+</span>
<span class="n">seed_molecule</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">):])</span>
<span class="n">start</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="k">return</span> <span class="n">next_molecules</span>
<span class="n">rules</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="n">rule</span> <span class="o">:=</span> <span class="nb">input</span><span class="p">():</span>
<span class="n">rules</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">rule</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' => '</span><span class="p">))</span>
<span class="n">molecule</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="n">molecules</span> <span class="o">=</span> <span class="n">generate</span><span class="p">(</span><span class="n">molecule</span><span class="p">,</span> <span class="n">rules</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">molecules</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code>
</code></pre></div>Day 18 - Advent of Code 20152023-04-03T09:45:00+10:002023-04-03T09:45:00+10:00Mark Westetag:www.styleincode.fun,2023-04-03:/day-18-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 18 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/18/">solutions</a> for the day 18 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_18_01.py """</span>
<span class="c1"># usage: python3 day_18_01.py < input</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">deltas</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">product</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="mi">1</span><span class="p">],</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="mi">1</span><span class="p">]))</span>
<span class="n">deltas</span><span class="o">.</span><span class="n">remove</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">advance</span><span class="p">(</span><span class="n">grid</span><span class="p">,</span> <span class="n">colrow</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate next state using puzzle rules """</span>
<span class="k">def</span> <span class="nf">neighbours</span><span class="p">():</span>
<span class="w"> </span><span class="sd">""" calculate number of lit neighbours """</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="ow">in</span> <span class="n">deltas</span><span class="p">:</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">)</span> <span class="ow">in</span> <span class="n">grid</span><span class="p">:</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">count</span>
<span class="n">future</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="n">cols</span><span class="p">,</span> <span class="n">rows</span> <span class="o">=</span> <span class="n">colrow</span>
<span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">rows</span><span class="p">):</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">cols</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="n">grid</span><span class="p">:</span>
<span class="k">if</span> <span class="n">neighbours</span><span class="p">()</span> <span class="ow">in</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="n">future</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">neighbours</span><span class="p">()</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
<span class="n">future</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
<span class="k">return</span> <span class="n">future</span>
<span class="n">current</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">row</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()):</span>
<span class="k">for</span> <span class="n">col</span><span class="p">,</span> <span class="n">state</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">line</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">state</span> <span class="o">==</span> <span class="s1">'#'</span><span class="p">:</span>
<span class="n">current</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">col</span><span class="p">,</span> <span class="n">row</span><span class="p">))</span>
<span class="n">size</span> <span class="o">=</span> <span class="p">(</span><span class="n">col</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">row</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">):</span>
<span class="n">current</span> <span class="o">=</span> <span class="n">advance</span><span class="p">(</span><span class="n">current</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">current</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_18_02.py """</span>
<span class="c1"># usage: python3 day_18_02.py < input</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">deltas</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">product</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="mi">1</span><span class="p">],</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="mi">1</span><span class="p">]))</span>
<span class="n">deltas</span><span class="o">.</span><span class="n">remove</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">advance</span><span class="p">(</span><span class="n">grid</span><span class="p">,</span> <span class="n">colrow</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate next state using puzzle rules """</span>
<span class="k">def</span> <span class="nf">neighbours</span><span class="p">():</span>
<span class="w"> </span><span class="sd">""" calculate number of lit neighbours """</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="ow">in</span> <span class="n">deltas</span><span class="p">:</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">)</span> <span class="ow">in</span> <span class="n">grid</span><span class="p">:</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">count</span>
<span class="n">future</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="n">cols</span><span class="p">,</span> <span class="n">rows</span> <span class="o">=</span> <span class="n">colrow</span>
<span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">rows</span><span class="p">):</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">cols</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="n">grid</span><span class="p">:</span>
<span class="k">if</span> <span class="n">neighbours</span><span class="p">()</span> <span class="ow">in</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="n">future</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">neighbours</span><span class="p">()</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span>
<span class="n">future</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
<span class="k">return</span> <span class="n">future</span>
<span class="n">current</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">row</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()):</span>
<span class="k">for</span> <span class="n">col</span><span class="p">,</span> <span class="n">state</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">line</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">state</span> <span class="o">==</span> <span class="s1">'#'</span><span class="p">:</span>
<span class="n">current</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">col</span><span class="p">,</span> <span class="n">row</span><span class="p">))</span>
<span class="n">size</span> <span class="o">=</span> <span class="p">(</span><span class="n">col</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">row</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="n">size</span>
<span class="n">corners</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="n">width</span> <span class="o">-</span> <span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="n">height</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]))</span>
<span class="n">current</span> <span class="o">|=</span> <span class="n">corners</span>
<span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">):</span>
<span class="n">current</span> <span class="o">=</span> <span class="n">advance</span><span class="p">(</span><span class="n">current</span><span class="p">,</span> <span class="n">size</span><span class="p">)</span>
<span class="n">current</span> <span class="o">|=</span> <span class="n">corners</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">current</span><span class="p">))</span>
</code></pre></div>Day 17 - Advent of Code 20152023-04-02T09:45:00+10:002023-04-02T09:45:00+10:00Mark Westetag:www.styleincode.fun,2023-04-02:/day-17-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 17 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/17/">solutions</a> for the day 17 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_17_01.py """</span>
<span class="c1"># usage: python3 day_17_01.py < input</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">egg_nog</span> <span class="o">=</span> <span class="mi">150</span>
<span class="n">containers</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()]</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">choices</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">containers</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">combo</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">combinations</span><span class="p">(</span><span class="n">containers</span><span class="p">,</span> <span class="n">choices</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">sum</span><span class="p">(</span><span class="n">combo</span><span class="p">)</span> <span class="o">==</span> <span class="n">egg_nog</span><span class="p">:</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_17_02.py """</span>
<span class="c1"># usage: python3 day_17_02.py < input</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">egg_nog</span> <span class="o">=</span> <span class="mi">150</span>
<span class="n">containers</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()]</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">choices</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">containers</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
<span class="k">if</span> <span class="n">count</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">for</span> <span class="n">combo</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">combinations</span><span class="p">(</span><span class="n">containers</span><span class="p">,</span> <span class="n">choices</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">sum</span><span class="p">(</span><span class="n">combo</span><span class="p">)</span> <span class="o">==</span> <span class="n">egg_nog</span><span class="p">:</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</code></pre></div>Day 16 - Advent of Code 20152023-04-01T09:45:00+10:002023-04-01T09:45:00+10:00Mark Westetag:www.styleincode.fun,2023-04-01:/day-16-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 16 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/16/">solutions</a> for the day 16 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_16_01.py """</span>
<span class="c1"># usage: python3 day_16_01.py < input</span>
<span class="k">def</span> <span class="nf">makedict</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">separator</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" convert key: value text to dict """</span>
<span class="k">return</span> <span class="nb">dict</span><span class="p">([</span><span class="n">keyvalue</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">': '</span><span class="p">)</span>
<span class="k">for</span> <span class="n">keyvalue</span> <span class="ow">in</span> <span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">separator</span><span class="p">)])</span>
<span class="k">def</span> <span class="nf">consistent</span><span class="p">(</span><span class="n">dict1</span><span class="p">,</span> <span class="n">dict2</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" are dict1 and dict2 logically consistent """</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">dict1</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">dict2</span><span class="p">:</span>
<span class="k">if</span> <span class="n">dict1</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">!=</span> <span class="n">dict2</span><span class="p">[</span><span class="n">key</span><span class="p">]:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">scan_results</span> <span class="o">=</span> <span class="s2">"""</span>
<span class="s2">children: 3</span>
<span class="s2">cats: 7</span>
<span class="s2">samoyeds: 2</span>
<span class="s2">pomeranians: 3</span>
<span class="s2">akitas: 0</span>
<span class="s2">vizslas: 0</span>
<span class="s2">goldfish: 5</span>
<span class="s2">trees: 3</span>
<span class="s2">cars: 2</span>
<span class="s2">perfumes: 1</span>
<span class="s2">"""</span>
<span class="n">scan</span> <span class="o">=</span> <span class="n">makedict</span><span class="p">(</span><span class="n">scan_results</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">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">row</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">colon</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">':'</span><span class="p">)</span>
<span class="n">memory</span> <span class="o">=</span> <span class="n">makedict</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="n">colon</span> <span class="o">+</span> <span class="mi">2</span><span class="p">:],</span> <span class="s1">', '</span><span class="p">)</span>
<span class="k">if</span> <span class="n">consistent</span><span class="p">(</span><span class="n">scan</span><span class="p">,</span> <span class="n">memory</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="mi">4</span><span class="p">:</span><span class="n">colon</span><span class="p">])</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_16_02.py """</span>
<span class="c1"># usage: python3 day_16_02.py < input</span>
<span class="k">def</span> <span class="nf">makedict</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">separator</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" convert key: value text to dict """</span>
<span class="k">return</span> <span class="nb">dict</span><span class="p">([</span><span class="n">keyvalue</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">': '</span><span class="p">)</span>
<span class="k">for</span> <span class="n">keyvalue</span> <span class="ow">in</span> <span class="n">text</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">separator</span><span class="p">)])</span>
<span class="k">def</span> <span class="nf">consistent</span><span class="p">(</span><span class="n">dict1</span><span class="p">,</span> <span class="n">dict2</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" are dict1 and dict2 logically consistent per puzzle """</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">dict1</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">dict2</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'cats'</span><span class="p">,</span> <span class="s1">'trees'</span><span class="p">]:</span>
<span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">dict1</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="o">>=</span> <span class="nb">int</span><span class="p">(</span><span class="n">dict2</span><span class="p">[</span><span class="n">key</span><span class="p">]):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">elif</span> <span class="n">key</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'pomeranians'</span><span class="p">,</span> <span class="s1">'goldfish'</span><span class="p">]:</span>
<span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="n">dict1</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="o"><=</span> <span class="nb">int</span><span class="p">(</span><span class="n">dict2</span><span class="p">[</span><span class="n">key</span><span class="p">]):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">dict1</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">!=</span> <span class="n">dict2</span><span class="p">[</span><span class="n">key</span><span class="p">]:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">scan_results</span> <span class="o">=</span> <span class="s2">"""</span>
<span class="s2">children: 3</span>
<span class="s2">cats: 7</span>
<span class="s2">samoyeds: 2</span>
<span class="s2">pomeranians: 3</span>
<span class="s2">akitas: 0</span>
<span class="s2">vizslas: 0</span>
<span class="s2">goldfish: 5</span>
<span class="s2">trees: 3</span>
<span class="s2">cars: 2</span>
<span class="s2">perfumes: 1</span>
<span class="s2">"""</span>
<span class="n">scan</span> <span class="o">=</span> <span class="n">makedict</span><span class="p">(</span><span class="n">scan_results</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">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">row</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">colon</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">':'</span><span class="p">)</span>
<span class="n">memory</span> <span class="o">=</span> <span class="n">makedict</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="n">colon</span> <span class="o">+</span> <span class="mi">2</span><span class="p">:],</span> <span class="s1">', '</span><span class="p">)</span>
<span class="k">if</span> <span class="n">consistent</span><span class="p">(</span><span class="n">scan</span><span class="p">,</span> <span class="n">memory</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="mi">4</span><span class="p">:</span><span class="n">colon</span><span class="p">])</span>
</code></pre></div>Day 15 - Advent of Code 20152023-03-26T09:45:00+10:002023-03-26T09:45:00+10:00Mark Westetag:www.styleincode.fun,2023-03-26:/day-15-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 15 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/15/">solutions</a> for the day 15 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_15_01.py """</span>
<span class="c1"># usage: python3 day_15_01.py < input</span>
<span class="kn">import</span> <span class="nn">functools</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">from</span> <span class="nn">operator</span> <span class="kn">import</span> <span class="n">mul</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">combos</span><span class="p">(</span><span class="n">count</span><span class="p">,</span> <span class="n">goal</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate count integers that sum to goal """</span>
<span class="n">array</span> <span class="o">=</span> <span class="p">[</span><span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">101</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">count</span><span class="p">)]</span>
<span class="k">for</span> <span class="n">combo</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="o">*</span><span class="n">array</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">sum</span><span class="p">(</span><span class="n">combo</span><span class="p">)</span> <span class="o">==</span> <span class="n">goal</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">combo</span>
<span class="k">def</span> <span class="nf">product</span><span class="p">(</span><span class="n">elements</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate product of elements """</span>
<span class="k">return</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="n">mul</span><span class="p">,</span> <span class="n">elements</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">ingredients</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
<span class="n">colon</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">':'</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">item</span><span class="p">[:</span><span class="n">colon</span><span class="p">]</span>
<span class="n">properties</span> <span class="o">=</span> <span class="p">[(</span><span class="n">label</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">))</span> <span class="k">for</span> <span class="n">label</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="p">[</span><span class="n">attribute</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">for</span> <span class="n">attribute</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="n">colon</span> <span class="o">+</span> <span class="mi">2</span><span class="p">:]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">)]]</span>
<span class="n">ingredients</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">properties</span>
<span class="n">maximum</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">combos</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">ingredients</span><span class="p">),</span> <span class="mi">100</span><span class="p">):</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ingredients</span><span class="p">):</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">ingredients</span><span class="p">[</span><span class="n">name</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">j</span><span class="p">,</span> <span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ingredients</span><span class="p">[</span><span class="n">name</span><span class="p">]):</span>
<span class="k">if</span> <span class="n">label</span> <span class="o">!=</span> <span class="s1">'calories'</span><span class="p">:</span>
<span class="n">attributes</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">option</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">*</span> <span class="n">value</span>
<span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span>
<span class="n">total</span> <span class="o">=</span> <span class="p">[</span><span class="nb">sum</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">values</span><span class="p">)]</span>
<span class="n">total</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span> <span class="k">if</span> <span class="n">x</span> <span class="o"><</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">total</span><span class="p">]</span>
<span class="n">maximum</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">maximum</span><span class="p">,</span> <span class="n">product</span><span class="p">(</span><span class="n">total</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">maximum</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_15_02.py """</span>
<span class="c1"># usage: python3 day_15_02.py < input</span>
<span class="kn">import</span> <span class="nn">functools</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">from</span> <span class="nn">operator</span> <span class="kn">import</span> <span class="n">mul</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">combos</span><span class="p">(</span><span class="n">count</span><span class="p">,</span> <span class="n">goal</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate count integers that sum to goal """</span>
<span class="n">array</span> <span class="o">=</span> <span class="p">[</span><span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">101</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">count</span><span class="p">)]</span>
<span class="k">for</span> <span class="n">combo</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">product</span><span class="p">(</span><span class="o">*</span><span class="n">array</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">sum</span><span class="p">(</span><span class="n">combo</span><span class="p">)</span> <span class="o">==</span> <span class="n">goal</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">combo</span>
<span class="k">def</span> <span class="nf">product</span><span class="p">(</span><span class="n">elements</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate product of elements """</span>
<span class="k">return</span> <span class="n">functools</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="n">mul</span><span class="p">,</span> <span class="n">elements</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">ingredients</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
<span class="n">colon</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">':'</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">item</span><span class="p">[:</span><span class="n">colon</span><span class="p">]</span>
<span class="n">properties</span> <span class="o">=</span> <span class="p">[(</span><span class="n">label</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">))</span> <span class="k">for</span> <span class="n">label</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="p">[</span><span class="n">attribute</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">for</span> <span class="n">attribute</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="n">colon</span> <span class="o">+</span> <span class="mi">2</span><span class="p">:]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">)]]</span>
<span class="n">ingredients</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">properties</span>
<span class="n">maximum</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">combos</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">ingredients</span><span class="p">),</span> <span class="mi">100</span><span class="p">):</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ingredients</span><span class="p">):</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">ingredients</span><span class="p">[</span><span class="n">name</span><span class="p">])</span>
<span class="k">for</span> <span class="n">j</span><span class="p">,</span> <span class="p">(</span><span class="n">label</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ingredients</span><span class="p">[</span><span class="n">name</span><span class="p">]):</span>
<span class="n">attributes</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">=</span> <span class="n">option</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">*</span> <span class="n">value</span>
<span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span>
<span class="n">total</span> <span class="o">=</span> <span class="p">[</span><span class="nb">sum</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">values</span><span class="p">)]</span>
<span class="n">total</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span> <span class="k">if</span> <span class="n">x</span> <span class="o"><</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">total</span><span class="p">]</span>
<span class="k">if</span> <span class="n">total</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="mi">500</span><span class="p">:</span>
<span class="n">maximum</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">maximum</span><span class="p">,</span> <span class="n">product</span><span class="p">(</span><span class="n">total</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">maximum</span><span class="p">)</span>
</code></pre></div>Day 14 - Advent of Code 20152023-03-25T09:45:00+10:002023-03-25T09:45:00+10:00Mark Westetag:www.styleincode.fun,2023-03-25:/day-14-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 14 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/14/">solutions</a> for the day 14 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_14_01.py """</span>
<span class="c1"># usage: python3 day_14_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">distance</span><span class="p">(</span><span class="n">vitals</span><span class="p">,</span> <span class="n">elapsed</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate distance at elapsed time using vitals """</span>
<span class="n">speed</span><span class="p">,</span> <span class="n">sprint</span><span class="p">,</span> <span class="n">rest</span> <span class="o">=</span> <span class="n">vitals</span>
<span class="n">cycles</span><span class="p">,</span> <span class="n">partial</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">elapsed</span><span class="p">,</span> <span class="n">sprint</span> <span class="o">+</span> <span class="n">rest</span><span class="p">)</span>
<span class="k">return</span> <span class="n">speed</span> <span class="o">*</span> <span class="p">(</span><span class="n">cycles</span> <span class="o">*</span> <span class="n">sprint</span> <span class="o">+</span> <span class="nb">min</span><span class="p">(</span><span class="n">partial</span><span class="p">,</span> <span class="n">sprint</span><span class="p">))</span>
<span class="n">greatest_distance</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
<span class="n">items</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">stats</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">items</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">13</span><span class="p">)]</span>
<span class="n">greatest_distance</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">greatest_distance</span><span class="p">,</span> <span class="n">distance</span><span class="p">(</span><span class="n">stats</span><span class="p">,</span> <span class="mi">2503</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">greatest_distance</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_14_02.py """</span>
<span class="c1"># usage: python3 day_14_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">distance</span><span class="p">(</span><span class="n">vitals</span><span class="p">,</span> <span class="n">elapsed</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate distance at elapsed time using vitals """</span>
<span class="n">speed</span><span class="p">,</span> <span class="n">sprint</span><span class="p">,</span> <span class="n">rest</span> <span class="o">=</span> <span class="n">vitals</span>
<span class="n">cycles</span><span class="p">,</span> <span class="n">partial</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">elapsed</span><span class="p">,</span> <span class="n">sprint</span> <span class="o">+</span> <span class="n">rest</span><span class="p">)</span>
<span class="k">return</span> <span class="n">speed</span> <span class="o">*</span> <span class="p">(</span><span class="n">cycles</span> <span class="o">*</span> <span class="n">sprint</span> <span class="o">+</span> <span class="nb">min</span><span class="p">(</span><span class="n">partial</span><span class="p">,</span> <span class="n">sprint</span><span class="p">))</span>
<span class="n">reindeer</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
<span class="n">items</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">reindeer</span><span class="p">[</span><span class="n">items</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">items</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">13</span><span class="p">)]</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">{</span><span class="n">deer</span><span class="p">:</span> <span class="mi">0</span> <span class="k">for</span> <span class="n">deer</span> <span class="ow">in</span> <span class="n">reindeer</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">2503</span><span class="p">):</span>
<span class="n">positions</span> <span class="o">=</span> <span class="p">[(</span><span class="n">distance</span><span class="p">(</span><span class="n">stats</span><span class="p">,</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">),</span> <span class="n">deer</span><span class="p">)</span>
<span class="k">for</span> <span class="n">deer</span><span class="p">,</span> <span class="n">stats</span> <span class="ow">in</span> <span class="n">reindeer</span><span class="o">.</span><span class="n">items</span><span class="p">()]</span>
<span class="n">leading</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">positions</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">for</span> <span class="n">pos</span><span class="p">,</span> <span class="n">deer</span> <span class="ow">in</span> <span class="n">positions</span><span class="p">:</span>
<span class="k">if</span> <span class="n">pos</span> <span class="o">==</span> <span class="n">leading</span><span class="p">:</span>
<span class="n">points</span><span class="p">[</span><span class="n">deer</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">points</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
</code></pre></div>Day 13 - Advent of Code 20152023-03-20T15:45:00+10:002023-03-20T15:45:00+10:00Mark Westetag:www.styleincode.fun,2023-03-20:/day-13-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 13 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/13/">solutions</a> for the day 13 puzzles.</p>
<h3>Parts One and Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_13_01_02.py """</span>
<span class="c1"># usage: python3 day_13_01_02.py < input</span>
<span class="kn">import</span> <span class="nn">itertools</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">happiness_potential</span><span class="p">(</span><span class="n">group</span><span class="p">,</span> <span class="n">reference</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate happiness potential """</span>
<span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">group</span><span class="p">)</span>
<span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">person</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">group</span><span class="p">):</span>
<span class="n">total</span> <span class="o">+=</span> <span class="n">reference</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="n">person</span><span class="p">,</span> <span class="n">group</span><span class="p">[(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="n">size</span><span class="p">]),</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">total</span> <span class="o">+=</span> <span class="n">reference</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="n">person</span><span class="p">,</span> <span class="n">group</span><span class="p">[(</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="n">size</span><span class="p">]),</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">return</span> <span class="n">total</span>
<span class="n">guests</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="n">happiness</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
<span class="n">words</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">guest</span><span class="p">,</span> <span class="n">neighbour</span> <span class="o">=</span> <span class="n">words</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">words</span><span class="p">[</span><span class="o">-</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="n">guests</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">guest</span><span class="p">)</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">words</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="k">if</span> <span class="n">words</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'lose'</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="o">-</span><span class="n">value</span>
<span class="n">happiness</span><span class="p">[(</span><span class="n">guest</span><span class="p">,</span> <span class="n">neighbour</span><span class="p">)]</span> <span class="o">=</span> <span class="n">value</span>
<span class="c1"># part 01</span>
<span class="n">potential</span> <span class="o">=</span> <span class="p">{</span><span class="n">happiness_potential</span><span class="p">(</span><span class="n">sitting</span><span class="p">,</span> <span class="n">happiness</span><span class="p">)</span>
<span class="k">for</span> <span class="n">sitting</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</span><span class="p">(</span><span class="n">guests</span><span class="p">)}</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">potential</span><span class="p">))</span>
<span class="c1"># part 02</span>
<span class="n">guests</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s1">'self'</span><span class="p">)</span>
<span class="n">potential</span> <span class="o">=</span> <span class="p">{</span><span class="n">happiness_potential</span><span class="p">(</span><span class="n">sitting</span><span class="p">,</span> <span class="n">happiness</span><span class="p">)</span>
<span class="k">for</span> <span class="n">sitting</span> <span class="ow">in</span> <span class="n">itertools</span><span class="o">.</span><span class="n">permutations</span><span class="p">(</span><span class="n">guests</span><span class="p">)}</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">potential</span><span class="p">))</span>
</code></pre></div>Day 12 - Advent of Code 20152023-03-20T09:45:00+10:002023-03-20T09:45:00+10:00Mark Westetag:www.styleincode.fun,2023-03-20:/day-12-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 12 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/12/">solutions</a> for the day 12 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_12_01.py """</span>
<span class="c1"># usage: python3 day_12_01.py < input</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">sum_integers</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" unpack json structure summing integers """</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
<span class="k">return</span> <span class="n">data</span>
<span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">total</span> <span class="o">+=</span> <span class="n">sum_integers</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">total</span> <span class="o">+=</span> <span class="n">sum_integers</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="k">return</span> <span class="n">total</span>
<span class="n">data_pack</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">sum_integers</span><span class="p">(</span><span class="n">data_pack</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_12_02.py """</span>
<span class="c1"># usage: python3 day_12_02.py < input</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">sum_integers</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" unpack json structure summing integers """</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
<span class="k">return</span> <span class="n">data</span>
<span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">total</span> <span class="o">+=</span> <span class="n">sum_integers</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="k">if</span> <span class="s1">'red'</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">total</span> <span class="o">+=</span> <span class="n">sum_integers</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="k">return</span> <span class="n">total</span>
<span class="n">data_pack</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">sum_integers</span><span class="p">(</span><span class="n">data_pack</span><span class="p">))</span>
</code></pre></div>Day 11 - Advent of Code 20152023-03-18T09:45:00+10:002023-03-18T09:45:00+10:00Mark Westetag:www.styleincode.fun,2023-03-18:/day-11-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 11 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/11/">solutions</a> for the day 11 puzzles.</p>
<h3>Parts One and Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_11_01_02.py """</span>
<span class="c1"># usage: python3 day_11_01_02.py < input</span>
<span class="k">def</span> <span class="nf">valid</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" is text a valid string """</span>
<span class="k">for</span> <span class="n">character</span> <span class="ow">in</span> <span class="s1">'ilo'</span><span class="p">:</span>
<span class="k">if</span> <span class="n">character</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">text</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">]:</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="nb">chr</span><span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="nb">chr</span><span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">pairs</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">set</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="n">i</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
<span class="n">pairs</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">pairs</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">def</span> <span class="nf">generator</span><span class="p">(</span><span class="n">seed</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" valid string generator """</span>
<span class="n">string</span> <span class="o">=</span> <span class="n">seed</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">ords</span> <span class="o">=</span> <span class="p">[</span><span class="nb">ord</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">-</span> <span class="mi">97</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">string</span><span class="p">)]</span>
<span class="n">carry</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">ords</span><span class="p">):</span>
<span class="n">carry</span><span class="p">,</span> <span class="n">ords</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">value</span> <span class="o">+</span> <span class="n">carry</span><span class="p">,</span> <span class="mi">26</span><span class="p">)</span>
<span class="k">if</span> <span class="n">carry</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">ords</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">[</span><span class="nb">chr</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">97</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">ords</span><span class="p">]</span>
<span class="n">string</span> <span class="o">=</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">reversed</span><span class="p">(</span><span class="n">string</span><span class="p">))</span>
<span class="k">if</span> <span class="n">valid</span><span class="p">(</span><span class="n">string</span><span class="p">):</span>
<span class="k">yield</span> <span class="n">string</span>
<span class="n">password</span> <span class="o">=</span> <span class="n">generator</span><span class="p">(</span><span class="nb">input</span><span class="p">())</span>
<span class="c1"># part 01</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">password</span><span class="p">))</span>
<span class="c1"># part 02</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">password</span><span class="p">))</span>
</code></pre></div>Day 23 - Advent of Code 20222022-12-24T09:45:00+10:002022-12-24T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-24:/day-23-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 23 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/23/">solutions</a> for the day 23 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_23_01.py """</span>
<span class="c1"># usage: python3 day_23_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">raw_location_data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" create object """</span>
<span class="n">output</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">raw_location_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">item</span> <span class="o">==</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">item</span> <span class="o">==</span> <span class="s1">'#'</span><span class="p">:</span>
<span class="n">output</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
<span class="n">x</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">output</span>
<span class="n">deltas</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'n'</span><span class="p">:</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> <span class="s1">'ne'</span><span class="p">:</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="s1">'e'</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="s1">'se'</span><span class="p">:</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="s1">'s'</span><span class="p">:</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="s1">'sw'</span><span class="p">:</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="s1">'w'</span><span class="p">:</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="s1">'nw'</span><span class="p">:</span> <span class="p">(</span><span class="o">-</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="k">def</span> <span class="nf">adjacent</span><span class="p">(</span><span class="n">dirs</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span> <span class="n">elf_data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" count adjacent to point in dirs """</span>
<span class="n">tally</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">dirs</span><span class="p">:</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">deltas</span><span class="p">[</span><span class="n">d</span><span class="p">]</span>
<span class="k">if</span> <span class="p">(</span><span class="n">point</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">point</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">dy</span><span class="p">)</span> <span class="ow">in</span> <span class="n">elf_data</span><span class="p">:</span>
<span class="n">tally</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">tally</span>
<span class="n">elves</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">options</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'all'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'n'</span><span class="p">,</span> <span class="s1">'ne'</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">,</span> <span class="s1">'se'</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">,</span> <span class="s1">'sw'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">,</span> <span class="s1">'nw'</span><span class="p">],</span>
<span class="mi">0</span><span class="p">:</span> <span class="p">[</span><span class="s1">'n'</span><span class="p">,</span> <span class="s1">'ne'</span><span class="p">,</span> <span class="s1">'nw'</span><span class="p">],</span> <span class="mi">1</span><span class="p">:</span> <span class="p">[</span><span class="s1">'s'</span><span class="p">,</span> <span class="s1">'se'</span><span class="p">,</span> <span class="s1">'sw'</span><span class="p">],</span>
<span class="mi">2</span><span class="p">:</span> <span class="p">[</span><span class="s1">'w'</span><span class="p">,</span> <span class="s1">'nw'</span><span class="p">,</span> <span class="s1">'sw'</span><span class="p">],</span> <span class="mi">3</span><span class="p">:</span> <span class="p">[</span><span class="s1">'e'</span><span class="p">,</span> <span class="s1">'ne'</span><span class="p">,</span> <span class="s1">'se'</span><span class="p">]}</span>
<span class="n">option</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">rounds</span> <span class="o">=</span> <span class="mi">10</span>
<span class="k">while</span> <span class="n">rounds</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">rounds</span> <span class="o">-=</span> <span class="mi">1</span>
<span class="n">proposed</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">elf</span> <span class="ow">in</span> <span class="n">elves</span><span class="p">:</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">adjacent</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="s1">'all'</span><span class="p">],</span> <span class="n">elf</span><span class="p">,</span> <span class="n">elves</span><span class="p">)</span>
<span class="k">if</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">continue</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="n">option</span><span class="p">,</span> <span class="n">option</span> <span class="o">+</span> <span class="mi">4</span><span class="p">):</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">adjacent</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="mi">4</span><span class="p">],</span> <span class="n">elf</span><span class="p">,</span> <span class="n">elves</span><span class="p">)</span>
<span class="k">if</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">proposed</span><span class="p">[</span><span class="n">elf</span><span class="p">]</span> <span class="o">=</span> <span class="n">deltas</span><span class="p">[</span><span class="n">options</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="mi">4</span><span class="p">][</span><span class="mi">0</span><span class="p">]]</span>
<span class="k">break</span>
<span class="n">option</span> <span class="o">=</span> <span class="p">(</span><span class="n">option</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">proposed</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">moves</span> <span class="o">=</span> <span class="p">[(</span><span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">)</span> <span class="k">for</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="p">(</span><span class="n">dx</span><span class="p">,</span> <span class="n">dy</span><span class="p">)</span> <span class="ow">in</span> <span class="n">proposed</span><span class="o">.</span><span class="n">items</span><span class="p">()]</span>
<span class="k">for</span> <span class="n">elf</span> <span class="ow">in</span> <span class="n">elves</span><span class="o">.</span><span class="n">copy</span><span class="p">():</span>
<span class="k">if</span> <span class="n">elf</span> <span class="ow">in</span> <span class="n">proposed</span><span class="p">:</span>
<span class="n">move</span> <span class="o">=</span> <span class="n">elf</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">proposed</span><span class="p">[</span><span class="n">elf</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">elf</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">proposed</span><span class="p">[</span><span class="n">elf</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">moves</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">move</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">elves</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">elf</span><span class="p">)</span>
<span class="n">elves</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">move</span><span class="p">)</span>
<span class="n">x_range</span><span class="p">,</span> <span class="n">y_range</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">elves</span><span class="p">],</span> <span class="p">[</span><span class="n">y</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">elves</span><span class="p">]</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">x_coord</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">min</span><span class="p">(</span><span class="n">x_range</span><span class="p">),</span> <span class="nb">max</span><span class="p">(</span><span class="n">x_range</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">y_coord</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">min</span><span class="p">(</span><span class="n">y_range</span><span class="p">),</span> <span class="nb">max</span><span class="p">(</span><span class="n">y_range</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x_coord</span><span class="p">,</span> <span class="n">y_coord</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">elves</span><span class="p">:</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_23_02.py """</span>
<span class="c1"># usage: python3 day_23_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">raw_location_data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" create object """</span>
<span class="n">output</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">raw_location_data</span><span class="p">:</span>
<span class="k">if</span> <span class="n">item</span> <span class="o">==</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">item</span> <span class="o">==</span> <span class="s1">'#'</span><span class="p">:</span>
<span class="n">output</span><span class="o">.</span><span class="n">add</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
<span class="n">x</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">output</span>
<span class="n">deltas</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'n'</span><span class="p">:</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> <span class="s1">'ne'</span><span class="p">:</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="s1">'e'</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="s1">'se'</span><span class="p">:</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="s1">'s'</span><span class="p">:</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="s1">'sw'</span><span class="p">:</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="s1">'w'</span><span class="p">:</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="s1">'nw'</span><span class="p">:</span> <span class="p">(</span><span class="o">-</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="k">def</span> <span class="nf">adjacent</span><span class="p">(</span><span class="n">dirs</span><span class="p">,</span> <span class="n">point</span><span class="p">,</span> <span class="n">elf_data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" count adjacent to point in dirs """</span>
<span class="n">tally</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">dirs</span><span class="p">:</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">deltas</span><span class="p">[</span><span class="n">d</span><span class="p">]</span>
<span class="k">if</span> <span class="p">(</span><span class="n">point</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">point</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">dy</span><span class="p">)</span> <span class="ow">in</span> <span class="n">elf_data</span><span class="p">:</span>
<span class="n">tally</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">tally</span>
<span class="n">elves</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">options</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'all'</span><span class="p">:</span> <span class="p">[</span><span class="s1">'n'</span><span class="p">,</span> <span class="s1">'ne'</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">,</span> <span class="s1">'se'</span><span class="p">,</span> <span class="s1">'s'</span><span class="p">,</span> <span class="s1">'sw'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">,</span> <span class="s1">'nw'</span><span class="p">],</span>
<span class="mi">0</span><span class="p">:</span> <span class="p">[</span><span class="s1">'n'</span><span class="p">,</span> <span class="s1">'ne'</span><span class="p">,</span> <span class="s1">'nw'</span><span class="p">],</span> <span class="mi">1</span><span class="p">:</span> <span class="p">[</span><span class="s1">'s'</span><span class="p">,</span> <span class="s1">'se'</span><span class="p">,</span> <span class="s1">'sw'</span><span class="p">],</span>
<span class="mi">2</span><span class="p">:</span> <span class="p">[</span><span class="s1">'w'</span><span class="p">,</span> <span class="s1">'nw'</span><span class="p">,</span> <span class="s1">'sw'</span><span class="p">],</span> <span class="mi">3</span><span class="p">:</span> <span class="p">[</span><span class="s1">'e'</span><span class="p">,</span> <span class="s1">'ne'</span><span class="p">,</span> <span class="s1">'se'</span><span class="p">]}</span>
<span class="n">option</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">rounds</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">rounds</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">proposed</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">elf</span> <span class="ow">in</span> <span class="n">elves</span><span class="p">:</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">adjacent</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="s1">'all'</span><span class="p">],</span> <span class="n">elf</span><span class="p">,</span> <span class="n">elves</span><span class="p">)</span>
<span class="k">if</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">continue</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="n">option</span><span class="p">,</span> <span class="n">option</span> <span class="o">+</span> <span class="mi">4</span><span class="p">):</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">adjacent</span><span class="p">(</span><span class="n">options</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="mi">4</span><span class="p">],</span> <span class="n">elf</span><span class="p">,</span> <span class="n">elves</span><span class="p">)</span>
<span class="k">if</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">proposed</span><span class="p">[</span><span class="n">elf</span><span class="p">]</span> <span class="o">=</span> <span class="n">deltas</span><span class="p">[</span><span class="n">options</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="mi">4</span><span class="p">][</span><span class="mi">0</span><span class="p">]]</span>
<span class="k">break</span>
<span class="n">option</span> <span class="o">=</span> <span class="p">(</span><span class="n">option</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">proposed</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">moves</span> <span class="o">=</span> <span class="p">[(</span><span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">)</span> <span class="k">for</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="p">(</span><span class="n">dx</span><span class="p">,</span> <span class="n">dy</span><span class="p">)</span> <span class="ow">in</span> <span class="n">proposed</span><span class="o">.</span><span class="n">items</span><span class="p">()]</span>
<span class="k">for</span> <span class="n">elf</span> <span class="ow">in</span> <span class="n">elves</span><span class="o">.</span><span class="n">copy</span><span class="p">():</span>
<span class="k">if</span> <span class="n">elf</span> <span class="ow">in</span> <span class="n">proposed</span><span class="p">:</span>
<span class="n">move</span> <span class="o">=</span> <span class="n">elf</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">proposed</span><span class="p">[</span><span class="n">elf</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">elf</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">proposed</span><span class="p">[</span><span class="n">elf</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
<span class="k">if</span> <span class="n">moves</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">move</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">elves</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">elf</span><span class="p">)</span>
<span class="n">elves</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">move</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">rounds</span><span class="p">)</span>
</code></pre></div>Day 22 - Advent of Code 20222022-12-23T09:45:00+10:002022-12-23T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-23:/day-22-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 22 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/22/">solutions</a> for the day 22 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_22_01.py """</span>
<span class="c1"># usage: python3 day_22_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" extract board and path to follow """</span>
<span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="nb">list</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()]</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">steps</span> <span class="o">=</span> <span class="s1">''</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">i</span> <span class="ow">in</span> <span class="s1">'0123456789'</span><span class="p">:</span>
<span class="n">steps</span> <span class="o">=</span> <span class="n">steps</span> <span class="o">+</span> <span class="n">i</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">directions</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">),</span> <span class="n">i</span><span class="p">])</span>
<span class="n">steps</span> <span class="o">=</span> <span class="s1">''</span>
<span class="n">directions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">steps</span><span class="p">))</span>
<span class="k">return</span> <span class="n">rows</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">],</span> <span class="n">directions</span>
<span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" find first '.' from top-left of board """</span>
<span class="k">return</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'.'</span><span class="p">),</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="n">pos</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" retrieve value ignoring out of range """</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">data</span><span class="p">[</span><span class="n">pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]][</span><span class="n">pos</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span>
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
<span class="k">return</span> <span class="s1">' '</span>
<span class="n">board</span><span class="p">,</span> <span class="n">path</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">width</span><span class="p">,</span> <span class="n">height</span> <span class="o">=</span> <span class="nb">max</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">board</span><span class="p">]),</span> <span class="nb">len</span><span class="p">(</span><span class="n">board</span><span class="p">)</span>
<span class="n">deltas</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="mi">1</span><span class="p">:</span> <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">2</span><span class="p">:</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="mi">3</span><span class="p">:</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>
<span class="n">facing</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">start</span><span class="p">(</span><span class="n">board</span><span class="p">)</span>
<span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">path</span><span class="p">:</span>
<span class="k">if</span> <span class="n">step</span> <span class="o">==</span> <span class="s1">'L'</span><span class="p">:</span>
<span class="n">facing</span> <span class="o">=</span> <span class="p">(</span><span class="n">facing</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span>
<span class="k">elif</span> <span class="n">step</span> <span class="o">==</span> <span class="s1">'R'</span><span class="p">:</span>
<span class="n">facing</span> <span class="o">=</span> <span class="p">(</span><span class="n">facing</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">%</span> <span class="mi">4</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">deltas</span><span class="p">[</span><span class="n">facing</span><span class="p">]</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">step</span><span class="p">):</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">if</span> <span class="n">get</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="n">board</span><span class="p">)</span> <span class="o">!=</span> <span class="s1">' '</span><span class="p">:</span>
<span class="n">x0</span><span class="p">,</span> <span class="n">y0</span> <span class="o">=</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">)</span> <span class="o">%</span> <span class="n">width</span><span class="p">,</span> <span class="p">(</span><span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">)</span> <span class="o">%</span> <span class="n">height</span>
<span class="k">if</span> <span class="n">get</span><span class="p">((</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">),</span> <span class="n">board</span><span class="p">)</span> <span class="o">==</span> <span class="s1">' '</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">x1</span><span class="p">,</span> <span class="n">y1</span>
<span class="k">continue</span>
<span class="k">break</span>
<span class="k">if</span> <span class="n">get</span><span class="p">((</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">),</span> <span class="n">board</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'.'</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">x1</span><span class="p">,</span> <span class="n">y1</span>
<span class="k">continue</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">x0</span><span class="p">,</span> <span class="n">y0</span>
<span class="k">break</span>
<span class="nb">print</span><span class="p">(</span><span class="mi">1000</span> <span class="o">*</span> <span class="p">(</span><span class="n">y</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="mi">4</span> <span class="o">*</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="n">facing</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="c1"># standby ...</span>
</code></pre></div>Day 21 - Advent of Code 20222022-12-22T09:45:00+10:002022-12-22T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-22:/day-21-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 21 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/21/">solutions</a> for the day 21 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_21_01.py """</span>
<span class="c1"># usage: python3 day_21_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">parse</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([</span><span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">': '</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()])</span>
<span class="n">lookup</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">while</span> <span class="n">lookup</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'root'</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">garbage</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">variable</span><span class="p">,</span> <span class="n">expression</span> <span class="ow">in</span> <span class="n">parse</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">lookup</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">lookup</span><span class="p">[</span><span class="n">variable</span><span class="p">]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">garbage</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">variable</span><span class="p">)</span>
<span class="k">for</span> <span class="n">variable</span> <span class="ow">in</span> <span class="n">garbage</span><span class="p">:</span>
<span class="k">del</span> <span class="n">parse</span><span class="p">[</span><span class="n">variable</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="n">lookup</span><span class="p">[</span><span class="s1">'root'</span><span class="p">])</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="c1"># standby ...</span>
</code></pre></div>Day 20 - Advent of Code 20222022-12-21T09:45:00+10:002022-12-21T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-21:/day-20-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 20 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/20/">solutions</a> for the day 20 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_20_01.py """</span>
<span class="c1"># usage: python3 day_20_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" create object """</span>
<span class="k">return</span> <span class="p">[(</span><span class="n">i</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">j</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">())]</span>
<span class="n">numbers</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">numbers</span><span class="p">)</span>
<span class="k">for</span> <span class="n">item</span><span class="p">,</span> <span class="n">move</span> <span class="ow">in</span> <span class="n">numbers</span><span class="o">.</span><span class="n">copy</span><span class="p">():</span>
<span class="n">pos</span> <span class="o">=</span> <span class="n">numbers</span><span class="o">.</span><span class="n">index</span><span class="p">((</span><span class="n">item</span><span class="p">,</span> <span class="n">move</span><span class="p">))</span>
<span class="n">numbers</span><span class="o">.</span><span class="n">remove</span><span class="p">((</span><span class="n">item</span><span class="p">,</span> <span class="n">move</span><span class="p">))</span>
<span class="n">at</span> <span class="o">=</span> <span class="p">(</span><span class="n">pos</span> <span class="o">+</span> <span class="n">move</span><span class="p">)</span> <span class="o">%</span> <span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">numbers</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">at</span><span class="p">,</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">move</span><span class="p">))</span>
<span class="n">zero</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">numbers</span><span class="p">]</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">([</span><span class="n">numbers</span><span class="p">[(</span><span class="n">zero</span> <span class="o">+</span> <span class="n">i</span><span class="p">)</span> <span class="o">%</span> <span class="n">size</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1000</span><span class="p">,</span> <span class="mi">2000</span><span class="p">,</span> <span class="mi">3000</span><span class="p">]]))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_20_02.py """</span>
<span class="c1"># usage: python3 day_20_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" create object """</span>
<span class="n">key</span> <span class="o">=</span> <span class="mi">811589153</span>
<span class="k">return</span> <span class="p">[(</span><span class="n">i</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">j</span><span class="p">)</span> <span class="o">*</span> <span class="n">key</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">())]</span>
<span class="n">numbers</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">numbers</span><span class="p">)</span>
<span class="n">order</span> <span class="o">=</span> <span class="n">numbers</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
<span class="k">for</span> <span class="n">item</span><span class="p">,</span> <span class="n">move</span> <span class="ow">in</span> <span class="n">order</span><span class="p">:</span>
<span class="n">pos</span> <span class="o">=</span> <span class="n">numbers</span><span class="o">.</span><span class="n">index</span><span class="p">((</span><span class="n">item</span><span class="p">,</span> <span class="n">move</span><span class="p">))</span>
<span class="n">numbers</span><span class="o">.</span><span class="n">remove</span><span class="p">((</span><span class="n">item</span><span class="p">,</span> <span class="n">move</span><span class="p">))</span>
<span class="n">at</span> <span class="o">=</span> <span class="p">(</span><span class="n">pos</span> <span class="o">+</span> <span class="n">move</span><span class="p">)</span> <span class="o">%</span> <span class="p">(</span><span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">numbers</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">at</span><span class="p">,</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">move</span><span class="p">))</span>
<span class="n">zero</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">numbers</span><span class="p">]</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">([</span><span class="n">numbers</span><span class="p">[(</span><span class="n">zero</span> <span class="o">+</span> <span class="n">i</span><span class="p">)</span> <span class="o">%</span> <span class="n">size</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1000</span><span class="p">,</span> <span class="mi">2000</span><span class="p">,</span> <span class="mi">3000</span><span class="p">]]))</span>
</code></pre></div>Day 18 - Advent of Code 20222022-12-19T09:45:00+10:002022-12-19T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-19:/day-18-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 18 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/18/">solutions</a> for the day 18 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_18_01.py """</span>
<span class="c1"># usage: python3 day_18_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" generate object """</span>
<span class="k">return</span> <span class="p">{</span><span class="nb">tuple</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">i</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()}</span>
<span class="k">def</span> <span class="nf">neighbours</span><span class="p">(</span><span class="n">qube</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate neighbouring qubes """</span>
<span class="n">deltas</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</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> <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> <span class="mi">0</span><span class="p">),</span> <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">0</span><span class="p">),</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</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="mi">0</span><span class="p">)]</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="o">=</span> <span class="n">qube</span>
<span class="k">return</span> <span class="p">{(</span><span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">,</span> <span class="n">z</span> <span class="o">+</span> <span class="n">dz</span><span class="p">)</span> <span class="k">for</span> <span class="n">dx</span><span class="p">,</span> <span class="n">dy</span><span class="p">,</span> <span class="n">dz</span> <span class="ow">in</span> <span class="n">deltas</span><span class="p">}</span>
<span class="n">lava</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">adjacent</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">cube</span> <span class="ow">in</span> <span class="n">lava</span><span class="p">:</span>
<span class="n">adjacent</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">neighbours</span><span class="p">(</span><span class="n">cube</span><span class="p">)</span> <span class="o">&</span> <span class="n">lava</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="mi">6</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">lava</span><span class="p">)</span> <span class="o">-</span> <span class="n">adjacent</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="c1"># standby ...</span>
</code></pre></div>Day 17 - Advent of Code 20222022-12-17T09:45:00+10:002022-12-17T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-17:/day-17-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 17 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/17/">solutions</a> for the day 17 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_17_01.py """</span>
<span class="c1"># usage: python3 day_17_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">rock_generator</span><span class="p">():</span>
<span class="w"> </span><span class="sd">""" generate rocks """</span>
<span class="n">rocks</span> <span class="o">=</span> <span class="p">[{(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">)},</span>
<span class="p">{(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</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="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)},</span>
<span class="p">{(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">)},</span>
<span class="p">{(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">3</span><span class="p">)},</span>
<span class="p">{(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</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="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">for</span> <span class="n">unit</span> <span class="ow">in</span> <span class="n">rocks</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">unit</span>
<span class="k">def</span> <span class="nf">jet_generator</span><span class="p">():</span>
<span class="w"> </span><span class="sd">""" generate jet blasts """</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">item</span>
<span class="k">def</span> <span class="nf">peak</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate highest point """</span>
<span class="k">return</span> <span class="nb">max</span><span class="p">({</span><span class="n">y</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">data</span><span class="p">})</span>
<span class="k">def</span> <span class="nf">move</span><span class="p">(</span><span class="n">delta</span><span class="p">,</span> <span class="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" move shape delta units """</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">delta</span>
<span class="n">shift</span> <span class="o">=</span> <span class="p">{(</span><span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">shape</span><span class="p">}</span>
<span class="k">if</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">shift</span> <span class="k">if</span> <span class="n">x</span> <span class="o"><</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">x</span> <span class="o">></span> <span class="mi">6</span><span class="p">]:</span>
<span class="k">return</span> <span class="n">shape</span><span class="p">,</span> <span class="kc">False</span>
<span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">isdisjoint</span><span class="p">(</span><span class="n">shift</span><span class="p">):</span>
<span class="k">return</span> <span class="n">shift</span><span class="p">,</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">shape</span><span class="p">,</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">left</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" move shape left """</span>
<span class="k">return</span> <span class="n">move</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="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">right</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" move shape right """</span>
<span class="k">return</span> <span class="n">move</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">down</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" move shape down """</span>
<span class="k">return</span> <span class="n">move</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> <span class="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">place</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" place shape """</span>
<span class="k">return</span> <span class="n">move</span><span class="p">((</span><span class="mi">2</span><span class="p">,</span> <span class="n">peak</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">+</span> <span class="mi">4</span><span class="p">),</span> <span class="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">action</span><span class="p">(</span><span class="n">blast</span><span class="p">,</span> <span class="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" action jet blast on shape """</span>
<span class="k">if</span> <span class="n">blast</span> <span class="o">==</span> <span class="s1">'<'</span><span class="p">:</span>
<span class="k">return</span> <span class="n">left</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="k">return</span> <span class="n">right</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
<span class="n">rock</span> <span class="o">=</span> <span class="n">rock_generator</span><span class="p">()</span>
<span class="n">jet</span> <span class="o">=</span> <span class="n">jet_generator</span><span class="p">()</span>
<span class="n">field</span> <span class="o">=</span> <span class="p">{(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">0</span><span class="p">)}</span>
<span class="n">rock_count</span> <span class="o">=</span> <span class="mi">2022</span>
<span class="k">while</span> <span class="n">rock_count</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">sprite</span> <span class="o">=</span> <span class="n">place</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">rock</span><span class="p">),</span> <span class="n">field</span><span class="p">)</span>
<span class="n">in_motion</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">while</span> <span class="n">in_motion</span><span class="p">:</span>
<span class="n">sprite</span> <span class="o">=</span> <span class="n">action</span><span class="p">(</span><span class="nb">next</span><span class="p">(</span><span class="n">jet</span><span class="p">),</span> <span class="n">sprite</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
<span class="n">sprite</span><span class="p">,</span> <span class="n">in_motion</span> <span class="o">=</span> <span class="n">down</span><span class="p">(</span><span class="n">sprite</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
<span class="n">field</span> <span class="o">=</span> <span class="n">field</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">sprite</span><span class="p">)</span>
<span class="n">rock_count</span> <span class="o">-=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">peak</span><span class="p">(</span><span class="n">field</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="c1"># standby ...</span>
</code></pre></div>Day 15 - Advent of Code 20222022-12-16T09:45:00+10:002022-12-16T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-16:/day-15-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 15 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/15/">solutions</a> for the day 15 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_15_01.py """</span>
<span class="c1"># usage: python3 day_15_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" parse sensor data """</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[</span><span class="n">line</span><span class="o">.</span><span class="n">removeprefix</span><span class="p">(</span><span class="s1">'Sensor at '</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()]</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[</span><span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">': closest beacon is at '</span><span class="p">,</span> <span class="s1">', '</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">output</span><span class="p">]</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[[</span><span class="nb">int</span><span class="p">(</span><span class="n">term</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="k">for</span> <span class="n">term</span> <span class="ow">in</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">)]</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">output</span><span class="p">]</span>
<span class="n">parsed_data</span> <span class="o">=</span> <span class="p">{(</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">):</span> <span class="p">(</span><span class="n">x2</span><span class="p">,</span> <span class="n">y2</span><span class="p">)</span> <span class="k">for</span> <span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">,</span> <span class="n">x2</span><span class="p">,</span> <span class="n">y2</span> <span class="ow">in</span> <span class="n">output</span><span class="p">}</span>
<span class="k">return</span> <span class="n">parsed_data</span>
<span class="k">def</span> <span class="nf">manhattan</span><span class="p">(</span><span class="n">begin</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate manhattan distance from begin to end """</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="n">begin</span>
<span class="n">x2</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="n">end</span>
<span class="k">return</span> <span class="nb">abs</span><span class="p">(</span><span class="n">x1</span> <span class="o">-</span> <span class="n">x2</span><span class="p">)</span> <span class="o">+</span> <span class="nb">abs</span><span class="p">(</span><span class="n">y1</span> <span class="o">-</span> <span class="n">y2</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">in_range</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">_sensor</span><span class="p">,</span> <span class="n">reach</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" is target in sensor reach """</span>
<span class="k">if</span> <span class="n">manhattan</span><span class="p">(</span><span class="n">_sensor</span><span class="p">,</span> <span class="p">(</span><span class="n">_sensor</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">target</span><span class="p">))</span> <span class="o">></span> <span class="n">reach</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">def</span> <span class="nf">leftmost</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate leftmost point scanned affecting target row """</span>
<span class="n">output</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s1">'inf'</span><span class="p">)</span>
<span class="k">for</span> <span class="n">_sensor</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">reach</span> <span class="o">=</span> <span class="n">manhattan</span><span class="p">(</span><span class="n">_sensor</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="n">_sensor</span><span class="p">])</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">in_range</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">_sensor</span><span class="p">,</span> <span class="n">reach</span><span class="p">):</span>
<span class="k">continue</span>
<span class="n">output</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="n">_sensor</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">reach</span><span class="p">)</span>
<span class="k">return</span> <span class="n">output</span>
<span class="k">def</span> <span class="nf">rightmost</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate rightmost point scanned affecting target row """</span>
<span class="n">output</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s1">'-inf'</span><span class="p">)</span>
<span class="k">for</span> <span class="n">_sensor</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="n">reach</span> <span class="o">=</span> <span class="n">manhattan</span><span class="p">(</span><span class="n">_sensor</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="n">_sensor</span><span class="p">])</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">in_range</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">_sensor</span><span class="p">,</span> <span class="n">reach</span><span class="p">):</span>
<span class="k">continue</span>
<span class="n">output</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="n">_sensor</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">reach</span><span class="p">)</span>
<span class="k">return</span> <span class="n">output</span>
<span class="n">report</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">objects</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span> <span class="o">|</span> <span class="nb">set</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="n">manhattans</span> <span class="o">=</span> <span class="p">{</span><span class="n">sensor</span><span class="p">:</span> <span class="n">manhattan</span><span class="p">(</span><span class="n">sensor</span><span class="p">,</span> <span class="n">report</span><span class="p">[</span><span class="n">sensor</span><span class="p">])</span> <span class="k">for</span> <span class="n">sensor</span> <span class="ow">in</span> <span class="n">report</span><span class="p">}</span>
<span class="n">y</span> <span class="o">=</span> <span class="mi">2000000</span>
<span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="n">leftmost</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">report</span><span class="p">),</span> <span class="n">rightmost</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">report</span><span class="p">)</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="n">objects</span><span class="p">:</span>
<span class="k">continue</span>
<span class="n">possible</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">for</span> <span class="n">sensor</span> <span class="ow">in</span> <span class="n">report</span><span class="p">:</span>
<span class="n">distance</span> <span class="o">=</span> <span class="n">manhattan</span><span class="p">(</span><span class="n">sensor</span><span class="p">,</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
<span class="k">if</span> <span class="n">distance</span> <span class="o"><=</span> <span class="n">manhattans</span><span class="p">[</span><span class="n">sensor</span><span class="p">]:</span>
<span class="n">possible</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">possible</span><span class="p">:</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_15_02.py """</span>
<span class="c1"># usage: python3 day_15_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" parse sensor data """</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[</span><span class="n">line</span><span class="o">.</span><span class="n">removeprefix</span><span class="p">(</span><span class="s1">'Sensor at '</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()]</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[</span><span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">': closest beacon is at '</span><span class="p">,</span> <span class="s1">', '</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">output</span><span class="p">]</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[[</span><span class="nb">int</span><span class="p">(</span><span class="n">term</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span> <span class="k">for</span> <span class="n">term</span> <span class="ow">in</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">', '</span><span class="p">)]</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">output</span><span class="p">]</span>
<span class="n">parsed_data</span> <span class="o">=</span> <span class="p">{(</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">):</span> <span class="p">(</span><span class="n">x2</span><span class="p">,</span> <span class="n">y2</span><span class="p">)</span> <span class="k">for</span> <span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">,</span> <span class="n">x2</span><span class="p">,</span> <span class="n">y2</span> <span class="ow">in</span> <span class="n">output</span><span class="p">}</span>
<span class="k">return</span> <span class="n">parsed_data</span>
<span class="k">def</span> <span class="nf">manhattan</span><span class="p">(</span><span class="n">begin</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate manhattan distance from begin to end """</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="n">begin</span>
<span class="n">x2</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="n">end</span>
<span class="k">return</span> <span class="nb">abs</span><span class="p">(</span><span class="n">x1</span> <span class="o">-</span> <span class="n">x2</span><span class="p">)</span> <span class="o">+</span> <span class="nb">abs</span><span class="p">(</span><span class="n">y1</span> <span class="o">-</span> <span class="n">y2</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">outline</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">radius</span><span class="p">,</span> <span class="n">boundary</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate points radius + 1 away from origin within boundary """</span>
<span class="k">def</span> <span class="nf">valid</span><span class="p">(</span><span class="n">coordinate</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" determine if coordinate is within boundary """</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">coordinate</span>
<span class="k">if</span> <span class="nb">any</span><span class="p">([</span><span class="n">x</span> <span class="o"><</span> <span class="mi">0</span><span class="p">,</span> <span class="n">x</span> <span class="o">></span> <span class="n">boundary</span><span class="p">,</span> <span class="n">y</span> <span class="o"><</span> <span class="mi">0</span><span class="p">,</span> <span class="n">y</span> <span class="o">></span> <span class="n">boundary</span><span class="p">]):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span>
<span class="n">point</span> <span class="o">=</span> <span class="n">origin</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">origin</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="p">(</span><span class="n">radius</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">while</span> <span class="n">point</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o"><</span> <span class="n">origin</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">valid</span><span class="p">(</span><span class="n">point</span><span class="p">):</span>
<span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">point</span><span class="p">)</span>
<span class="n">point</span> <span class="o">=</span> <span class="n">point</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">point</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">dy</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span>
<span class="n">point</span> <span class="o">=</span> <span class="n">origin</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">radius</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">origin</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">while</span> <span class="n">point</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">></span> <span class="n">origin</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">valid</span><span class="p">(</span><span class="n">point</span><span class="p">):</span>
<span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">point</span><span class="p">)</span>
<span class="n">point</span> <span class="o">=</span> <span class="n">point</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">point</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">dy</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">point</span> <span class="o">=</span> <span class="n">origin</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">origin</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">radius</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">while</span> <span class="n">point</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">></span> <span class="n">origin</span><span class="p">[</span><span class="mi">1</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">valid</span><span class="p">(</span><span class="n">point</span><span class="p">):</span>
<span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">point</span><span class="p">)</span>
<span class="n">point</span> <span class="o">=</span> <span class="n">point</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">point</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">dy</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">point</span> <span class="o">=</span> <span class="n">origin</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="p">(</span><span class="n">radius</span> <span class="o">+</span> <span class="mi">1</span><span class="p">),</span> <span class="n">origin</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">while</span> <span class="n">point</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o"><</span> <span class="n">origin</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">valid</span><span class="p">(</span><span class="n">point</span><span class="p">):</span>
<span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">point</span><span class="p">)</span>
<span class="n">point</span> <span class="o">=</span> <span class="n">point</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">point</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">dy</span>
<span class="k">return</span> <span class="n">output</span>
<span class="n">report</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">manhattans</span> <span class="o">=</span> <span class="p">{</span><span class="n">sensor</span><span class="p">:</span> <span class="n">manhattan</span><span class="p">(</span><span class="n">sensor</span><span class="p">,</span> <span class="n">report</span><span class="p">[</span><span class="n">sensor</span><span class="p">])</span> <span class="k">for</span> <span class="n">sensor</span> <span class="ow">in</span> <span class="n">report</span><span class="p">}</span>
<span class="n">limit</span> <span class="o">=</span> <span class="mi">4000000</span>
<span class="n">px</span><span class="p">,</span> <span class="n">py</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
<span class="n">loop</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">for</span> <span class="n">sensor</span> <span class="ow">in</span> <span class="n">report</span><span class="p">:</span>
<span class="n">points</span> <span class="o">=</span> <span class="n">outline</span><span class="p">(</span><span class="n">sensor</span><span class="p">,</span> <span class="n">manhattans</span><span class="p">[</span><span class="n">sensor</span><span class="p">],</span> <span class="n">limit</span><span class="p">)</span>
<span class="k">for</span> <span class="n">px</span><span class="p">,</span> <span class="n">py</span> <span class="ow">in</span> <span class="n">points</span><span class="p">:</span>
<span class="k">for</span> <span class="n">another</span> <span class="ow">in</span> <span class="n">report</span><span class="p">:</span>
<span class="k">if</span> <span class="n">another</span> <span class="o">!=</span> <span class="n">sensor</span><span class="p">:</span>
<span class="k">if</span> <span class="n">manhattan</span><span class="p">(</span><span class="n">another</span><span class="p">,</span> <span class="p">(</span><span class="n">px</span><span class="p">,</span> <span class="n">py</span><span class="p">))</span> <span class="o"><=</span> <span class="n">manhattans</span><span class="p">[</span><span class="n">another</span><span class="p">]:</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">loop</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">break</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">loop</span><span class="p">:</span>
<span class="k">break</span>
<span class="nb">print</span><span class="p">(</span><span class="n">px</span> <span class="o">*</span> <span class="mi">4000000</span> <span class="o">+</span> <span class="n">py</span><span class="p">)</span>
</code></pre></div>Day 14 - Advent of Code 20222022-12-15T09:45:00+10:002022-12-15T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-15:/day-14-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 14 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/14/">solutions</a> for the day 14 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_14_01.py """</span>
<span class="c1"># usage: python3 day_14_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate scan from input data """</span>
<span class="n">paths</span> <span class="o">=</span> <span class="p">[</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' -> '</span><span class="p">)</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()]</span>
<span class="n">paths</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">pt</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)))</span> <span class="k">for</span> <span class="n">pt</span> <span class="ow">in</span> <span class="n">path</span><span class="p">]</span>
<span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">]</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">:</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">path</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]):</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="n">path</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
<span class="n">x2</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="n">path</span><span class="p">[</span><span class="n">index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="p">(</span><span class="n">x2</span> <span class="o">></span> <span class="n">x1</span><span class="p">)</span> <span class="o">-</span> <span class="p">(</span><span class="n">x2</span> <span class="o"><</span> <span class="n">x1</span><span class="p">),</span> <span class="p">(</span><span class="n">y2</span> <span class="o">></span> <span class="n">y1</span><span class="p">)</span> <span class="o">-</span> <span class="p">(</span><span class="n">y2</span> <span class="o"><</span> <span class="n">y1</span><span class="p">)</span>
<span class="n">output</span><span class="p">[</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'#'</span>
<span class="k">while</span> <span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">)</span> <span class="o">!=</span> <span class="p">(</span><span class="n">x2</span><span class="p">,</span> <span class="n">y2</span><span class="p">):</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="n">x1</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">y1</span> <span class="o">+</span> <span class="n">dy</span>
<span class="n">output</span><span class="p">[</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'#'</span>
<span class="k">return</span> <span class="n">output</span>
<span class="k">def</span> <span class="nf">drop_sand</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" drop unit of sand from start in scan data """</span>
<span class="k">def</span> <span class="nf">check</span><span class="p">(</span><span class="n">pos</span><span class="p">,</span> <span class="n">delta</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" get object at pos + delta """</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">pos</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">delta</span>
<span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">),</span> <span class="s1">'.'</span><span class="p">)</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">start</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">if</span> <span class="n">y</span> <span class="o">==</span> <span class="n">data</span><span class="p">[</span><span class="s1">'limit'</span><span class="p">]:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">check</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span> <span class="o">==</span> <span class="s1">'.'</span><span class="p">:</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">check</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="p">(</span><span class="o">-</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="s1">'.'</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">check</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</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="s1">'.'</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span>
<span class="n">scan</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">scan</span><span class="p">[</span><span class="s1">'limit'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">([</span><span class="n">y</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">scan</span><span class="p">])</span>
<span class="n">units</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="p">(</span><span class="n">rest</span> <span class="o">:=</span> <span class="n">drop_sand</span><span class="p">((</span><span class="mi">500</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">scan</span><span class="p">))</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">scan</span><span class="p">[</span><span class="n">rest</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'O'</span>
<span class="n">units</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">units</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_14_02.py """</span>
<span class="c1"># usage: python3 day_14_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate scan from input data """</span>
<span class="n">paths</span> <span class="o">=</span> <span class="p">[</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' -> '</span><span class="p">)</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()]</span>
<span class="n">paths</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">pt</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)))</span> <span class="k">for</span> <span class="n">pt</span> <span class="ow">in</span> <span class="n">path</span><span class="p">]</span>
<span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">]</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">:</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">path</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]):</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="n">path</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
<span class="n">x2</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="n">path</span><span class="p">[</span><span class="n">index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="p">(</span><span class="n">x2</span> <span class="o">></span> <span class="n">x1</span><span class="p">)</span> <span class="o">-</span> <span class="p">(</span><span class="n">x2</span> <span class="o"><</span> <span class="n">x1</span><span class="p">),</span> <span class="p">(</span><span class="n">y2</span> <span class="o">></span> <span class="n">y1</span><span class="p">)</span> <span class="o">-</span> <span class="p">(</span><span class="n">y2</span> <span class="o"><</span> <span class="n">y1</span><span class="p">)</span>
<span class="n">output</span><span class="p">[</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'#'</span>
<span class="k">while</span> <span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">)</span> <span class="o">!=</span> <span class="p">(</span><span class="n">x2</span><span class="p">,</span> <span class="n">y2</span><span class="p">):</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="n">x1</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">y1</span> <span class="o">+</span> <span class="n">dy</span>
<span class="n">output</span><span class="p">[</span><span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'#'</span>
<span class="k">return</span> <span class="n">output</span>
<span class="k">def</span> <span class="nf">drop_sand</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" drop unit of sand from start in scan data """</span>
<span class="k">def</span> <span class="nf">check</span><span class="p">(</span><span class="n">pos</span><span class="p">,</span> <span class="n">delta</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" get object at pos + delta """</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">pos</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">delta</span>
<span class="k">if</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span> <span class="o">==</span> <span class="n">data</span><span class="p">[</span><span class="s1">'limit'</span><span class="p">]</span> <span class="o">+</span> <span class="mi">2</span><span class="p">:</span>
<span class="k">return</span> <span class="s1">'#'</span>
<span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span><span class="p">),</span> <span class="s1">'.'</span><span class="p">)</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">start</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">if</span> <span class="n">check</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span> <span class="o">==</span> <span class="s1">'.'</span><span class="p">:</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">check</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="p">(</span><span class="o">-</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="s1">'.'</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">check</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</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="s1">'.'</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span>
<span class="n">scan</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">scan</span><span class="p">[</span><span class="s1">'limit'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">([</span><span class="n">y</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">scan</span><span class="p">])</span>
<span class="n">units</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">while</span> <span class="p">(</span><span class="n">rest</span> <span class="o">:=</span> <span class="n">drop_sand</span><span class="p">((</span><span class="mi">500</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">scan</span><span class="p">))</span> <span class="o">!=</span> <span class="p">(</span><span class="mi">500</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span>
<span class="n">scan</span><span class="p">[</span><span class="n">rest</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'O'</span>
<span class="n">units</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">units</span><span class="p">)</span>
</code></pre></div>Day 13 - Advent of Code 20222022-12-14T09:45:00+10:002022-12-14T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-14:/day-13-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 13 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/13/">solutions</a> for the day 13 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_13_01.py """</span>
<span class="c1"># usage: python3 day_13_01.py < input</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">zip_longest</span>
<span class="k">def</span> <span class="nf">compare</span><span class="p">(</span><span class="n">left_item</span><span class="p">,</span> <span class="n">right_item</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" using rules of puzzle - compare """</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">zip_longest</span><span class="p">(</span><span class="n">left_item</span><span class="p">,</span> <span class="n">right_item</span><span class="p">):</span>
<span class="k">if</span> <span class="n">i</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">j</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
<span class="k">if</span> <span class="n">i</span> <span class="o"><</span> <span class="n">j</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">></span> <span class="n">j</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
<span class="n">v</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
<span class="n">v</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">j</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
<span class="n">v</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="n">i</span><span class="p">,</span> <span class="p">[</span><span class="n">j</span><span class="p">]</span>
<span class="k">if</span> <span class="p">(</span><span class="n">status</span> <span class="o">:=</span> <span class="n">compare</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">w</span><span class="p">))</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">status</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">index</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(),</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">if</span> <span class="n">compare</span><span class="p">(</span><span class="nb">eval</span><span class="p">(</span><span class="n">left</span><span class="p">),</span> <span class="nb">eval</span><span class="p">(</span><span class="n">right</span><span class="p">)):</span>
<span class="n">total</span> <span class="o">+=</span> <span class="n">index</span>
<span class="k">try</span><span class="p">:</span>
<span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">total</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_13_02.py """</span>
<span class="c1"># usage: python3 day_13_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">cmp_to_key</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">zip_longest</span>
<span class="k">def</span> <span class="nf">compare</span><span class="p">(</span><span class="n">left_item</span><span class="p">,</span> <span class="n">right_item</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" using rules of puzzle - compare """</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">zip_longest</span><span class="p">(</span><span class="n">left_item</span><span class="p">,</span> <span class="n">right_item</span><span class="p">):</span>
<span class="k">if</span> <span class="n">i</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">j</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
<span class="k">if</span> <span class="n">i</span> <span class="o"><</span> <span class="n">j</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">></span> <span class="n">j</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
<span class="n">v</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
<span class="n">v</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">j</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
<span class="n">v</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="n">i</span><span class="p">,</span> <span class="p">[</span><span class="n">j</span><span class="p">]</span>
<span class="k">if</span> <span class="p">(</span><span class="n">status</span> <span class="o">:=</span> <span class="n">compare</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">w</span><span class="p">))</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">status</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">compare_wrapper</span><span class="p">(</span><span class="n">left_item</span><span class="p">,</span> <span class="n">right_item</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" wrap compare for cmp_to_key function """</span>
<span class="n">value</span> <span class="o">=</span> <span class="p">{</span><span class="kc">True</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="kc">False</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">None</span><span class="p">:</span> <span class="mi">0</span><span class="p">}</span>
<span class="k">return</span> <span class="n">value</span><span class="p">[</span><span class="n">compare</span><span class="p">(</span><span class="n">left_item</span><span class="p">,</span> <span class="n">right_item</span><span class="p">)]</span>
<span class="n">packets</span> <span class="o">=</span> <span class="p">[</span><span class="n">packet</span> <span class="k">for</span> <span class="n">packet</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span> <span class="k">if</span> <span class="n">packet</span> <span class="o">!=</span> <span class="s1">''</span><span class="p">]</span>
<span class="n">packets</span> <span class="o">=</span> <span class="p">[</span><span class="nb">eval</span><span class="p">(</span><span class="n">packet</span><span class="p">)</span> <span class="k">for</span> <span class="n">packet</span> <span class="ow">in</span> <span class="n">packets</span> <span class="o">+</span> <span class="p">[</span><span class="s1">'[[2]]'</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="s1">'[[6]]'</span><span class="p">]]</span>
<span class="n">packets</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">cmp_to_key</span><span class="p">(</span><span class="n">compare_wrapper</span><span class="p">))</span>
<span class="nb">print</span><span class="p">((</span><span class="n">packets</span><span class="o">.</span><span class="n">index</span><span class="p">([[</span><span class="mi">2</span><span class="p">]])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">packets</span><span class="o">.</span><span class="n">index</span><span class="p">([[</span><span class="mi">6</span><span class="p">]])</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
</code></pre></div>Day 12 - Advent of Code 20222022-12-13T09:45:00+10:002022-12-13T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-13:/day-12-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 12 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/12/">solutions</a> for the day 12 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_12_01.py """</span>
<span class="c1"># usage: python3 day_12_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" create dictionary of paths """</span>
<span class="k">def</span> <span class="nf">neighbours</span><span class="p">(</span><span class="n">point</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate valid neighbours """</span>
<span class="k">def</span> <span class="nf">diff</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" difference in heights """</span>
<span class="n">mapping</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'S'</span><span class="p">:</span> <span class="s1">'a'</span><span class="p">,</span> <span class="s1">'E'</span><span class="p">:</span> <span class="s1">'z'</span><span class="p">}</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">,</span> <span class="n">x2</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="o">*</span><span class="n">p1</span><span class="p">,</span> <span class="o">*</span><span class="n">p2</span>
<span class="n">v1</span> <span class="o">=</span> <span class="n">mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">heights</span><span class="p">[</span><span class="n">y1</span><span class="p">][</span><span class="n">x1</span><span class="p">],</span> <span class="n">heights</span><span class="p">[</span><span class="n">y1</span><span class="p">][</span><span class="n">x1</span><span class="p">])</span>
<span class="n">v2</span> <span class="o">=</span> <span class="n">mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">heights</span><span class="p">[</span><span class="n">y2</span><span class="p">][</span><span class="n">x2</span><span class="p">],</span> <span class="n">heights</span><span class="p">[</span><span class="n">y2</span><span class="p">][</span><span class="n">x2</span><span class="p">])</span>
<span class="k">return</span> <span class="nb">ord</span><span class="p">(</span><span class="n">v1</span><span class="p">)</span> <span class="o">-</span> <span class="nb">ord</span><span class="p">(</span><span class="n">v2</span><span class="p">)</span>
<span class="n">deltas</span> <span class="o">=</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="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</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> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
<span class="n">xp</span><span class="p">,</span> <span class="n">yp</span> <span class="o">=</span> <span class="n">point</span>
<span class="n">options</span> <span class="o">=</span> <span class="p">[(</span><span class="n">xp</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">yp</span> <span class="o">+</span> <span class="n">dy</span><span class="p">)</span> <span class="k">for</span> <span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="ow">in</span> <span class="n">deltas</span><span class="p">]</span>
<span class="n">x_max</span><span class="p">,</span> <span class="n">y_max</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">heights</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">heights</span><span class="p">)</span>
<span class="n">valid</span> <span class="o">=</span> <span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">options</span>
<span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">x_max</span><span class="p">)</span> <span class="ow">and</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">y_max</span><span class="p">)]</span>
<span class="k">return</span> <span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">valid</span> <span class="k">if</span> <span class="n">diff</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="p">(</span><span class="n">xp</span><span class="p">,</span> <span class="n">yp</span><span class="p">))</span> <span class="o"><=</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">heights</span> <span class="o">=</span> <span class="p">[</span><span class="nb">list</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()]</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">y</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">heights</span><span class="p">):</span>
<span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">row</span><span class="p">):</span>
<span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="s1">'S'</span><span class="p">:</span>
<span class="n">output</span><span class="p">[</span><span class="s1">'start'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">value</span> <span class="o">==</span> <span class="s1">'E'</span><span class="p">:</span>
<span class="n">output</span><span class="p">[</span><span class="s1">'end'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="n">output</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)]</span> <span class="o">=</span> <span class="n">neighbours</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
<span class="k">return</span> <span class="n">output</span>
<span class="k">def</span> <span class="nf">shortest_path</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate shortest path from start to end """</span>
<span class="n">track</span> <span class="o">=</span> <span class="p">{</span><span class="n">start</span><span class="p">:</span> <span class="p">[</span><span class="n">start</span><span class="p">]}</span>
<span class="n">queue</span> <span class="o">=</span> <span class="p">[</span><span class="n">start</span><span class="p">]</span>
<span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
<span class="n">latest</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="n">latest</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">step</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">track</span><span class="p">:</span>
<span class="n">track</span><span class="p">[</span><span class="n">step</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">track</span><span class="p">[</span><span class="n">latest</span><span class="p">],</span> <span class="n">step</span><span class="p">]</span>
<span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">step</span><span class="p">)</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="n">track</span><span class="p">[</span><span class="n">end</span><span class="p">]:</span>
<span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">track</span><span class="p">[</span><span class="n">end</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
<span class="k">if</span> <span class="n">track</span><span class="p">[</span><span class="n">end</span><span class="p">]:</span>
<span class="n">track</span><span class="p">[</span><span class="n">end</span><span class="p">]</span> <span class="o">=</span> <span class="n">track</span><span class="p">[</span><span class="n">end</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">output</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
<span class="k">return</span> <span class="n">output</span>
<span class="n">paths</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">shortest_path</span><span class="p">(</span><span class="n">paths</span><span class="p">[</span><span class="s1">'start'</span><span class="p">],</span> <span class="n">paths</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span> <span class="n">paths</span><span class="p">))</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_12_02.py """</span>
<span class="c1"># usage: python3 day_12_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" create dictionary of paths """</span>
<span class="k">def</span> <span class="nf">neighbours</span><span class="p">(</span><span class="n">point</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate valid neighbours """</span>
<span class="k">def</span> <span class="nf">diff</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" difference in heights """</span>
<span class="n">mapping</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'S'</span><span class="p">:</span> <span class="s1">'a'</span><span class="p">,</span> <span class="s1">'E'</span><span class="p">:</span> <span class="s1">'z'</span><span class="p">}</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">y1</span><span class="p">,</span> <span class="n">x2</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="o">*</span><span class="n">p1</span><span class="p">,</span> <span class="o">*</span><span class="n">p2</span>
<span class="n">v1</span> <span class="o">=</span> <span class="n">mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">heights</span><span class="p">[</span><span class="n">y1</span><span class="p">][</span><span class="n">x1</span><span class="p">],</span> <span class="n">heights</span><span class="p">[</span><span class="n">y1</span><span class="p">][</span><span class="n">x1</span><span class="p">])</span>
<span class="n">v2</span> <span class="o">=</span> <span class="n">mapping</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">heights</span><span class="p">[</span><span class="n">y2</span><span class="p">][</span><span class="n">x2</span><span class="p">],</span> <span class="n">heights</span><span class="p">[</span><span class="n">y2</span><span class="p">][</span><span class="n">x2</span><span class="p">])</span>
<span class="k">return</span> <span class="nb">ord</span><span class="p">(</span><span class="n">v1</span><span class="p">)</span> <span class="o">-</span> <span class="nb">ord</span><span class="p">(</span><span class="n">v2</span><span class="p">)</span>
<span class="n">deltas</span> <span class="o">=</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="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</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> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
<span class="n">xp</span><span class="p">,</span> <span class="n">yp</span> <span class="o">=</span> <span class="n">point</span>
<span class="n">options</span> <span class="o">=</span> <span class="p">[(</span><span class="n">xp</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">yp</span> <span class="o">+</span> <span class="n">dy</span><span class="p">)</span> <span class="k">for</span> <span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="ow">in</span> <span class="n">deltas</span><span class="p">]</span>
<span class="n">x_max</span><span class="p">,</span> <span class="n">y_max</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">heights</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">heights</span><span class="p">)</span>
<span class="n">valid</span> <span class="o">=</span> <span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">options</span>
<span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">x_max</span><span class="p">)</span> <span class="ow">and</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">y_max</span><span class="p">)]</span>
<span class="k">return</span> <span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">valid</span> <span class="k">if</span> <span class="n">diff</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="p">(</span><span class="n">xp</span><span class="p">,</span> <span class="n">yp</span><span class="p">))</span> <span class="o"><=</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">heights</span> <span class="o">=</span> <span class="p">[</span><span class="nb">list</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()]</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">y</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">heights</span><span class="p">):</span>
<span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">row</span><span class="p">):</span>
<span class="k">if</span> <span class="n">value</span> <span class="o">==</span> <span class="s1">'S'</span><span class="p">:</span>
<span class="n">output</span><span class="p">[</span><span class="s1">'start'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">value</span> <span class="o">==</span> <span class="s1">'E'</span><span class="p">:</span>
<span class="n">output</span><span class="p">[</span><span class="s1">'end'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="k">if</span> <span class="n">value</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'a'</span><span class="p">,</span> <span class="s1">'S'</span><span class="p">]:</span>
<span class="n">output</span><span class="p">[</span><span class="s1">'a'</span><span class="p">]</span> <span class="o">=</span> <span class="n">output</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'a'</span><span class="p">,</span> <span class="p">[])</span> <span class="o">+</span> <span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)]</span>
<span class="n">output</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)]</span> <span class="o">=</span> <span class="n">neighbours</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
<span class="k">return</span> <span class="n">output</span>
<span class="k">def</span> <span class="nf">shortest_path</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate shortest path from start to end """</span>
<span class="n">track</span> <span class="o">=</span> <span class="p">{</span><span class="n">start</span><span class="p">:</span> <span class="p">[</span><span class="n">start</span><span class="p">]}</span>
<span class="n">queue</span> <span class="o">=</span> <span class="p">[</span><span class="n">start</span><span class="p">]</span>
<span class="k">while</span> <span class="n">queue</span><span class="p">:</span>
<span class="n">latest</span> <span class="o">=</span> <span class="n">queue</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="n">latest</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">step</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">track</span><span class="p">:</span>
<span class="n">track</span><span class="p">[</span><span class="n">step</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">track</span><span class="p">[</span><span class="n">latest</span><span class="p">],</span> <span class="n">step</span><span class="p">]</span>
<span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">step</span><span class="p">)</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="n">track</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">end</span><span class="p">):</span>
<span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">track</span><span class="p">[</span><span class="n">end</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
<span class="k">if</span> <span class="n">track</span><span class="p">[</span><span class="n">end</span><span class="p">]:</span>
<span class="n">track</span><span class="p">[</span><span class="n">end</span><span class="p">]</span> <span class="o">=</span> <span class="n">track</span><span class="p">[</span><span class="n">end</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="n">output</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
<span class="k">return</span> <span class="n">output</span>
<span class="n">paths</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">candidates</span> <span class="o">=</span> <span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">shortest_path</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">paths</span><span class="p">[</span><span class="s1">'end'</span><span class="p">],</span> <span class="n">paths</span><span class="p">))</span>
<span class="k">for</span> <span class="n">start</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">[</span><span class="s1">'a'</span><span class="p">]]</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">min</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="n">candidates</span> <span class="k">if</span> <span class="n">i</span> <span class="o">></span> <span class="mi">0</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
</code></pre></div>Day 11 - Advent of Code 20222022-12-12T09:45:00+10:002022-12-12T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-12:/day-11-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 11 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/11/">solutions</a> for the day 11 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_11_01.py """</span>
<span class="c1"># usage: python3 day_11_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">monkeys</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">barrel</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">active</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">text</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'Monkey'</span><span class="p">:</span>
<span class="n">active</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">removesuffix</span><span class="p">(</span><span class="s1">':'</span><span class="p">)</span>
<span class="n">monkeys</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">active</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'Starting'</span><span class="p">:</span>
<span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'items'</span><span class="p">)]</span> <span class="o">=</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="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">text</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)))</span>
<span class="k">elif</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'Operation:'</span><span class="p">:</span>
<span class="k">if</span> <span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'old'</span><span class="p">:</span>
<span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'x'</span>
<span class="n">operation</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s1">'lambda x: x'</span><span class="p">,</span> <span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">],</span> <span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]])</span>
<span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'operation'</span><span class="p">)]</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">operation</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'Test:'</span><span class="p">:</span>
<span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'test'</span><span class="p">)]</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="k">elif</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'If'</span><span class="p">:</span>
<span class="n">action</span> <span class="o">=</span> <span class="n">barrel</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="n">active</span><span class="p">,</span> <span class="s1">'action'</span><span class="p">),</span> <span class="p">[</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">])</span>
<span class="k">if</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'false:'</span><span class="p">:</span>
<span class="n">action</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">action</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'action'</span><span class="p">)]</span> <span class="o">=</span> <span class="n">action</span>
<span class="n">counts</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">20</span><span class="p">):</span>
<span class="k">for</span> <span class="n">active</span> <span class="ow">in</span> <span class="n">monkeys</span><span class="p">:</span>
<span class="k">while</span> <span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'items'</span><span class="p">)]:</span>
<span class="n">counts</span><span class="p">[</span><span class="n">active</span><span class="p">]</span> <span class="o">=</span> <span class="n">counts</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">active</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="n">item</span> <span class="o">=</span> <span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'items'</span><span class="p">)]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">worry</span> <span class="o">=</span> <span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'operation'</span><span class="p">)](</span><span class="n">item</span><span class="p">)</span> <span class="o">//</span> <span class="mi">3</span>
<span class="n">i</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">worry</span> <span class="o">%</span> <span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'test'</span><span class="p">)]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sendto</span> <span class="o">=</span> <span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'action'</span><span class="p">)][</span><span class="n">i</span><span class="p">]</span>
<span class="n">barrel</span><span class="p">[(</span><span class="n">sendto</span><span class="p">,</span> <span class="s1">'items'</span><span class="p">)]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">worry</span><span class="p">)</span>
<span class="n">highest</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">counts</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="n">highest</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">highest</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">highest</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_11_02.py """</span>
<span class="c1"># usage: python3 day_11_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">monkeys</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">barrel</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">lcm</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">active</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">text</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">if</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'Monkey'</span><span class="p">:</span>
<span class="n">active</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">removesuffix</span><span class="p">(</span><span class="s1">':'</span><span class="p">)</span>
<span class="n">monkeys</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">active</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'Starting'</span><span class="p">:</span>
<span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'items'</span><span class="p">)]</span> <span class="o">=</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="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">text</span><span class="p">[</span><span class="mi">2</span><span class="p">:])</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)))</span>
<span class="k">elif</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'Operation:'</span><span class="p">:</span>
<span class="k">if</span> <span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'old'</span><span class="p">:</span>
<span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'x'</span>
<span class="n">operation</span> <span class="o">=</span> <span class="s1">' '</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s1">'lambda x: x'</span><span class="p">,</span> <span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">],</span> <span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]])</span>
<span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'operation'</span><span class="p">)]</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">operation</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'Test:'</span><span class="p">:</span>
<span class="n">divisor</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
<span class="n">lcm</span> <span class="o">*=</span> <span class="n">divisor</span>
<span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'test'</span><span class="p">)]</span> <span class="o">=</span> <span class="n">divisor</span>
<span class="k">elif</span> <span class="n">text</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'If'</span><span class="p">:</span>
<span class="n">action</span> <span class="o">=</span> <span class="n">barrel</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="n">active</span><span class="p">,</span> <span class="s1">'action'</span><span class="p">),</span> <span class="p">[</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">])</span>
<span class="k">if</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'false:'</span><span class="p">:</span>
<span class="n">action</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">action</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">text</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'action'</span><span class="p">)]</span> <span class="o">=</span> <span class="n">action</span>
<span class="n">counts</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10000</span><span class="p">):</span>
<span class="k">for</span> <span class="n">active</span> <span class="ow">in</span> <span class="n">monkeys</span><span class="p">:</span>
<span class="k">while</span> <span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'items'</span><span class="p">)]:</span>
<span class="n">counts</span><span class="p">[</span><span class="n">active</span><span class="p">]</span> <span class="o">=</span> <span class="n">counts</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">active</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="n">item</span> <span class="o">=</span> <span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'items'</span><span class="p">)]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">worry</span> <span class="o">=</span> <span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'operation'</span><span class="p">)](</span><span class="n">item</span><span class="p">)</span> <span class="o">%</span> <span class="n">lcm</span>
<span class="n">i</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">worry</span> <span class="o">%</span> <span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'test'</span><span class="p">)]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">sendto</span> <span class="o">=</span> <span class="n">barrel</span><span class="p">[(</span><span class="n">active</span><span class="p">,</span> <span class="s1">'action'</span><span class="p">)][</span><span class="n">i</span><span class="p">]</span>
<span class="n">barrel</span><span class="p">[(</span><span class="n">sendto</span><span class="p">,</span> <span class="s1">'items'</span><span class="p">)]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">worry</span><span class="p">)</span>
<span class="n">highest</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">counts</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="n">highest</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">highest</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">highest</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
</code></pre></div>Day 10 - Advent of Code 20222022-12-11T09:45:00+10:002022-12-11T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-11:/day-10-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 10 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/10/">solutions</a> for the day 10 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_10_01.py """</span>
<span class="c1"># usage: python3 day_10_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">class</span> <span class="nc">Device</span><span class="p">():</span>
<span class="w"> </span><span class="sd">""" simulate puzzle device """</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">program</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">program</span> <span class="o">=</span> <span class="n">program</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pc</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">step</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">breaks</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" execute current line """</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">+</span> <span class="mi">1</span> <span class="ow">in</span> <span class="n">breaks</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">solution</span> <span class="o">+=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span>
<span class="n">line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">program</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">pc</span><span class="p">]</span>
<span class="k">if</span> <span class="n">line</span> <span class="o">==</span> <span class="s1">'noop'</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'addx '</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">+</span> <span class="mi">2</span> <span class="ow">in</span> <span class="n">breaks</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">solution</span> <span class="o">+=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span>
<span class="n">_</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">+=</span> <span class="mi">2</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pc</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">breaks</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" execute program """</span>
<span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pc</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">pc</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">program</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">(</span><span class="n">breaks</span><span class="p">)</span>
<span class="n">handheld</span> <span class="o">=</span> <span class="n">Device</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">handheld</span><span class="o">.</span><span class="n">run</span><span class="p">([</span><span class="mi">20</span><span class="p">,</span> <span class="mi">60</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">140</span><span class="p">,</span> <span class="mi">180</span><span class="p">,</span> <span class="mi">220</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">handheld</span><span class="o">.</span><span class="n">solution</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_10_02.py """</span>
<span class="c1"># usage: python3 day_10_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">class</span> <span class="nc">Device</span><span class="p">():</span>
<span class="w"> </span><span class="sd">""" simulate puzzle device """</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">program</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">program</span> <span class="o">=</span> <span class="n">program</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pc</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">sprite</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cycle</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" check if sprite visible when pixel is drawn """</span>
<span class="n">y</span><span class="p">,</span> <span class="n">x</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span><span class="n">cycle</span><span class="p">,</span> <span class="mi">40</span><span class="p">)</span>
<span class="k">if</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">solution</span><span class="p">[</span><span class="n">y</span><span class="p">][</span><span class="n">x</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'#'</span>
<span class="k">def</span> <span class="nf">step</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" execute current line """</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sprite</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cycle</span><span class="p">)</span>
<span class="n">line</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">program</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">pc</span><span class="p">]</span>
<span class="k">if</span> <span class="n">line</span> <span class="o">==</span> <span class="s1">'noop'</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'addx '</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sprite</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">_</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">+=</span> <span class="mi">2</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pc</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" execute program """</span>
<span class="bp">self</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pc</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">solution</span> <span class="o">=</span> <span class="p">[[</span><span class="s1">'.'</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">40</span><span class="p">)]</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">6</span><span class="p">)]</span>
<span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">pc</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">program</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">crt</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" render solution as CRT """</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">solution</span><span class="p">:</span>
<span class="n">output</span> <span class="o">+=</span> <span class="p">[</span><span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">line</span><span class="p">)]</span>
<span class="k">return</span> <span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">output</span><span class="p">)</span>
<span class="n">handheld</span> <span class="o">=</span> <span class="n">Device</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">handheld</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="n">handheld</span><span class="o">.</span><span class="n">crt</span><span class="p">())</span>
</code></pre></div>Day 9 - Advent of Code 20222022-12-10T09:45:00+10:002022-12-10T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-10:/day-9-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 9 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/09/">solutions</a> for the day 9 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_09_01.py """</span>
<span class="c1"># usage: python3 day_09_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">move</span><span class="p">(</span><span class="n">way</span><span class="p">,</span> <span class="n">head_pos</span><span class="p">,</span> <span class="n">tail_pos</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate new head and tail after a step this way """</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">head_pos</span>
<span class="k">if</span> <span class="n">way</span> <span class="o">==</span> <span class="s1">'U'</span><span class="p">:</span>
<span class="n">new_head</span> <span class="o">=</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">way</span> <span class="o">==</span> <span class="s1">'D'</span><span class="p">:</span>
<span class="n">new_head</span> <span class="o">=</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">-</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">way</span> <span class="o">==</span> <span class="s1">'L'</span><span class="p">:</span>
<span class="n">new_head</span> <span class="o">=</span> <span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span>
<span class="k">elif</span> <span class="n">way</span> <span class="o">==</span> <span class="s1">'R'</span><span class="p">:</span>
<span class="n">new_head</span> <span class="o">=</span> <span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">new_head</span> <span class="o">=</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">touching</span><span class="p">(</span><span class="n">new_head</span><span class="p">,</span> <span class="n">tail_pos</span><span class="p">):</span>
<span class="k">return</span> <span class="n">new_head</span><span class="p">,</span> <span class="n">adjust</span><span class="p">(</span><span class="n">new_head</span><span class="p">,</span> <span class="n">tail_pos</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_head</span><span class="p">,</span> <span class="n">tail_pos</span>
<span class="k">def</span> <span class="nf">touching</span><span class="p">(</span><span class="n">head_pos</span><span class="p">,</span> <span class="n">tail_pos</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" determine if head and tail touch """</span>
<span class="n">dx</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">head_pos</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">tail_pos</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">dy</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">head_pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">tail_pos</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">if</span> <span class="n">dx</span> <span class="o"><</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">dy</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">adjust</span><span class="p">(</span><span class="n">head_pos</span><span class="p">,</span> <span class="n">tail_pos</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" move tail so is touching and in same row or column """</span>
<span class="n">sign</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="p">(</span><span class="n">x</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="o">-</span> <span class="p">(</span><span class="n">x</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">tx</span><span class="p">,</span> <span class="n">ty</span> <span class="o">=</span> <span class="n">tail_pos</span>
<span class="n">tx</span> <span class="o">+=</span> <span class="n">sign</span><span class="p">(</span><span class="n">head_pos</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">tx</span><span class="p">)</span>
<span class="n">ty</span> <span class="o">+=</span> <span class="n">sign</span><span class="p">(</span><span class="n">head_pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">ty</span><span class="p">)</span>
<span class="k">return</span> <span class="n">tx</span><span class="p">,</span> <span class="n">ty</span>
<span class="n">head</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="n">tail</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="n">unique</span> <span class="o">=</span> <span class="p">{</span><span class="n">tail</span><span class="p">}</span>
<span class="k">for</span> <span class="n">displacement</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">direction</span><span class="p">,</span> <span class="n">length</span> <span class="o">=</span> <span class="n">displacement</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">length</span><span class="p">)):</span>
<span class="n">head</span><span class="p">,</span> <span class="n">tail</span> <span class="o">=</span> <span class="n">move</span><span class="p">(</span><span class="n">direction</span><span class="p">,</span> <span class="n">head</span><span class="p">,</span> <span class="n">tail</span><span class="p">)</span>
<span class="n">unique</span> <span class="o">=</span> <span class="n">unique</span> <span class="o">|</span> <span class="p">{</span><span class="n">tail</span><span class="p">}</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">unique</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_09_02.py """</span>
<span class="c1"># usage: python3 day_09_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">move</span><span class="p">(</span><span class="n">way</span><span class="p">,</span> <span class="n">head_pos</span><span class="p">,</span> <span class="n">tail_pos</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate new head and tail after a step this way """</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">head_pos</span>
<span class="k">if</span> <span class="n">way</span> <span class="o">==</span> <span class="s1">'U'</span><span class="p">:</span>
<span class="n">new_head</span> <span class="o">=</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">way</span> <span class="o">==</span> <span class="s1">'D'</span><span class="p">:</span>
<span class="n">new_head</span> <span class="o">=</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">-</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">way</span> <span class="o">==</span> <span class="s1">'L'</span><span class="p">:</span>
<span class="n">new_head</span> <span class="o">=</span> <span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span>
<span class="k">elif</span> <span class="n">way</span> <span class="o">==</span> <span class="s1">'R'</span><span class="p">:</span>
<span class="n">new_head</span> <span class="o">=</span> <span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">new_head</span> <span class="o">=</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">touching</span><span class="p">(</span><span class="n">new_head</span><span class="p">,</span> <span class="n">tail_pos</span><span class="p">):</span>
<span class="k">return</span> <span class="n">new_head</span><span class="p">,</span> <span class="n">adjust</span><span class="p">(</span><span class="n">new_head</span><span class="p">,</span> <span class="n">tail_pos</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_head</span><span class="p">,</span> <span class="n">tail_pos</span>
<span class="k">def</span> <span class="nf">touching</span><span class="p">(</span><span class="n">head_pos</span><span class="p">,</span> <span class="n">tail_pos</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" determine if head and tail touch """</span>
<span class="n">dx</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">head_pos</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">tail_pos</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">dy</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">head_pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">tail_pos</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
<span class="k">if</span> <span class="n">dx</span> <span class="o"><</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">dy</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">adjust</span><span class="p">(</span><span class="n">head_pos</span><span class="p">,</span> <span class="n">tail_pos</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" move tail so is touching and in same row or column """</span>
<span class="n">sign</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="p">(</span><span class="n">x</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="o">-</span> <span class="p">(</span><span class="n">x</span> <span class="o"><</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">tx</span><span class="p">,</span> <span class="n">ty</span> <span class="o">=</span> <span class="n">tail_pos</span>
<span class="n">tx</span> <span class="o">+=</span> <span class="n">sign</span><span class="p">(</span><span class="n">head_pos</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">tx</span><span class="p">)</span>
<span class="n">ty</span> <span class="o">+=</span> <span class="n">sign</span><span class="p">(</span><span class="n">head_pos</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">ty</span><span class="p">)</span>
<span class="k">return</span> <span class="n">tx</span><span class="p">,</span> <span class="n">ty</span>
<span class="n">size</span> <span class="o">=</span> <span class="mi">10</span>
<span class="n">tail</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">rope</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">size</span><span class="p">)]</span>
<span class="n">unique</span> <span class="o">=</span> <span class="p">{</span><span class="n">tail</span><span class="p">(</span><span class="n">rope</span><span class="p">)}</span>
<span class="k">for</span> <span class="n">displacement</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">direction</span><span class="p">,</span> <span class="n">length</span> <span class="o">=</span> <span class="n">displacement</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">length</span><span class="p">)):</span>
<span class="n">rope</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">rope</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">move</span><span class="p">(</span><span class="n">direction</span><span class="p">,</span> <span class="n">rope</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">rope</span><span class="p">[</span><span class="mi">1</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">1</span><span class="p">,</span> <span class="n">size</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">touching</span><span class="p">(</span><span class="n">rope</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">rope</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]):</span>
<span class="n">rope</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">adjust</span><span class="p">(</span><span class="n">rope</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">rope</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">])</span>
<span class="n">unique</span> <span class="o">=</span> <span class="n">unique</span> <span class="o">|</span> <span class="p">{</span><span class="n">tail</span><span class="p">(</span><span class="n">rope</span><span class="p">)}</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">unique</span><span class="p">))</span>
</code></pre></div>Day 8 - Advent of Code 20222022-12-09T09:45:00+10:002022-12-09T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-09:/day-8-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 8 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/08/">solutions</a> for the day 8 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_08_01.py """</span>
<span class="c1"># usage: python3 day_08_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">chop</span><span class="p">(</span><span class="n">height</span><span class="p">,</span> <span class="n">base</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate height above base less one - floor is 0 """</span>
<span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">height</span> <span class="o">-</span> <span class="p">(</span><span class="n">base</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">top</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate top edge to tree at row, col """</span>
<span class="n">tree</span> <span class="o">=</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">col_arg</span><span class="p">]</span>
<span class="n">line</span> <span class="o">=</span> <span class="p">[</span><span class="n">chop</span><span class="p">(</span><span class="n">patch_arg</span><span class="p">[</span><span class="n">y</span><span class="p">][</span><span class="n">col_arg</span><span class="p">],</span> <span class="n">tree</span><span class="p">)</span> <span class="k">for</span> <span class="n">y</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="n">row_arg</span><span class="p">)]</span>
<span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">bottom</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate tree at row, col to bottom edge """</span>
<span class="n">tree</span> <span class="o">=</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">col_arg</span><span class="p">]</span>
<span class="n">line</span> <span class="o">=</span> <span class="p">[</span><span class="n">chop</span><span class="p">(</span><span class="n">patch_arg</span><span class="p">[</span><span class="n">y</span><span class="p">][</span><span class="n">col_arg</span><span class="p">],</span> <span class="n">tree</span><span class="p">)</span>
<span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">row_arg</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">patch_arg</span><span class="p">))]</span>
<span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">left</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate left edge to tree at row, col """</span>
<span class="n">tree</span> <span class="o">=</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">col_arg</span><span class="p">]</span>
<span class="n">line</span> <span class="o">=</span> <span class="p">[</span><span class="n">chop</span><span class="p">(</span><span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">x</span><span class="p">],</span> <span class="n">tree</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</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="n">col_arg</span><span class="p">)]</span>
<span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">right</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate tree at row, col to right edge """</span>
<span class="n">tree</span> <span class="o">=</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">col_arg</span><span class="p">]</span>
<span class="n">line</span> <span class="o">=</span> <span class="p">[</span><span class="n">chop</span><span class="p">(</span><span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">x</span><span class="p">],</span> <span class="n">tree</span><span class="p">)</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">col_arg</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">patch_arg</span><span class="p">[</span><span class="mi">0</span><span class="p">]))]</span>
<span class="k">return</span> <span class="nb">sum</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">visible</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate if tree at row, col is visible in square patch """</span>
<span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">patch_arg</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
<span class="k">if</span> <span class="mi">0</span> <span class="ow">in</span> <span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">)</span> <span class="ow">or</span> <span class="n">size</span> <span class="ow">in</span> <span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">top</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">bottom</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">left</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">right</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">patch</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">patch</span><span class="o">.</span><span class="n">append</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">row</span><span class="o">.</span><span class="n">rstrip</span><span class="p">())))</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">j</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">patch</span><span class="p">):</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">row</span><span class="p">):</span>
<span class="k">if</span> <span class="n">visible</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">patch</span><span class="p">):</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">count</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_08_02.py """</span>
<span class="c1"># usage: python3 day_08_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="k">def</span> <span class="nf">top</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate from tree at row, col towards top edge """</span>
<span class="n">tree</span> <span class="o">=</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">col_arg</span><span class="p">]</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">row_arg</span> <span class="o">-</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="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">y</span><span class="p">][</span><span class="n">col_arg</span><span class="p">]</span> <span class="o">>=</span> <span class="n">tree</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">return</span> <span class="n">count</span>
<span class="k">def</span> <span class="nf">bottom</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate from tree at row, col towards bottom edge """</span>
<span class="n">tree</span> <span class="o">=</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">col_arg</span><span class="p">]</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">row_arg</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">patch_arg</span><span class="p">)):</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">y</span><span class="p">][</span><span class="n">col_arg</span><span class="p">]</span> <span class="o">>=</span> <span class="n">tree</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">return</span> <span class="n">count</span>
<span class="k">def</span> <span class="nf">left</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate from tree at row, col towards left edge """</span>
<span class="n">tree</span> <span class="o">=</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">col_arg</span><span class="p">]</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">col_arg</span> <span class="o">-</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="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">x</span><span class="p">]</span> <span class="o">>=</span> <span class="n">tree</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">return</span> <span class="n">count</span>
<span class="k">def</span> <span class="nf">right</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate from tree at row, col towards right edge """</span>
<span class="n">tree</span> <span class="o">=</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">col_arg</span><span class="p">]</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">col_arg</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">])):</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">patch_arg</span><span class="p">[</span><span class="n">row_arg</span><span class="p">][</span><span class="n">x</span><span class="p">]</span> <span class="o">>=</span> <span class="n">tree</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">return</span> <span class="n">count</span>
<span class="k">def</span> <span class="nf">scenic</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate scenic score for tree at row, col in square patch """</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">(</span><span class="n">top</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">),</span>
<span class="n">bottom</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">),</span>
<span class="n">left</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">),</span>
<span class="n">right</span><span class="p">(</span><span class="n">row_arg</span><span class="p">,</span> <span class="n">col_arg</span><span class="p">,</span> <span class="n">patch_arg</span><span class="p">))</span>
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">prod</span><span class="p">(</span><span class="n">output</span><span class="p">)</span>
<span class="n">patch</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">patch</span><span class="o">.</span><span class="n">append</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">row</span><span class="o">.</span><span class="n">rstrip</span><span class="p">())))</span>
<span class="n">score</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">j</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">patch</span><span class="p">):</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">col</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">row</span><span class="p">):</span>
<span class="n">score</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">score</span><span class="p">,</span> <span class="n">scenic</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">patch</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">score</span><span class="p">)</span>
</code></pre></div>Day 7 - Advent of Code 20222022-12-08T09:45:00+10:002022-12-08T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-08:/day-7-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 7 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/07/">solutions</a> for the day 7 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_07_01.py """</span>
<span class="c1"># usage: python3 day_07_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">dirs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">path</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'$'</span><span class="p">):</span>
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'$ cd '</span><span class="p">):</span>
<span class="n">_</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">directory</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">if</span> <span class="n">directory</span> <span class="o">==</span> <span class="s1">'..'</span><span class="p">:</span>
<span class="n">path</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">directory</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">cwd</span> <span class="o">=</span> <span class="s1">'-'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">files</span> <span class="o">=</span> <span class="n">dirs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">cwd</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">atom</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">if</span> <span class="n">atom</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'dir'</span><span class="p">:</span>
<span class="n">atom</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">cwd</span> <span class="o">+</span> <span class="s1">'-'</span> <span class="o">+</span> <span class="n">atom</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">atom</span><span class="p">)</span>
<span class="n">dirs</span><span class="p">[</span><span class="n">cwd</span><span class="p">]</span> <span class="o">=</span> <span class="n">files</span>
<span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="n">folder</span><span class="p">,</span> <span class="n">structure</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate size of folder and files in structure """</span>
<span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">structure</span><span class="p">[</span><span class="n">folder</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">'dir'</span><span class="p">:</span>
<span class="n">total</span> <span class="o">+=</span> <span class="n">size</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">structure</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">total</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">return</span> <span class="n">total</span>
<span class="n">candidates</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">dirs</span><span class="p">:</span>
<span class="n">files</span> <span class="o">=</span> <span class="n">size</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">dirs</span><span class="p">)</span>
<span class="k">if</span> <span class="n">files</span> <span class="o"><=</span> <span class="mi">100000</span><span class="p">:</span>
<span class="n">candidates</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">files</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">candidates</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_07_02.py """</span>
<span class="c1"># usage: python3 day_07_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">dirs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">path</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'$'</span><span class="p">):</span>
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'$ cd '</span><span class="p">):</span>
<span class="n">_</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">directory</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">if</span> <span class="n">directory</span> <span class="o">==</span> <span class="s1">'..'</span><span class="p">:</span>
<span class="n">path</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">directory</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">cwd</span> <span class="o">=</span> <span class="s1">'-'</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="n">files</span> <span class="o">=</span> <span class="n">dirs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">cwd</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">atom</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">if</span> <span class="n">atom</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'dir'</span><span class="p">:</span>
<span class="n">atom</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">cwd</span> <span class="o">+</span> <span class="s1">'-'</span> <span class="o">+</span> <span class="n">atom</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">atom</span><span class="p">)</span>
<span class="n">dirs</span><span class="p">[</span><span class="n">cwd</span><span class="p">]</span> <span class="o">=</span> <span class="n">files</span>
<span class="k">def</span> <span class="nf">size</span><span class="p">(</span><span class="n">folder</span><span class="p">,</span> <span class="n">structure</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate size of folder and files in structure """</span>
<span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">structure</span><span class="p">[</span><span class="n">folder</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="s1">'dir'</span><span class="p">:</span>
<span class="n">total</span> <span class="o">+=</span> <span class="n">size</span><span class="p">(</span><span class="n">j</span><span class="p">,</span> <span class="n">structure</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">total</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="k">return</span> <span class="n">total</span>
<span class="n">disk</span> <span class="o">=</span> <span class="mi">70000000</span>
<span class="n">needed</span> <span class="o">=</span> <span class="mi">30000000</span>
<span class="n">free</span> <span class="o">=</span> <span class="n">disk</span> <span class="o">-</span> <span class="n">size</span><span class="p">(</span><span class="s1">'/'</span><span class="p">,</span> <span class="n">dirs</span><span class="p">)</span>
<span class="n">candidates</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">dirs</span><span class="p">:</span>
<span class="n">files</span> <span class="o">=</span> <span class="n">size</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">dirs</span><span class="p">)</span>
<span class="k">if</span> <span class="n">files</span> <span class="o">+</span> <span class="n">free</span> <span class="o">>=</span> <span class="n">needed</span><span class="p">:</span>
<span class="n">candidates</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">files</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">min</span><span class="p">(</span><span class="n">candidates</span><span class="p">))</span>
</code></pre></div>Day 6 - Advent of Code 20222022-12-07T09:45:00+10:002022-12-07T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-07:/day-6-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 6 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/06/">solutions</a> for the day 6 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_06_01.py """</span>
<span class="c1"># usage: python3 day_06_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">unique</span> <span class="o">=</span> <span class="mi">4</span>
<span class="n">position</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">character_buffer</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="ow">not</span> <span class="p">(</span><span class="n">character</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span><span class="o">.</span><span class="n">isspace</span><span class="p">():</span>
<span class="n">position</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">character_buffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">character</span><span class="p">)</span>
<span class="n">character_buffer</span> <span class="o">=</span> <span class="n">character_buffer</span><span class="p">[</span><span class="o">-</span><span class="n">unique</span><span class="p">:]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">character_buffer</span><span class="p">))</span> <span class="o">==</span> <span class="n">unique</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">position</span><span class="p">)</span>
<span class="k">break</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_06_02.py """</span>
<span class="c1"># usage: python3 day_06_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">unique</span> <span class="o">=</span> <span class="mi">14</span>
<span class="n">position</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">character_buffer</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="ow">not</span> <span class="p">(</span><span class="n">character</span> <span class="o">:=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span><span class="o">.</span><span class="n">isspace</span><span class="p">():</span>
<span class="n">position</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">character_buffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">character</span><span class="p">)</span>
<span class="n">character_buffer</span> <span class="o">=</span> <span class="n">character_buffer</span><span class="p">[</span><span class="o">-</span><span class="n">unique</span><span class="p">:]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">character_buffer</span><span class="p">))</span> <span class="o">==</span> <span class="n">unique</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">position</span><span class="p">)</span>
<span class="k">break</span>
</code></pre></div>Day 5 - Advent of Code 20222022-12-06T09:45:00+10:002022-12-06T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-06:/day-5-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 5 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/05/">solutions</a> for the day 5 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_05_01.py """</span>
<span class="c1"># usage: python3 day_05_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">crates</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="n">scan</span> <span class="o">:=</span> <span class="nb">input</span><span class="p">():</span>
<span class="n">row</span> <span class="o">=</span> <span class="p">[</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">scan</span><span class="p">)</span> <span class="k">if</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">4</span> <span class="o">==</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">crates</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
<span class="n">stacks</span> <span class="o">=</span> <span class="p">{</span><span class="n">i</span><span class="p">:</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">crates</span><span class="o">.</span><span class="n">pop</span><span class="p">()}</span>
<span class="n">crates</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">crates</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">row</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">j</span><span class="o">.</span><span class="n">isspace</span><span class="p">():</span>
<span class="n">stacks</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
<span class="k">with</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span> <span class="k">as</span> <span class="n">pipe</span><span class="p">:</span>
<span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">pipe</span><span class="p">:</span>
<span class="n">_</span><span class="p">,</span> <span class="n">qty</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">from_stack</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">to_stack</span> <span class="o">=</span> <span class="n">step</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</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="nb">int</span><span class="p">(</span><span class="n">qty</span><span class="p">)):</span>
<span class="n">crate</span> <span class="o">=</span> <span class="n">stacks</span><span class="p">[</span><span class="n">from_stack</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="n">stacks</span><span class="p">[</span><span class="n">to_stack</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">crate</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">stacks</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">stacks</span><span class="p">]))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_05_02.py """</span>
<span class="c1"># usage: python3 day_05_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">crates</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">while</span> <span class="n">scan</span> <span class="o">:=</span> <span class="nb">input</span><span class="p">():</span>
<span class="n">row</span> <span class="o">=</span> <span class="p">[</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">scan</span><span class="p">)</span> <span class="k">if</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">4</span> <span class="o">==</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">crates</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">row</span><span class="p">)</span>
<span class="n">stacks</span> <span class="o">=</span> <span class="p">{</span><span class="n">i</span><span class="p">:</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">crates</span><span class="o">.</span><span class="n">pop</span><span class="p">()}</span>
<span class="n">crates</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">crates</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">row</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">j</span><span class="o">.</span><span class="n">isspace</span><span class="p">():</span>
<span class="n">stacks</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
<span class="k">with</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span> <span class="k">as</span> <span class="n">pipe</span><span class="p">:</span>
<span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">pipe</span><span class="p">:</span>
<span class="n">_</span><span class="p">,</span> <span class="n">qty</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">from_stack</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">to_stack</span> <span class="o">=</span> <span class="n">step</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">move</span> <span class="o">=</span> <span class="p">[</span><span class="n">stacks</span><span class="p">[</span><span class="n">from_stack</span><span class="p">]</span><span class="o">.</span><span class="n">pop</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="nb">int</span><span class="p">(</span><span class="n">qty</span><span class="p">))]</span>
<span class="n">move</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span>
<span class="n">stacks</span><span class="p">[</span><span class="n">to_stack</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">move</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">stacks</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">stacks</span><span class="p">]))</span>
</code></pre></div>Day 4 - Advent of Code 20222022-12-05T09:45:00+10:002022-12-05T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-05:/day-4-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 4 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/04/">solutions</a> for the day 4 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_04_01.py """</span>
<span class="c1"># usage: python3 day_04_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">expand</span><span class="p">(</span><span class="n">sections</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate set of sections from compact form """</span>
<span class="n">begin</span><span class="p">,</span> <span class="n">end</span> <span class="o">=</span> <span class="n">sections</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'-'</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">set</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">begin</span><span class="p">),</span> <span class="nb">int</span><span class="p">(</span><span class="n">end</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">subset</span><span class="p">(</span><span class="n">pair</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate if one of the pair is a subset of the other """</span>
<span class="n">one</span><span class="p">,</span> <span class="n">two</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">expand</span><span class="p">,</span> <span class="n">pair</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)))</span>
<span class="k">return</span> <span class="n">one</span> <span class="o"><=</span> <span class="n">two</span> <span class="ow">or</span> <span class="n">two</span> <span class="o"><=</span> <span class="n">one</span>
<span class="k">with</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span> <span class="k">as</span> <span class="n">pipe</span><span class="p">:</span>
<span class="n">subsets</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">pipe</span> <span class="k">if</span> <span class="n">subset</span><span class="p">(</span><span class="n">line</span><span class="p">)]</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">subsets</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_04_02.py """</span>
<span class="c1"># usage: python3 day_04_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">expand</span><span class="p">(</span><span class="n">sections</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate set of sections from compact form """</span>
<span class="n">begin</span><span class="p">,</span> <span class="n">end</span> <span class="o">=</span> <span class="n">sections</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'-'</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">set</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">begin</span><span class="p">),</span> <span class="nb">int</span><span class="p">(</span><span class="n">end</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">overlap</span><span class="p">(</span><span class="n">pair</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate if the pair overlap """</span>
<span class="n">one</span><span class="p">,</span> <span class="n">two</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">expand</span><span class="p">,</span> <span class="n">pair</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">)))</span>
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">one</span> <span class="o">&</span> <span class="n">two</span><span class="p">)</span>
<span class="k">with</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span> <span class="k">as</span> <span class="n">pipe</span><span class="p">:</span>
<span class="n">overlaps</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">pipe</span> <span class="k">if</span> <span class="n">overlap</span><span class="p">(</span><span class="n">line</span><span class="p">)]</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">overlaps</span><span class="p">))</span>
</code></pre></div>Day 3 - Advent of Code 20222022-12-04T09:45:00+10:002022-12-04T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-04:/day-3-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 3 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/03/">solutions</a> for the day 3 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_03_01.py """</span>
<span class="c1"># usage: python3 day_03_01.py < input</span>
<span class="kn">import</span> <span class="nn">string</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">priority</span><span class="p">(</span><span class="n">item</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate priority of item type """</span>
<span class="k">if</span> <span class="n">item</span><span class="o">.</span><span class="n">islower</span><span class="p">():</span>
<span class="k">return</span> <span class="n">string</span><span class="o">.</span><span class="n">ascii_lowercase</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">string</span><span class="o">.</span><span class="n">ascii_uppercase</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="o">+</span> <span class="mi">27</span>
<span class="n">priority_total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">with</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span> <span class="k">as</span> <span class="n">pipe</span><span class="p">:</span>
<span class="k">for</span> <span class="n">items</span> <span class="ow">in</span> <span class="n">pipe</span><span class="p">:</span>
<span class="n">partition</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">items</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
<span class="n">common_item</span> <span class="o">=</span> <span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">items</span><span class="p">[:</span><span class="n">partition</span><span class="p">])</span> <span class="o">&</span> <span class="nb">set</span><span class="p">(</span><span class="n">items</span><span class="p">[</span><span class="n">partition</span><span class="p">:]))</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="n">priority_total</span> <span class="o">+=</span> <span class="n">priority</span><span class="p">(</span><span class="n">common_item</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">priority_total</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_03_02.py """</span>
<span class="c1"># usage: python3 day_03_02.py < input</span>
<span class="kn">import</span> <span class="nn">string</span>
<span class="k">def</span> <span class="nf">priority</span><span class="p">(</span><span class="n">item</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate priority of item type """</span>
<span class="k">if</span> <span class="n">item</span><span class="o">.</span><span class="n">islower</span><span class="p">():</span>
<span class="k">return</span> <span class="n">string</span><span class="o">.</span><span class="n">ascii_lowercase</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">string</span><span class="o">.</span><span class="n">ascii_uppercase</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="o">+</span> <span class="mi">27</span>
<span class="n">priority_total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">common_item</span> <span class="o">=</span> <span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="nb">input</span><span class="p">())</span> <span class="o">&</span> <span class="nb">set</span><span class="p">(</span><span class="nb">input</span><span class="p">())</span> <span class="o">&</span> <span class="nb">set</span><span class="p">(</span><span class="nb">input</span><span class="p">()))</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">priority_total</span> <span class="o">+=</span> <span class="n">priority</span><span class="p">(</span><span class="n">common_item</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">priority_total</span><span class="p">)</span>
</code></pre></div>Day 2 - Advent of Code 20222022-12-03T09:45:00+10:002022-12-03T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-03:/day-2-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 2 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/02/">solutions</a> for the day 2 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_02_01.py """</span>
<span class="c1"># usage: python3 day_02_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">score</span><span class="p">(</span><span class="n">play</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate score for play """</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'A'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'B'</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">:</span> <span class="mi">3</span><span class="p">}</span>
<span class="n">cipher</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'X'</span><span class="p">:</span> <span class="s1">'A'</span><span class="p">,</span> <span class="s1">'Y'</span><span class="p">:</span> <span class="s1">'B'</span><span class="p">,</span> <span class="s1">'Z'</span><span class="p">:</span> <span class="s1">'C'</span><span class="p">}</span>
<span class="n">wins</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'A'</span><span class="p">:</span> <span class="s1">'C'</span><span class="p">,</span> <span class="s1">'B'</span><span class="p">:</span> <span class="s1">'A'</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">:</span> <span class="s1">'B'</span><span class="p">}</span>
<span class="n">opponent</span><span class="p">,</span> <span class="n">player</span> <span class="o">=</span> <span class="n">play</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">value</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="n">cipher</span><span class="p">[</span><span class="n">player</span><span class="p">]</span> <span class="o">==</span> <span class="n">opponent</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="mi">3</span>
<span class="k">elif</span> <span class="n">wins</span><span class="p">[</span><span class="n">cipher</span><span class="p">[</span><span class="n">player</span><span class="p">]]</span> <span class="o">==</span> <span class="n">opponent</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="mi">6</span>
<span class="k">return</span> <span class="n">value</span> <span class="o">+</span> <span class="n">points</span><span class="p">[</span><span class="n">cipher</span><span class="p">[</span><span class="n">player</span><span class="p">]]</span>
<span class="n">total_score</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">game_play</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">total_score</span> <span class="o">+=</span> <span class="n">score</span><span class="p">(</span><span class="n">game_play</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">total_score</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_02_02.py """</span>
<span class="c1"># usage: python3 day_02_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">score</span><span class="p">(</span><span class="n">play</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate score for play """</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'A'</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">'B'</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">:</span> <span class="mi">3</span><span class="p">}</span>
<span class="n">wins</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'A'</span><span class="p">:</span> <span class="s1">'C'</span><span class="p">,</span> <span class="s1">'B'</span><span class="p">:</span> <span class="s1">'A'</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">:</span> <span class="s1">'B'</span><span class="p">}</span>
<span class="n">opponent</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">player</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">play</span><span class="p">)</span>
<span class="n">value</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="n">player</span> <span class="o">==</span> <span class="n">opponent</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="mi">3</span>
<span class="k">elif</span> <span class="n">wins</span><span class="p">[</span><span class="n">player</span><span class="p">]</span> <span class="o">==</span> <span class="n">opponent</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="mi">6</span>
<span class="k">return</span> <span class="n">value</span> <span class="o">+</span> <span class="n">points</span><span class="p">[</span><span class="n">player</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">move</span><span class="p">(</span><span class="n">strategy</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate move from strategy """</span>
<span class="n">wins</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'A'</span><span class="p">:</span> <span class="s1">'C'</span><span class="p">,</span> <span class="s1">'B'</span><span class="p">:</span> <span class="s1">'A'</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">:</span> <span class="s1">'B'</span><span class="p">}</span>
<span class="n">loses</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'A'</span><span class="p">:</span> <span class="s1">'B'</span><span class="p">,</span> <span class="s1">'B'</span><span class="p">:</span> <span class="s1">'C'</span><span class="p">,</span> <span class="s1">'C'</span><span class="p">:</span> <span class="s1">'A'</span><span class="p">}</span>
<span class="n">opponent</span><span class="p">,</span> <span class="n">plan</span> <span class="o">=</span> <span class="n">strategy</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="k">if</span> <span class="n">plan</span> <span class="o">==</span> <span class="s1">'X'</span><span class="p">:</span>
<span class="n">play</span> <span class="o">=</span> <span class="n">wins</span><span class="p">[</span><span class="n">opponent</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">plan</span> <span class="o">==</span> <span class="s1">'Y'</span><span class="p">:</span>
<span class="n">play</span> <span class="o">=</span> <span class="n">opponent</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">play</span> <span class="o">=</span> <span class="n">loses</span><span class="p">[</span><span class="n">opponent</span><span class="p">]</span>
<span class="k">return</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">opponent</span><span class="si">}</span><span class="s1"> </span><span class="si">{</span><span class="n">play</span><span class="si">}</span><span class="s1">'</span>
<span class="n">total_score</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">game_strategy</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span>
<span class="n">game_play</span> <span class="o">=</span> <span class="n">move</span><span class="p">(</span><span class="n">game_strategy</span><span class="p">)</span>
<span class="n">total_score</span> <span class="o">+=</span> <span class="n">score</span><span class="p">(</span><span class="n">game_play</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">total_score</span><span class="p">)</span>
</code></pre></div>Day 1 - Advent of Code 20222022-12-02T09:45:00+10:002022-12-02T09:45:00+10:00Mark Westetag:www.styleincode.fun,2022-12-02:/day-1-advent-of-code-2022.html<p>Working solutions for the Advent of Code 2022 day 1 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2022/01/">solutions</a> for the day 1 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_01_01.py """</span>
<span class="c1"># usage: python3 day_01_01.py < input</span>
<span class="n">most</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">while</span> <span class="n">line</span> <span class="o">:=</span> <span class="nb">input</span><span class="p">():</span>
<span class="n">total</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">most</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">most</span><span class="p">,</span> <span class="n">total</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">most</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_01_02.py """</span>
<span class="c1"># usage: python3 day_01_02.py < input</span>
<span class="k">def</span> <span class="nf">max3</span><span class="p">(</span><span class="n">value_list</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate three highest values """</span>
<span class="n">values</span> <span class="o">=</span> <span class="n">value_list</span><span class="p">[:]</span> <span class="o">+</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span>
<span class="n">values</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">return</span> <span class="n">values</span><span class="p">[:</span><span class="mi">3</span><span class="p">]</span>
<span class="n">most</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">total</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">while</span> <span class="n">line</span> <span class="o">:=</span> <span class="nb">input</span><span class="p">():</span>
<span class="n">total</span> <span class="o">+=</span> <span class="nb">int</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">most</span> <span class="o">=</span> <span class="n">max3</span><span class="p">(</span><span class="n">most</span><span class="p">,</span> <span class="n">total</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">most</span><span class="p">))</span>
</code></pre></div>Day 10 - Advent of Code 20152015-12-11T09:45:00+10:002015-12-11T09:45:00+10:00Mark Westetag:www.styleincode.fun,2015-12-11:/day-10-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 10 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/10/">solutions</a> for the day 10 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_10_01.py """</span>
<span class="c1"># usage: python3 day_10_01.py < input</span>
<span class="k">def</span> <span class="nf">rle</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" encode using run length model """</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">current</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">term</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
<span class="k">if</span> <span class="n">term</span> <span class="o">==</span> <span class="n">current</span><span class="p">:</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">count</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">current</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span>
<span class="n">current</span> <span class="o">=</span> <span class="n">term</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">count</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">current</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span>
<span class="k">return</span> <span class="n">output</span>
<span class="k">def</span> <span class="nf">rle_to_text</span><span class="p">(</span><span class="n">rle_obj</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" generate text from run length encoding """</span>
<span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">frequency</span><span class="p">)</span> <span class="o">+</span> <span class="n">symbol</span> <span class="k">for</span> <span class="n">symbol</span><span class="p">,</span> <span class="n">frequency</span> <span class="ow">in</span> <span class="n">rle_obj</span><span class="p">])</span>
<span class="n">sequence</span> <span class="o">=</span> <span class="nb">input</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">40</span><span class="p">):</span>
<span class="n">encoding</span> <span class="o">=</span> <span class="n">rle</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span>
<span class="n">sequence</span> <span class="o">=</span> <span class="n">rle_to_text</span><span class="p">(</span><span class="n">encoding</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">sequence</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_10_02.py """</span>
<span class="c1"># usage: python3 day_10_02.py < input</span>
<span class="k">def</span> <span class="nf">rle</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" encode using run length model """</span>
<span class="n">output</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">current</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">term</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
<span class="k">if</span> <span class="n">term</span> <span class="o">==</span> <span class="n">current</span><span class="p">:</span>
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">count</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">current</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span>
<span class="n">current</span> <span class="o">=</span> <span class="n">term</span>
<span class="n">count</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">count</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="n">output</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">current</span><span class="p">,</span> <span class="n">count</span><span class="p">))</span>
<span class="k">return</span> <span class="n">output</span>
<span class="k">def</span> <span class="nf">rle_to_text</span><span class="p">(</span><span class="n">rle_obj</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" generate text from run length encoding """</span>
<span class="k">return</span> <span class="s1">''</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">frequency</span><span class="p">)</span> <span class="o">+</span> <span class="n">symbol</span> <span class="k">for</span> <span class="n">symbol</span><span class="p">,</span> <span class="n">frequency</span> <span class="ow">in</span> <span class="n">rle_obj</span><span class="p">])</span>
<span class="n">sequence</span> <span class="o">=</span> <span class="nb">input</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">50</span><span class="p">):</span>
<span class="n">encoding</span> <span class="o">=</span> <span class="n">rle</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span>
<span class="n">sequence</span> <span class="o">=</span> <span class="n">rle_to_text</span><span class="p">(</span><span class="n">encoding</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">sequence</span><span class="p">))</span>
</code></pre></div>Day 8 - Advent of Code 20152015-12-09T09:45:00+10:002015-12-09T09:45:00+10:00Mark Westetag:www.styleincode.fun,2015-12-09:/day-8-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 8 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/08/">solutions</a> for the day 8 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_08_01.py """</span>
<span class="c1"># usage: python3 day_08_01.py < input</span>
<span class="n">length_decrease</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">code</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">length_decrease</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">code</span><span class="p">)</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="nb">eval</span><span class="p">(</span><span class="n">code</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="n">length_decrease</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_08_02.py """</span>
<span class="c1"># usage: python3 day_08_02.py < input</span>
<span class="n">length_increase</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">code</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">EOFError</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">length_increase</span> <span class="o">+=</span> <span class="mi">2</span> <span class="o">+</span> <span class="n">code</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'"'</span><span class="p">)</span> <span class="o">+</span> <span class="n">code</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">'</span><span class="se">\\</span><span class="s1">'</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">length_increase</span><span class="p">)</span>
</code></pre></div>Day 7 - Advent of Code 20152015-12-08T09:45:00+10:002015-12-08T09:45:00+10:00Mark Westetag:www.styleincode.fun,2015-12-08:/day-7-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 7 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/07/">solutions</a> for the day 7 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_07_01.py """</span>
<span class="c1"># usage: python3 day_07_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" parse into python """</span>
<span class="n">ref</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'AND'</span><span class="p">:</span> <span class="s1">'&'</span><span class="p">,</span> <span class="s1">'OR'</span><span class="p">:</span> <span class="s1">'|'</span><span class="p">,</span> <span class="s1">'LSHIFT'</span><span class="p">:</span> <span class="s1">'<<'</span><span class="p">,</span> <span class="s1">'RSHIFT'</span><span class="p">:</span> <span class="s1">'>>'</span><span class="p">}</span>
<span class="n">code</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
<span class="n">expr</span><span class="p">,</span> <span class="n">symbol</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' -> '</span><span class="p">)</span>
<span class="n">tokens</span> <span class="o">=</span> <span class="n">expr</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span>
<span class="k">if</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">line</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s1">'</span>
<span class="k">elif</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">line</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">tokens</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s1"> ^ 65535'</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">line</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s1"> </span><span class="si">{</span><span class="n">ref</span><span class="p">[</span><span class="n">tokens</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span><span class="si">}</span><span class="s1"> </span><span class="si">{</span><span class="n">tokens</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="si">}</span><span class="s1">'</span>
<span class="k">for</span> <span class="n">reserved</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'as'</span><span class="p">,</span> <span class="s1">'if'</span><span class="p">,</span> <span class="s1">'in'</span><span class="p">,</span> <span class="s1">'is'</span><span class="p">]:</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="n">symbol</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">reserved</span><span class="p">,</span> <span class="s1">'_'</span> <span class="o">+</span> <span class="n">reserved</span><span class="p">)</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">reserved</span><span class="p">,</span> <span class="s1">'_'</span> <span class="o">+</span> <span class="n">reserved</span><span class="p">)</span>
<span class="n">code</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">symbol</span><span class="p">,</span> <span class="n">line</span><span class="p">))</span>
<span class="k">return</span> <span class="n">code</span>
<span class="n">instructions</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">local</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">while</span> <span class="n">instructions</span><span class="p">:</span>
<span class="n">variable</span><span class="p">,</span> <span class="n">expression</span> <span class="o">=</span> <span class="n">instructions</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">local</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
<span class="n">instructions</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">variable</span><span class="p">,</span> <span class="n">expression</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">local</span><span class="p">[</span><span class="n">variable</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
<span class="nb">print</span><span class="p">(</span><span class="n">local</span><span class="p">[</span><span class="s1">'a'</span><span class="p">])</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_07_02.py """</span>
<span class="c1"># usage: python3 day_07_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" parse into python """</span>
<span class="n">ref</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'AND'</span><span class="p">:</span> <span class="s1">'&'</span><span class="p">,</span> <span class="s1">'OR'</span><span class="p">:</span> <span class="s1">'|'</span><span class="p">,</span> <span class="s1">'LSHIFT'</span><span class="p">:</span> <span class="s1">'<<'</span><span class="p">,</span> <span class="s1">'RSHIFT'</span><span class="p">:</span> <span class="s1">'>>'</span><span class="p">}</span>
<span class="n">code</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
<span class="n">expr</span><span class="p">,</span> <span class="n">symbol</span> <span class="o">=</span> <span class="n">row</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">' -> '</span><span class="p">)</span>
<span class="n">tokens</span> <span class="o">=</span> <span class="n">expr</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span>
<span class="k">if</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">line</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s1">'</span>
<span class="k">elif</span> <span class="n">count</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">line</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">tokens</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s1"> ^ 65535'</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">line</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s1"> </span><span class="si">{</span><span class="n">ref</span><span class="p">[</span><span class="n">tokens</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span><span class="si">}</span><span class="s1"> </span><span class="si">{</span><span class="n">tokens</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="si">}</span><span class="s1">'</span>
<span class="k">for</span> <span class="n">reserved</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'as'</span><span class="p">,</span> <span class="s1">'if'</span><span class="p">,</span> <span class="s1">'in'</span><span class="p">,</span> <span class="s1">'is'</span><span class="p">]:</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="n">symbol</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">reserved</span><span class="p">,</span> <span class="s1">'_'</span> <span class="o">+</span> <span class="n">reserved</span><span class="p">)</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">reserved</span><span class="p">,</span> <span class="s1">'_'</span> <span class="o">+</span> <span class="n">reserved</span><span class="p">)</span>
<span class="n">code</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">symbol</span><span class="p">,</span> <span class="n">line</span><span class="p">))</span>
<span class="k">return</span> <span class="n">code</span>
<span class="k">def</span> <span class="nf">process</span><span class="p">(</span><span class="n">instructions</span><span class="p">,</span> <span class="n">override</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" evaluate instructions """</span>
<span class="n">commands</span> <span class="o">=</span> <span class="n">instructions</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="k">if</span> <span class="n">override</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">override</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">local</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">while</span> <span class="n">commands</span><span class="p">:</span>
<span class="n">variable</span><span class="p">,</span> <span class="n">expression</span> <span class="o">=</span> <span class="n">commands</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">if</span> <span class="n">variable</span> <span class="ow">in</span> <span class="n">override</span><span class="p">:</span>
<span class="n">expression</span> <span class="o">=</span> <span class="n">override</span><span class="p">[</span><span class="n">variable</span><span class="p">]</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">eval</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">local</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">NameError</span><span class="p">:</span>
<span class="n">commands</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">variable</span><span class="p">,</span> <span class="n">expression</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">local</span><span class="p">[</span><span class="n">variable</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
<span class="k">return</span> <span class="n">local</span>
<span class="n">script</span> <span class="o">=</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">())</span>
<span class="n">ans</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">process</span><span class="p">(</span><span class="n">script</span><span class="p">)[</span><span class="s1">'a'</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">process</span><span class="p">(</span><span class="n">script</span><span class="p">,</span> <span class="p">{</span><span class="s1">'b'</span><span class="p">:</span> <span class="n">ans</span><span class="p">})[</span><span class="s1">'a'</span><span class="p">])</span>
</code></pre></div>Day 6 - Advent of Code 20152015-12-07T09:45:00+10:002015-12-07T09:45:00+10:00Mark Westetag:www.styleincode.fun,2015-12-07:/day-6-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 6 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/06/">solutions</a> for the day 6 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_06_01.py """</span>
<span class="c1"># usage: python3 day_06_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" generate instructions """</span>
<span class="k">def</span> <span class="nf">convert</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" convert text "x,y" to integer tuple (x, y) """</span>
<span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">rectangle</span><span class="p">(</span><span class="n">topleft</span><span class="p">,</span> <span class="n">bottomright</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate points of rectangle """</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="n">convert</span><span class="p">(</span><span class="n">topleft</span><span class="p">)</span>
<span class="n">x2</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="n">convert</span><span class="p">(</span><span class="n">bottomright</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">set</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">y1</span><span class="p">,</span> <span class="n">y2</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="nb">range</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">x2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">prepare</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" prepare for processing """</span>
<span class="n">command</span><span class="p">,</span> <span class="n">top_left</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">bottom_right</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'turn '</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">items</span> <span class="o">=</span> <span class="n">rectangle</span><span class="p">(</span><span class="n">top_left</span><span class="p">,</span> <span class="n">bottom_right</span><span class="p">)</span>
<span class="k">return</span> <span class="n">command</span><span class="p">,</span> <span class="n">items</span>
<span class="k">return</span> <span class="p">(</span><span class="n">prepare</span><span class="p">(</span><span class="n">instruction</span><span class="p">)</span> <span class="k">for</span> <span class="n">instruction</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">())</span>
<span class="n">display</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">lights</span> <span class="ow">in</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()):</span>
<span class="k">if</span> <span class="n">action</span> <span class="o">==</span> <span class="s1">'on'</span><span class="p">:</span>
<span class="n">display</span> <span class="o">=</span> <span class="n">display</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">lights</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">action</span> <span class="o">==</span> <span class="s1">'off'</span><span class="p">:</span>
<span class="n">display</span> <span class="o">=</span> <span class="n">display</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">lights</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">action</span> <span class="o">==</span> <span class="s1">'toggle'</span><span class="p">:</span>
<span class="n">display</span> <span class="o">=</span> <span class="n">display</span><span class="o">.</span><span class="n">symmetric_difference</span><span class="p">(</span><span class="n">lights</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">display</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_06_02.py """</span>
<span class="c1"># usage: python3 day_06_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="n">data</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" generate instructions """</span>
<span class="k">def</span> <span class="nf">convert</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" convert text "x,y" to integer tuple (x, y) """</span>
<span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">text</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">','</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">rectangle</span><span class="p">(</span><span class="n">topleft</span><span class="p">,</span> <span class="n">bottomright</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" calculate points of rectangle """</span>
<span class="n">x1</span><span class="p">,</span> <span class="n">y1</span> <span class="o">=</span> <span class="n">convert</span><span class="p">(</span><span class="n">topleft</span><span class="p">)</span>
<span class="n">x2</span><span class="p">,</span> <span class="n">y2</span> <span class="o">=</span> <span class="n">convert</span><span class="p">(</span><span class="n">bottomright</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">set</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">y1</span><span class="p">,</span> <span class="n">y2</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="nb">range</span><span class="p">(</span><span class="n">x1</span><span class="p">,</span> <span class="n">x2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">prepare</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" prepare for processing """</span>
<span class="n">command</span><span class="p">,</span> <span class="n">top_left</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">bottom_right</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">'turn '</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="n">items</span> <span class="o">=</span> <span class="n">rectangle</span><span class="p">(</span><span class="n">top_left</span><span class="p">,</span> <span class="n">bottom_right</span><span class="p">)</span>
<span class="k">return</span> <span class="n">command</span><span class="p">,</span> <span class="n">items</span>
<span class="k">return</span> <span class="p">(</span><span class="n">prepare</span><span class="p">(</span><span class="n">instruction</span><span class="p">)</span> <span class="k">for</span> <span class="n">instruction</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">())</span>
<span class="n">display</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">action</span><span class="p">,</span> <span class="n">lights</span> <span class="ow">in</span> <span class="n">parse</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()):</span>
<span class="k">if</span> <span class="n">action</span> <span class="o">==</span> <span class="s1">'on'</span><span class="p">:</span>
<span class="k">for</span> <span class="n">light</span> <span class="ow">in</span> <span class="n">lights</span><span class="p">:</span>
<span class="n">display</span><span class="p">[</span><span class="n">light</span><span class="p">]</span> <span class="o">=</span> <span class="n">display</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">light</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="k">elif</span> <span class="n">action</span> <span class="o">==</span> <span class="s1">'off'</span><span class="p">:</span>
<span class="k">for</span> <span class="n">light</span> <span class="ow">in</span> <span class="n">lights</span><span class="p">:</span>
<span class="n">display</span><span class="p">[</span><span class="n">light</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">display</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">light</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>
<span class="k">elif</span> <span class="n">action</span> <span class="o">==</span> <span class="s1">'toggle'</span><span class="p">:</span>
<span class="k">for</span> <span class="n">light</span> <span class="ow">in</span> <span class="n">lights</span><span class="p">:</span>
<span class="n">display</span><span class="p">[</span><span class="n">light</span><span class="p">]</span> <span class="o">=</span> <span class="n">display</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">light</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">2</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">sum</span><span class="p">(</span><span class="n">display</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
</code></pre></div>Day 5 - Advent of Code 20152015-12-06T09:45:00+10:002015-12-06T09:45:00+10:00Mark Westetag:www.styleincode.fun,2015-12-06:/day-5-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 5 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/05/">solutions</a> for the day 5 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_05_01.py """</span>
<span class="c1"># usage: python3 day_05_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">not_banned</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" does not contain """</span>
<span class="k">for</span> <span class="n">pair</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'ab'</span><span class="p">,</span> <span class="s1">'cd'</span><span class="p">,</span> <span class="s1">'pq'</span><span class="p">,</span> <span class="s1">'xy'</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">pair</span> <span class="ow">in</span> <span class="n">text</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">def</span> <span class="nf">vowels3</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" contains three vowels """</span>
<span class="n">vowels</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="s1">'aeiou'</span><span class="p">)</span>
<span class="n">tally</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">vowels</span><span class="p">:</span>
<span class="n">tally</span> <span class="o">+=</span> <span class="n">text</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">if</span> <span class="n">tally</span> <span class="o">></span> <span class="mi">2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">double_letter</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" contains an adjacent repeated character """</span>
<span class="n">textlist</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
<span class="n">letter1</span> <span class="o">=</span> <span class="n">textlist</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="k">while</span> <span class="n">textlist</span><span class="p">:</span>
<span class="n">letter2</span> <span class="o">=</span> <span class="n">textlist</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
<span class="k">if</span> <span class="n">letter1</span> <span class="o">==</span> <span class="n">letter2</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="n">letter1</span> <span class="o">=</span> <span class="n">letter2</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">string</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
<span class="k">if</span> <span class="n">not_banned</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> <span class="ow">and</span> <span class="n">vowels3</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> <span class="ow">and</span> <span class="n">double_letter</span><span class="p">(</span><span class="n">string</span><span class="p">):</span>
<span class="n">counter</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">counter</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_05_02.py """</span>
<span class="c1"># usage: python3 day_05_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="k">def</span> <span class="nf">pair_twice_or_more</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" pair occurs two or more times """</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">text</span><span class="p">[:</span><span class="o">-</span><span class="mi">3</span><span class="p">]):</span>
<span class="k">if</span> <span class="n">text</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">text</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">],</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">repeat_1_apart</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" letter repeats with another between """</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">letter</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">text</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">]):</span>
<span class="k">if</span> <span class="n">letter</span> <span class="o">==</span> <span class="n">text</span><span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">]:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">string</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
<span class="k">if</span> <span class="n">pair_twice_or_more</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> <span class="ow">and</span> <span class="n">repeat_1_apart</span><span class="p">(</span><span class="n">string</span><span class="p">):</span>
<span class="n">counter</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">counter</span><span class="p">)</span>
</code></pre></div>Day 4 - Advent of Code 20152015-12-05T09:45:00+10:002015-12-05T09:45:00+10:00Mark Westetag:www.styleincode.fun,2015-12-05:/day-4-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 4 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/04/">solutions</a> for the day 4 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_04_01.py """</span>
<span class="c1"># usage: python3 day_04_01.py < input</span>
<span class="kn">from</span> <span class="nn">hashlib</span> <span class="kn">import</span> <span class="n">md5</span>
<span class="n">key</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="n">output</span> <span class="o">=</span> <span class="s1">''</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">output</span><span class="p">[:</span><span class="mi">5</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">'00000'</span><span class="p">:</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">md5</span><span class="p">()</span>
<span class="n">value</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">),</span> <span class="s1">'utf-8'</span><span class="p">))</span>
<span class="n">output</span> <span class="o">=</span> <span class="n">value</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_04_02.py """</span>
<span class="c1"># usage: python3 day_04_02.py < input</span>
<span class="kn">from</span> <span class="nn">hashlib</span> <span class="kn">import</span> <span class="n">md5</span>
<span class="kn">from</span> <span class="nn">multiprocessing</span> <span class="kn">import</span> <span class="n">Pool</span>
<span class="k">def</span> <span class="nf">md5sum</span><span class="p">(</span><span class="n">number</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" does md5sum have size leading zeroes """</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">md5</span><span class="p">()</span>
<span class="n">value</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">number</span><span class="p">),</span> <span class="s1">'utf-8'</span><span class="p">))</span>
<span class="k">return</span> <span class="n">value</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()[:</span><span class="n">size</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'0'</span> <span class="o">*</span> <span class="n">size</span>
<span class="k">def</span> <span class="nf">md5sum_6</span><span class="p">(</span><span class="n">number</span><span class="p">):</span>
<span class="w"> </span><span class="sd">""" does md5sum have six leading zeroes """</span>
<span class="k">return</span> <span class="n">md5sum</span><span class="p">(</span><span class="n">number</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
<span class="n">key</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span>
<span class="n">step</span> <span class="o">=</span> <span class="mi">1000000</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">with</span> <span class="n">Pool</span><span class="p">()</span> <span class="k">as</span> <span class="n">p</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">md5sum_6</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span> <span class="o">+</span> <span class="n">j</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">step</span><span class="p">)]))</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">index</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="n">i</span> <span class="o">+=</span> <span class="n">step</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="n">index</span><span class="p">)</span>
<span class="k">break</span>
</code></pre></div>Day 3 - Advent of Code 20152015-12-04T09:45:00+10:002015-12-04T09:45:00+10:00Mark Westetag:www.styleincode.fun,2015-12-04:/day-3-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 3 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/03/">solutions</a> for the day 3 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_03_01.py """</span>
<span class="c1"># usage: python3 day_03_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">deltas</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'^'</span><span class="p">:</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="s1">'>'</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="s1">'v'</span><span class="p">:</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> <span class="s1">'<'</span><span class="p">:</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="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="n">log</span> <span class="o">=</span> <span class="p">{(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)}</span>
<span class="k">for</span> <span class="n">order</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">():</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">deltas</span><span class="p">[</span><span class="n">order</span><span class="p">]</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">x</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">dy</span>
<span class="n">log</span> <span class="o">=</span> <span class="n">log</span> <span class="o">|</span> <span class="p">{(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)}</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">log</span><span class="p">))</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_03_02.py """</span>
<span class="c1"># usage: python3 day_03_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">deltas</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'^'</span><span class="p">:</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="s1">'>'</span><span class="p">:</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="s1">'v'</span><span class="p">:</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> <span class="s1">'<'</span><span class="p">:</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="n">santa</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="n">robot</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="n">log</span> <span class="o">=</span> <span class="p">{</span><span class="n">santa</span><span class="p">,</span> <span class="n">robot</span><span class="p">}</span>
<span class="n">robot_turn</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">for</span> <span class="n">order</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">():</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">deltas</span><span class="p">[</span><span class="n">order</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">robot_turn</span><span class="p">:</span>
<span class="n">santa</span> <span class="o">=</span> <span class="n">santa</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">santa</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">dy</span>
<span class="n">log</span> <span class="o">=</span> <span class="n">log</span> <span class="o">|</span> <span class="p">{</span><span class="n">santa</span><span class="p">}</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">robot</span> <span class="o">=</span> <span class="n">robot</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="n">dx</span><span class="p">,</span> <span class="n">robot</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">dy</span>
<span class="n">log</span> <span class="o">=</span> <span class="n">log</span> <span class="o">|</span> <span class="p">{</span><span class="n">robot</span><span class="p">}</span>
<span class="n">robot_turn</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">robot_turn</span>
<span class="nb">print</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">log</span><span class="p">))</span>
</code></pre></div>Day 2 - Advent of Code 20152015-12-03T09:45:00+10:002015-12-03T09:45:00+10:00Mark Westetag:www.styleincode.fun,2015-12-03:/day-2-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 2 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/02/">solutions</a> for the day 2 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_02_01.py """</span>
<span class="c1"># usage: python3 day_02_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">paper</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">box</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</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">box</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)))</span>
<span class="n">paper</span> <span class="o">+=</span> <span class="mi">2</span> <span class="o">*</span> <span class="p">(</span><span class="n">x</span> <span class="o">*</span> <span class="n">y</span> <span class="o">+</span> <span class="n">x</span> <span class="o">*</span> <span class="n">z</span> <span class="o">+</span> <span class="n">y</span> <span class="o">*</span> <span class="n">z</span><span class="p">)</span>
<span class="n">paper</span> <span class="o">+=</span> <span class="nb">min</span><span class="p">(</span><span class="n">x</span> <span class="o">*</span> <span class="n">y</span><span class="p">,</span> <span class="n">x</span> <span class="o">*</span> <span class="n">z</span><span class="p">,</span> <span class="n">y</span> <span class="o">*</span> <span class="n">z</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">paper</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_02_02.py """</span>
<span class="c1"># usage: python3 day_02_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">ribbon</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">box</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</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">box</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'x'</span><span class="p">)))</span>
<span class="n">ribbon</span> <span class="o">+=</span> <span class="mi">2</span> <span class="o">*</span> <span class="nb">min</span><span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="n">y</span><span class="p">,</span> <span class="n">x</span> <span class="o">+</span> <span class="n">z</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="n">z</span><span class="p">)</span>
<span class="n">ribbon</span> <span class="o">+=</span> <span class="n">x</span> <span class="o">*</span> <span class="n">y</span> <span class="o">*</span> <span class="n">z</span>
<span class="nb">print</span><span class="p">(</span><span class="n">ribbon</span><span class="p">)</span>
</code></pre></div>Day 1 - Advent of Code 20152015-12-02T09:45:00+10:002015-12-02T09:45:00+10:00Mark Westetag:www.styleincode.fun,2015-12-02:/day-1-advent-of-code-2015.html<p>Working solutions for the Advent of Code 2015 day 1 puzzles.</p><p>Working <a href="https://code.styleincode.fun/advent_of_code/2015/01/">solutions</a> for the day 1 puzzles.</p>
<h3>Part One</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_01_01.py """</span>
<span class="c1"># usage: python3 day_01_01.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">floor</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">instruction</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">():</span>
<span class="k">if</span> <span class="n">instruction</span> <span class="o">==</span> <span class="s1">'('</span><span class="p">:</span>
<span class="n">floor</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">instruction</span> <span class="o">==</span> <span class="s1">')'</span><span class="p">:</span>
<span class="n">floor</span> <span class="o">-=</span> <span class="mi">1</span>
<span class="nb">print</span><span class="p">(</span><span class="n">floor</span><span class="p">)</span>
</code></pre></div>
<h3>Part Two</h3>
<div class="highlight"><pre><span></span><code><span class="sd">""" day_01_02.py """</span>
<span class="c1"># usage: python3 day_01_02.py < input</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">index</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">floor</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">instruction</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">()):</span>
<span class="k">if</span> <span class="n">instruction</span> <span class="o">==</span> <span class="s1">'('</span><span class="p">:</span>
<span class="n">floor</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">elif</span> <span class="n">instruction</span> <span class="o">==</span> <span class="s1">')'</span><span class="p">:</span>
<span class="n">floor</span> <span class="o">-=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">floor</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">if</span> <span class="n">index</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
</code></pre></div>