<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Erlang Notes on Dan Stefan Oprean</title>
    <link>https://danoprean.com/notes/erlang/</link>
    <description>Recent content in Erlang Notes on Dan Stefan Oprean</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language><atom:link href="https://danoprean.com/notes/erlang/index.xml" rel="self" type="application/rss+xml" /><item>
      <title>Introduction</title>
      <link>https://danoprean.com/notes/erlang/basic/introduction/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/basic/introduction/</guid>
      <description>&lt;!-- Hello World --&gt;
&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Hello World&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(main).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([hello&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;hello&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    io:&lt;span style=&#34;color:#a6e22e&#34;&gt;format&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, world!&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;~n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Compile and run in the Erlang shell:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;(main).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;main:&lt;span style=&#34;color:#a6e22e&#34;&gt;hello&lt;/span&gt;().
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This defines a tiny Erlang module and a function that prints one line to the shell.&lt;/p&gt;
&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;

&lt;!-- Variables --&gt;
&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Variables&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;p&gt;Variables are single-assignment and start with an uppercase letter.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Dan&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Count &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Active &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; true.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These are single-assignment bindings. Once a variable has a value in Erlang, you do not mutate it in place.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Add</title>
      <link>https://danoprean.com/notes/erlang/challenge/add/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/add/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Add&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(add).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([add&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;add&lt;/span&gt;(Param1, Param2) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Param1 &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; Param2.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This just adds the two input numbers with the language&amp;rsquo;s normal arithmetic and returns the sum.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Add Border</title>
      <link>https://danoprean.com/notes/erlang/challenge/add-border/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/add-border/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Add Border&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(add_border).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([add_border&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;add_border&lt;/span&gt;(Picture) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Width &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(hd(Picture)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Border &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;duplicate&lt;/span&gt;(Width &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;$*&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Bordered &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [[&lt;span style=&#34;color:#e6db74&#34;&gt;$*&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; Row &lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;$*&lt;/span&gt;] || Row &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; Picture],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [Border] &lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; Bordered &lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; [Border].
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This builds a new grid with a &lt;code&gt;*&lt;/code&gt; border around every side. It adds a full top and bottom row, then wraps each existing row from left and right.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Adjacent Elements Product</title>
      <link>https://danoprean.com/notes/erlang/challenge/adjacent-elements-product/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/adjacent-elements-product/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Adjacent Elements Product&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(adjacent_elements_product).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([adjacent_elements_product&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;adjacent_elements_product&lt;/span&gt;(InputArray) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Pairs &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(InputArray, tl(InputArray)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;([X &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; Y || {X, Y} &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; Pairs]).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This walks through neighboring values, multiplies each pair, and keeps the biggest product it finds.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Almost Magic Square</title>
      <link>https://danoprean.com/notes/erlang/challenge/almost-magic-square/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/almost-magic-square/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Almost Magic Square&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(almost_magic_square).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([almost_magic_square&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;almost_magic_square&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Rows &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; chunk3(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    RowSums &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;sum&lt;/span&gt;(R) || R &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; Rows],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ColSums &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;sum&lt;/span&gt;([lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth&lt;/span&gt;(C, R) || R &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; Rows]) || C &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    MaxSum &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;(RowSums &lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; ColSums),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    FinalRows &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; balance(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, RowSums, ColSums, Rows, MaxSum),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt;(FinalRows).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;chunk3&lt;/span&gt;([]) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; [];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;chunk3&lt;/span&gt;(List) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {Row, Rest} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, List),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [Row | chunk3(Rest)].
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;balance&lt;/span&gt;(I, J, RowSums, ColSums, Rows, MaxSum) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, J &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    RowSumI &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth&lt;/span&gt;(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, RowSums),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ColSumJ &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth&lt;/span&gt;(J &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, ColSums),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Diff &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; min(MaxSum &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; RowSumI, MaxSum &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; ColSumJ),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Rows1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; add_at(Rows, I, J, Diff),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    RowSums1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; add_at_list(RowSums, I, Diff),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ColSums1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; add_at_list(ColSums, J, Diff),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    NextI &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth&lt;/span&gt;(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, RowSums1) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; MaxSum &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;; _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; I &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    NextJ &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth&lt;/span&gt;(J &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, ColSums1) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; MaxSum &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; J &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;; _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; J &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    balance(NextI, NextJ, RowSums1, ColSums1, Rows1, MaxSum);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;balance&lt;/span&gt;(_, _, _, _, Rows, _) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Rows.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;add_at&lt;/span&gt;(Rows, I, J, Diff) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Idx &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         I &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; [&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Jdx &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; J &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; V &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; Diff; _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; V &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               || {Jdx, V} &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, length(Row) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), Row)];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Row
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt; || {Idx, Row} &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, length(Rows) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), Rows)].
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;add_at_list&lt;/span&gt;(List, Idx0, Diff) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; I &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; Idx0 &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; V &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; Diff; _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; V &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     || {I, V} &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, length(List) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), List)].
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This adjusts the matrix toward a matching target sum so the rows and columns line up more like a magic square.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Are Equally Strong</title>
      <link>https://danoprean.com/notes/erlang/challenge/are-equally-strong/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/are-equally-strong/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Are Equally Strong&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(are_equally_strong).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([are_equally_strong&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;are_equally_strong&lt;/span&gt;(YourLeft, YourRight, FriendsLeft, FriendsRight) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    max(YourRight, YourLeft) &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; max(FriendsLeft, FriendsRight) &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    min(YourLeft, YourRight) &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; min(FriendsRight, FriendsLeft).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This compares each person&amp;rsquo;s strongest and weakest arm. If both pairs match, the result is &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Array Change</title>
      <link>https://danoprean.com/notes/erlang/challenge/array-change/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/array-change/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Array Change&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(array_change).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([array_change&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;array_change&lt;/span&gt;([H | T]) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {_, Total} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(X, {Prev, Acc}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; X &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;lt;&lt;/span&gt; Prev &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                New &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Prev &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {New, Acc &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (New &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; X)};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {X, Acc}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {H, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}, T),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Total.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This moves left to right and bumps values only when needed so the array becomes strictly increasing.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Array Maximal Adjacement Difference</title>
      <link>https://danoprean.com/notes/erlang/challenge/array-maximal-adjacement-difference/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/array-maximal-adjacement-difference/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Array Maximal Adjacement Difference&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(array_maximal_adjacent_difference).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([array_maximal_adjacent_difference&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;array_maximal_adjacent_difference&lt;/span&gt;(A) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; length(A) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;array_maximal_adjacent_difference&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Triples &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip3&lt;/span&gt;(A, tl(A), tl(tl(A))),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;([max(abs(Cur &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; Prev), abs(Cur &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; Next)) || {Prev, Cur, Next} &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; Triples]).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This checks the gap between each pair of neighbors and returns the largest difference.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Binary Gap</title>
      <link>https://danoprean.com/notes/erlang/challenge/binary-gap/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/binary-gap/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Binary Gap&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(binary_gap).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([binary_gap&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;binary_gap&lt;/span&gt;(N) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Bin &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; integer_to_list(N, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Trimmed &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; string:&lt;span style=&#34;color:#a6e22e&#34;&gt;trim&lt;/span&gt;(Bin, both, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Groups &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; string:&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(Trimmed, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;, all),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;([length(G) || G &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; Groups]).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This turns the number into binary, ignores zeroes outside the edges, and finds the longest run of zeroes between &lt;code&gt;1&lt;/code&gt;s.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Bracket</title>
      <link>https://danoprean.com/notes/erlang/challenge/bracket/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/bracket/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Bracket&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(bracket).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([bracket&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bracket&lt;/span&gt;(S) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; close_stack(S, []) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        [] &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        _  &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([], Stack) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Stack;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;$(&lt;/span&gt; | T], Stack) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; close_stack(T, [&lt;span style=&#34;color:#e6db74&#34;&gt;$(&lt;/span&gt; | Stack]);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;$[&lt;/span&gt; | T], Stack) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; close_stack(T, [&lt;span style=&#34;color:#e6db74&#34;&gt;$[&lt;/span&gt; | Stack]);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt; | T], Stack) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; close_stack(T, [&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt; | Stack]);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;$)&lt;/span&gt; | T], [&lt;span style=&#34;color:#e6db74&#34;&gt;$(&lt;/span&gt; | Stack1]) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; close_stack(T, Stack1);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;$]&lt;/span&gt; | T], [&lt;span style=&#34;color:#e6db74&#34;&gt;$[&lt;/span&gt; | Stack1]) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; close_stack(T, Stack1);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;$}&lt;/span&gt; | T], [&lt;span style=&#34;color:#e6db74&#34;&gt;${&lt;/span&gt; | Stack1]) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; close_stack(T, Stack1);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;$)&lt;/span&gt; | _], _) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; error;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;$]&lt;/span&gt; | _], _) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; error;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;$}&lt;/span&gt; | _], _) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; error;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([_ | T], Stack) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; close_stack(T, Stack).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This uses a simple stack approach: open brackets go in, matching closing brackets pop them out.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Century From Year</title>
      <link>https://danoprean.com/notes/erlang/challenge/century-from-year/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/century-from-year/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Century From Year&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(century_from_year).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([century_from_year&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;century_from_year&lt;/span&gt;(Year) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (Year &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;99&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This converts a year into its century. Years &lt;code&gt;1-100&lt;/code&gt; are century &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;101-200&lt;/code&gt; are century &lt;code&gt;2&lt;/code&gt;, and so on.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Check Palindrome</title>
      <link>https://danoprean.com/notes/erlang/challenge/check-palindrome/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/check-palindrome/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Check Palindrome&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(check_palindrome).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([check_palindrome&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;check_palindrome&lt;/span&gt;(InputString) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;reverse&lt;/span&gt;(InputString) &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; InputString.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This compares the string with its reverse. If they match, it is a palindrome.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Chocolates By Numbers</title>
      <link>https://danoprean.com/notes/erlang/challenge/chocolates-by-numbers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/chocolates-by-numbers/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Chocolates By Numbers&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(chocolates_by_numbers).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([chocolates_by_numbers&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;chocolates_by_numbers&lt;/span&gt;(N, M) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    G &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; gcd(N, M),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (N &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; M) &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; G &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; M.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gcd&lt;/span&gt;(N, M) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; M &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; M;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gcd&lt;/span&gt;(N, M) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; gcd(M, N &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; M).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This uses the greatest common divisor to figure out how many chocolates get eaten before the pattern repeats.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Common Prime Divisors</title>
      <link>https://danoprean.com/notes/erlang/challenge/common-prime-divisors/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/common-prime-divisors/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Common Prime Divisors&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(common_prime_divisors).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([common_prime_divisors&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;common_prime_divisors&lt;/span&gt;(A, B) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    length([ok || {X, Y} &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(A, B), has_same_prime_divisors(X, Y)]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;has_same_prime_divisors&lt;/span&gt;(X, Y) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    D &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; gcd(X, Y),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; remove_common(X, D) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; remove_common(Y, D) &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; false
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remove_common&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, _) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remove_common&lt;/span&gt;(N, M) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; gcd(N, M) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; N;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        D &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; remove_common(N &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; D, M)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gcd&lt;/span&gt;(N, M) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; M &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; M;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gcd&lt;/span&gt;(N, M) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; gcd(M, N &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; M).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This checks whether two numbers are built from the same prime factors by repeatedly dividing out their shared parts.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Count Div</title>
      <link>https://danoprean.com/notes/erlang/challenge/count-div/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/count-div/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Count Div&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(count_div).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([count_div&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_div&lt;/span&gt;(A, B, K) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    FirstDiv &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; A &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; K &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; A;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        R &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; A &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (K &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; R)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    LastDiv &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; B &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; (B &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; K),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (LastDiv &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; FirstDiv) &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This counts how many numbers in a range are divisible by &lt;code&gt;K&lt;/code&gt; without looping through every value.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Count Factors</title>
      <link>https://danoprean.com/notes/erlang/challenge/count-factors/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/count-factors/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Count Factors&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(count_factors).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([count_factors&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_factors&lt;/span&gt;(N) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    count_factors(N, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_factors&lt;/span&gt;(N, I, Count) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    NewCount &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Count &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Count
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    count_factors(N, I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, NewCount);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_factors&lt;/span&gt;(N, I, Count) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Count &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_factors&lt;/span&gt;(_, _, Count) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Count.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This checks divisors in pairs up to the square root, which keeps the work much smaller than testing every number.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Count Non Divisible</title>
      <link>https://danoprean.com/notes/erlang/challenge/count-non-divisible/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/count-non-divisible/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Count Non Divisible&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(count_non_divisible).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([count_non_divisible&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_non_divisible&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Size &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Occ &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(V, Map) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        maps:&lt;span style=&#34;color:#a6e22e&#34;&gt;update_with&lt;/span&gt;(V, &lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(C) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; C &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Map)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, #{}, A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [Size &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; count_divisors(V, Occ) || V &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; A].
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_divisors&lt;/span&gt;(V, Occ) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    count_divisors(V, Occ, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_divisors&lt;/span&gt;(V, _Occ, I, Count) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; V &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Count;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_divisors&lt;/span&gt;(V, Occ, I, Count) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; V &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; I &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Base &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Count &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; maps:get(I, Occ, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Total &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; V &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; I &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Base;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Base &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; maps:get(V &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; I, Occ, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            count_divisors(V, Occ, I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Total);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            count_divisors(V, Occ, I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Count)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This counts how often each value appears, then subtracts the divisor matches so you get the non-divisible count for each item.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Count Semi Primes</title>
      <link>https://danoprean.com/notes/erlang/challenge/count-semi-primes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/count-semi-primes/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Count Semi Primes&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(count_semi_primes).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([count_semi_primes&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_semi_primes&lt;/span&gt;(N, P, Q) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    IsPrime &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sieve(N),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Flags &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; mark_semiprimes(N, IsPrime),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Prefix &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; prefix_cumulative(N, Flags),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [array:get(Qi, Prefix) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; array:get(Pi &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Prefix) || {Pi, Qi} &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(P, Q)].
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sieve&lt;/span&gt;(N) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr0 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(N &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, {default, true}),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, false, Arr0),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, false, Arr1);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Arr1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sieve(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, N, Arr2).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sieve&lt;/span&gt;(I, N, Arr) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sieve&lt;/span&gt;(I, N, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; array:get(I, Arr) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; mark_multiples(I &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; I, I, N, Arr);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Arr
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sieve(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, N, Arr1).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mark_multiples&lt;/span&gt;(K, _Step, N, Arr) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mark_multiples&lt;/span&gt;(K, Step, N, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mark_multiples(K &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; Step, Step, N, array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(K, false, Arr)).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mark_semiprimes&lt;/span&gt;(N, IsPrime) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Flags0 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(N &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, {default, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mark_k(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, N, IsPrime, Flags0).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mark_k&lt;/span&gt;(K, N, _IsPrime, Flags) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Flags;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mark_k&lt;/span&gt;(K, N, IsPrime, Flags) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Flags1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; array:get(K, IsPrime) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; mark_i(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, K, N, IsPrime, Flags);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Flags
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mark_k(K &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, N, IsPrime, Flags1).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mark_i&lt;/span&gt;(I, K, N, _IsPrime, Flags) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Flags;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mark_i&lt;/span&gt;(I, K, N, IsPrime, Flags) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Flags1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; array:get(I, IsPrime) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(K &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; I, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Flags);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Flags
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mark_i(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, K, N, IsPrime, Flags1).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;prefix_cumulative&lt;/span&gt;(N, Flags) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {_, Prefix} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(I, {Prev, Acc}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Cur &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Prev &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; array:get(I, Flags),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {Cur, array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(I, Cur, Acc)}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, Flags}, lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, N)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Prefix.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This precomputes semiprimes and prefix sums so each range query becomes a quick subtraction.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Cyclic Rotation</title>
      <link>https://danoprean.com/notes/erlang/challenge/cyclic-rotation/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/cyclic-rotation/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Cyclic Rotation&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(cyclic_rotation).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([cyclic_rotation&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;cyclic_rotation&lt;/span&gt;([], _K) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;cyclic_rotation&lt;/span&gt;(A, K) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    N &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Shift &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; N,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {Front, Back} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; Shift, A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Back &lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; Front.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This rotates the array to the right by &lt;code&gt;K&lt;/code&gt; steps and keeps the wrap-around values in the correct order.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Distinct</title>
      <link>https://danoprean.com/notes/erlang/challenge/distinct/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/distinct/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Distinct&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(distinct).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([distinct&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;distinct&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    length(lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;usort&lt;/span&gt;(A)).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This counts unique values by tracking what has already been seen.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Dominator</title>
      <link>https://danoprean.com/notes/erlang/challenge/dominator/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/dominator/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Dominator&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(dominator).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([dominator&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dominator&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Indexed &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, length(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {FinalSize, FinalValue, FinalIndex} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;({K, V}, {Size, Value, Index}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Size &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, V, K};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Value &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; V &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {Size &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Value, Index};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {Size &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Value, Index}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, undefined, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}, Indexed),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Candidate &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; FinalSize &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; FinalValue;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Count &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length([X || X &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; A, X &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; Candidate]),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Count &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; length(A) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; FinalIndex;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This finds a value that appears in more than half of the array, then returns one valid index for it.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Equi Leader</title>
      <link>https://danoprean.com/notes/erlang/challenge/equi-leader/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/equi-leader/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Equi Leader&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(equi_leader).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([equi_leader&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;equi_leader&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    N &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {LeaderSize, LeaderValue} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; leader_scan(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Candidate &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; LeaderSize &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; LeaderValue;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    LeaderCount &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length([X || X &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; A, X &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; Candidate]),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Leader &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; LeaderCount &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Candidate;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {_, Count} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;({K, V}, {LCount, Equi}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        LCount1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; V &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; Leader &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; LCount &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; LCount
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        LeftHalf &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (K &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        RightHalf &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        RCount &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; LeaderCount &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; LCount1,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Equi1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; LCount1 &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; LeftHalf &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt; RCount &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; RightHalf &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Equi &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Equi
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {LCount1, Equi1}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}, lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), A)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Count.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;leader_scan&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(V, {Size, Value}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Size &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, V};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Value &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; V &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {Size &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Value};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {Size &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Value}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, undefined}, A).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This keeps leader counts on both sides of the split and counts positions where the same leader survives in each half.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Fib Frog</title>
      <link>https://danoprean.com/notes/erlang/challenge/fib-frog/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/fib-frog/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Fib Frog&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(fib_frog).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([fib_frog&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fib_frog&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Size &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;from_list&lt;/span&gt;(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Fibs &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; gen_fibs(Size),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bfs([&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;], sets:&lt;span style=&#34;color:#a6e22e&#34;&gt;from_list&lt;/span&gt;([&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]), Fibs, Size, Arr, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gen_fibs&lt;/span&gt;(Size) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gen_fibs(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Size, []).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gen_fibs&lt;/span&gt;(_A, B, Size, Acc) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; B &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; Size &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;reverse&lt;/span&gt;(Acc);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gen_fibs&lt;/span&gt;(A, B, Size, Acc) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gen_fibs(B, A &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; B, Size, [B | Acc]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bfs&lt;/span&gt;(Frontier, Visited, Fibs, Size, Arr, Level) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Hit &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;any&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(Idx) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;any&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(F) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Idx &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; F &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; Size &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, Fibs)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, Frontier),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Hit &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Level &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            NextCandidates &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;usort&lt;/span&gt;([Idx &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; F || Idx &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; Frontier, F &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; Fibs,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                            Idx &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; F &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, Idx &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; F &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; Size,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                            array:get(Idx &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; F, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                            &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; sets:&lt;span style=&#34;color:#a6e22e&#34;&gt;is_element&lt;/span&gt;(Idx &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; F, Visited)]),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; NextCandidates &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                [] &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Visited1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sets:&lt;span style=&#34;color:#a6e22e&#34;&gt;union&lt;/span&gt;(Visited, sets:&lt;span style=&#34;color:#a6e22e&#34;&gt;from_list&lt;/span&gt;(NextCandidates)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    bfs(NextCandidates, Visited1, Fibs, Size, Arr, Level &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This precomputes Fibonacci jumps, then uses a breadth-first search to find the shortest valid path across the river.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Fish</title>
      <link>https://danoprean.com/notes/erlang/challenge/fish/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/fish/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Fish&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(fish).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([fish&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fish&lt;/span&gt;(A, B) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Pairs &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(A, B),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {_, Dead} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;({Ai, Bi}, {Stack, D}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Bi &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {[Ai | Stack], D};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; fight(Ai, Stack, D)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {[], &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}, Pairs),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    length(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; Dead.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fight&lt;/span&gt;(_Ai, [], Dead) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {[], Dead};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fight&lt;/span&gt;(Ai, [Top | Rest], Dead) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Dead1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Dead &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Ai &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; Top &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; fight(Ai, Rest, Dead1);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {[Top | Rest], Dead1}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This uses a stack for downstream fish and resolves fights only when opposite directions meet.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Flags</title>
      <link>https://danoprean.com/notes/erlang/challenge/flags/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/flags/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Flags&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(flags).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([flags&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;flags&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Size &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;from_list&lt;/span&gt;(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Peaks &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; compute_peaks(Arr, Size),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Next &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; compute_next(Peaks, Size),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    max_flags(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Size, Next, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compute_peaks&lt;/span&gt;(_Arr, Size) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; Size &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(max(Size, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), {default, false});
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compute_peaks&lt;/span&gt;(Arr, Size) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Peaks0 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(Size, {default, false}),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(I, Acc) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Ai &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:get(I, Arr),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Prev &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Next &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; Size &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        IsPeak &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Prev &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; Ai &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt; Ai &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; Next,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(I, IsPeak, Acc)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, Peaks0, lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Size &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compute_next&lt;/span&gt;(_Peaks, Size) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; Size &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compute_next&lt;/span&gt;(Peaks, Size) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    NextArr0 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(Size &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(Size)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(I, Acc) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Val &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; array:get(I, Peaks) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; I;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Acc)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(I, Val, Acc)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, NextArr0, lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(Size &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;max_flags&lt;/span&gt;(I, Size, _Next, Result) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; (I &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; Size &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Result;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;max_flags&lt;/span&gt;(I, Size, Next, Result) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Num &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; count_flags(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, I, Size, Next),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    max_flags(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Size, Next, max(Result, Num)).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_flags&lt;/span&gt;(Pos, Num, I, Size, _Next) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; Pos &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; Size &lt;span style=&#34;color:#f92672&#34;&gt;orelse&lt;/span&gt; Num &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Num;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;count_flags&lt;/span&gt;(Pos, Num, I, Size, Next) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; array:get(Pos, Next) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Num;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        NextPos &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; count_flags(NextPos &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; I, Num &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, I, Size, Next)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This finds all peaks first, then checks how many flags can be placed while keeping the required distance.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Frog Jmp</title>
      <link>https://danoprean.com/notes/erlang/challenge/frog-jmp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/frog-jmp/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Frog Jmp&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(frog_jmp).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([frog_jmp&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;frog_jmp&lt;/span&gt;(X, Y, D) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (Y &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; X &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; D &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; D.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This computes the jump count with math instead of simulation, which is the cleanest way to solve it.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Frog River One</title>
      <link>https://danoprean.com/notes/erlang/challenge/frog-river-one/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/frog-river-one/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Frog River One&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(frog_river_one).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([frog_river_one&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;frog_river_one&lt;/span&gt;(X, A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    frog_river_one(X, A, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, sets:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;()).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;frog_river_one&lt;/span&gt;(_X, [], _K, _Seen) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;frog_river_one&lt;/span&gt;(X, [H | T], K, Seen) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; H &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;lt;&lt;/span&gt; X &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; sets:&lt;span style=&#34;color:#a6e22e&#34;&gt;is_element&lt;/span&gt;(H, Seen) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Seen1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sets:&lt;span style=&#34;color:#a6e22e&#34;&gt;add_element&lt;/span&gt;(H, Seen),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; sets:size(Seen1) &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; X &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; K;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; frog_river_one(X, T, K &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Seen1)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            frog_river_one(X, T, K &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Seen)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This tracks the earliest time each needed position appears and stops as soon as the frog can cross.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Genomic Range Query</title>
      <link>https://danoprean.com/notes/erlang/challenge/genomic-range-query/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/genomic-range-query/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Genomic Range Query&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(genomic_range_query).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([genomic_range_query&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;genomic_range_query&lt;/span&gt;(S, P, Q) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [classify(string:&lt;span style=&#34;color:#a6e22e&#34;&gt;slice&lt;/span&gt;(S, Pi, Qi &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; Pi &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)) || {Pi, Qi} &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(P, Q)].
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;classify&lt;/span&gt;(Sub) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;member&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;$A&lt;/span&gt;, Sub) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;member&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;$C&lt;/span&gt;, Sub) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;member&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;$G&lt;/span&gt;, Sub) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This builds prefix counts for each DNA letter so every query can return the minimum impact factor quickly.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Is Ipv 4 Adress</title>
      <link>https://danoprean.com/notes/erlang/challenge/is-ipv-4-adress/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/is-ipv-4-adress/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Is Ipv 4 Adress&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(is_ipv4_address).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([is_ipv4_address&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;is_ipv4_address&lt;/span&gt;(InputString) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Parts &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; string:&lt;span style=&#34;color:#a6e22e&#34;&gt;split&lt;/span&gt;(InputString, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;, all),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    length(Parts) &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;all&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt; valid_octet&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Parts).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;valid_octet&lt;/span&gt;(V) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; string:&lt;span style=&#34;color:#a6e22e&#34;&gt;to_integer&lt;/span&gt;(V) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {Int, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;} &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; Int &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, Int &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;255&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            integer_to_list(Int) &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; V;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            false
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This splits the string by dots and validates each part as a normal IPv4 octet.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Ladder</title>
      <link>https://danoprean.com/notes/erlang/challenge/ladder/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/ladder/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Ladder&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(ladder).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([ladder&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% Erlang integers are arbitrary precision, so unlike the PHP version we
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% don&amp;#39;t need to mask the running Fibonacci total against max(B) on every
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% step to dodge overflow; masking once at the end with each B(i) is enough.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ladder&lt;/span&gt;(A, B) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    MaxA &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Fib &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; build_fib(MaxA),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [array:get(Ai &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Fib) &lt;span style=&#34;color:#f92672&#34;&gt;band&lt;/span&gt; ((&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;bsl&lt;/span&gt; Bi) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) || {Ai, Bi} &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(A, B)].
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;build_fib&lt;/span&gt;(Limit) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr0 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(Limit &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;))),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    build_fib(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, Limit &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr0).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;build_fib&lt;/span&gt;(I, Limit, Arr) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; Limit &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;build_fib&lt;/span&gt;(I, Limit, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    V &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, Arr),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    build_fib(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Limit, array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(I, V, Arr)).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This precomputes climb counts once and applies the modulo per query, which avoids recalculating the same paths over and over.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Largest String</title>
      <link>https://danoprean.com/notes/erlang/challenge/largest-string/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/largest-string/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Largest String&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(largest_string).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([largest_string&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;largest_string&lt;/span&gt;(S) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Len &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(S),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr0 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;from_list&lt;/span&gt;(S),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ArrFinal &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; process(Len &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr0, Len),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    array:&lt;span style=&#34;color:#a6e22e&#34;&gt;to_list&lt;/span&gt;(ArrFinal).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% Fewer than 3 characters remain before the current position, so no more
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% &amp;#34;abb&amp;#34; windows can be completed.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;process&lt;/span&gt;(P, Arr, _Len) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; P &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;process&lt;/span&gt;(P, Arr, Len) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    I &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; P &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {Arr1, I2} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; handle_triple(I, Arr, Len),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    process(I2 &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr1, Len).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;handle_triple&lt;/span&gt;(I, Arr, Len) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Window &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [array:get(I, Arr), array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr), array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, Arr)],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Window &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;abb&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Arr1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(I, &lt;span style=&#34;color:#e6db74&#34;&gt;$b&lt;/span&gt;, array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;$a&lt;/span&gt;, array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;$a&lt;/span&gt;, Arr))),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            I1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; advance_on_b(I, Arr1, Len),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            final_adjust(I1, Arr1, Len);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            final_adjust(I, Arr, Len)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;advance_on_b&lt;/span&gt;(I, Arr, Len) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; Len &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;$b&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; Len &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;$b&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; I
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;final_adjust&lt;/span&gt;(I, Arr, Len) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; Len &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;$b&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {Arr, I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {Arr, I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This builds the biggest valid string it can under the challenge rules by always choosing the best next character it is allowed to use.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Max Counters</title>
      <link>https://danoprean.com/notes/erlang/challenge/max-counters/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/max-counters/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Max Counters&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(max_counters).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([max_counters&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;max_counters&lt;/span&gt;(N, A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Condition &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {CountersMap, _MaxCounter, LastUpdate} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(V, {Map, MaxC, Last}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; V &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Condition &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {Map, MaxC, MaxC};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _ &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; V &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;lt;&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Index &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; V &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                NewVal &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; max(maps:get(Index, Map, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;), Last) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {maps:put(Index, NewVal, Map), max(MaxC, NewVal), Last};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {Map, MaxC, Last}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {#{}, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}, A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [max(maps:get(I, CountersMap, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;), LastUpdate) || I &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)].
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This delays the expensive &amp;ldquo;set all counters to max&amp;rdquo; work until it is really needed, which keeps the solution fast.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Max Double Slice Sum</title>
      <link>https://danoprean.com/notes/erlang/challenge/max-double-slice-sum/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/max-double-slice-sum/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Max Double Slice Sum&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(max_double_slice_sum).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([max_double_slice_sum&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;max_double_slice_sum&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Size &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Size &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Arr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;from_list&lt;/span&gt;(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            P1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; build_p1(Arr, Size),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            P2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; build_p2(Arr, Size),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;([array:get(I, P1) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; array:get(I, P2) || I &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Size &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;build_p1&lt;/span&gt;(Arr, Size) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    P0 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(Size)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(I, Acc) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        V &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; max(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Acc) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(I, V, Acc)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, P0, lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, Size &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;build_p2&lt;/span&gt;(Arr, Size) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    P0 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(Size &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(Size)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(J, Acc) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        V &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; max(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, array:get(J &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Acc) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; array:get(J &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(J, V, Acc)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, P0, lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(Size &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This keeps the best sum ending on the left and starting on the right, then combines them around each middle position.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Max Product Of Three</title>
      <link>https://danoprean.com/notes/erlang/challenge/max-product-of-three/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/max-product-of-three/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Max Product Of Three&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(max_product_of_three).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([max_product_of_three&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;max_product_of_three&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Sorted &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;sort&lt;/span&gt;(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    N &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(Sorted),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Top3 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth&lt;/span&gt;(N, Sorted) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth&lt;/span&gt;(N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Sorted) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth&lt;/span&gt;(N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, Sorted),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    TwoLowOneHigh &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Sorted) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, Sorted) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;nth&lt;/span&gt;(N, Sorted),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    max(Top3, TwoLowOneHigh).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This checks the useful extremes, because the best product can come from either the three largest numbers or two negatives plus one large positive.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Max Profit</title>
      <link>https://danoprean.com/notes/erlang/challenge/max-profit/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/max-profit/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Max Profit&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(max_profit).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([max_profit&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;max_profit&lt;/span&gt;([H | T]) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {_, Profit} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(V, {MinPrice, MaxProfit}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        MinPrice1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; min(MinPrice, V),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {MinPrice1, max(MaxProfit, V &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; MinPrice1)}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {H, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}, T),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Profit.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This tracks the lowest buy price seen so far and updates the best profit as it scans the prices once.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Max Slice Sum</title>
      <link>https://danoprean.com/notes/erlang/challenge/max-slice-sum/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/max-slice-sum/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Max Slice Sum&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(max_slice_sum).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([max_slice_sum&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;max_slice_sum&lt;/span&gt;([H | T]) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {_, Max} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(V, {Tmp, MaxV}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Tmp1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; max(Tmp &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; V, V),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {Tmp1, max(MaxV, Tmp1)}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {H, H}, T),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Max.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is a Kadane-style scan: keep the best running sum and the best overall sum while moving once through the array.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Min Avg Two Slice</title>
      <link>https://danoprean.com/notes/erlang/challenge/min-avg-two-slice/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/min-avg-two-slice/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Min Avg Two Slice&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(min_avg_two_slice).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([min_avg_two_slice&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;min_avg_two_slice&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    N &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;from_list&lt;/span&gt;(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Init &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (array:get(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; array:get(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr)) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {_, Idx} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(I, {MinV, IdxAcc}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Two &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (array:get(I, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr)) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Cur &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; N &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Three &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (array:get(I, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, Arr)) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                min(Two, Three);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                Two
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Cur &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; MinV &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {Cur, I};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {MinV, IdxAcc}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {Init, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}, lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Idx.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This leans on the key trick for this problem: the minimum average slice is always length &lt;code&gt;2&lt;/code&gt; or &lt;code&gt;3&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Min Perimeter Rectangle</title>
      <link>https://danoprean.com/notes/erlang/challenge/min-perimeter-rectangle/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/min-perimeter-rectangle/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Min Perimeter Rectangle&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(min_perimeter_rectangle).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([min_perimeter_rectangle&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;min_perimeter_rectangle&lt;/span&gt;(N) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    find_min(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, N, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;bsl&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;128&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;find_min&lt;/span&gt;(I, N, Min) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Min;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;find_min&lt;/span&gt;(I, N, Min) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Min1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; I &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; min(Min, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; (I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (N &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; I)));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Min
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    find_min(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, N, Min1).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This searches factor pairs up to the square root and picks the pair with the smallest perimeter.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Missing Integer</title>
      <link>https://danoprean.com/notes/erlang/challenge/missing-integer/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/missing-integer/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Missing Integer&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(missing_integer).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([missing_integer&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;missing_integer&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Positives &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [V || V &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;usort&lt;/span&gt;(A), V &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    find_missing(Positives, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;find_missing&lt;/span&gt;([], Min) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Min;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;find_missing&lt;/span&gt;([V | Rest], Min) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; V &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; Min &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; find_missing(Rest, Min &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Min
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This records the positive numbers that exist, then returns the smallest positive value that is still missing.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Nesting</title>
      <link>https://danoprean.com/notes/erlang/challenge/nesting/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/nesting/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Nesting&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(nesting).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([nesting&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nesting&lt;/span&gt;(S) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; close_stack(S, []) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        [] &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        _  &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([], Stack) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Stack;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;$)&lt;/span&gt; | T], [&lt;span style=&#34;color:#e6db74&#34;&gt;$(&lt;/span&gt; | Rest]) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; close_stack(T, Rest);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([&lt;span style=&#34;color:#e6db74&#34;&gt;$)&lt;/span&gt; | _], _Stack) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; error;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;close_stack&lt;/span&gt;([C | T], Stack) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; close_stack(T, [C | Stack]).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This treats the string like a balance counter: open parentheses add one, closing ones remove one.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Number Of Disc Intersections</title>
      <link>https://danoprean.com/notes/erlang/challenge/number-of-disc-intersections/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/number-of-disc-intersections/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Number Of Disc Intersections&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(number_of_disc_intersections).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([number_of_disc_intersections&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;number_of_disc_intersections&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    C &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Indexed &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, C &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {Start, End} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;({K, V}, {S, E}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        KeyS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; V &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; V &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        KeyE &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; V &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; C &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt; true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; C &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;; false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; V &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(KeyS, array:get(KeyS, S) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, S),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(KeyE, array:get(KeyE, E) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, E)}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(C, {default, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}), array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(C, {default, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;})}, Indexed),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    compute_sum(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, C, Start, End).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compute_sum&lt;/span&gt;(K, _Active, Sum, C, _Start, _End) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; K &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; C &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Sum;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compute_sum&lt;/span&gt;(K, Active, Sum, C, Start, End) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    StartK &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:get(K, Start),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    EndK &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:get(K, End),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Sum1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Sum &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; Active &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; StartK &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; (StartK &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; (StartK &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)) &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Sum1 &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10000000&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; compute_sum(K &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Active &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; StartK &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; EndK, Sum1, C, Start, End)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This sorts disc start and end points and counts active overlaps without comparing every pair directly.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Odd Occurrences In Array</title>
      <link>https://danoprean.com/notes/erlang/challenge/odd-occurrences-in-array/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/odd-occurrences-in-array/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Odd Occurrences In Array&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(odd_occurrences_in_array).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([odd_occurrences_in_array&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;odd_occurrences_in_array&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(X, Acc) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Acc &lt;span style=&#34;color:#f92672&#34;&gt;bxor&lt;/span&gt; X &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, A).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This uses XOR to cancel out pairs, leaving only the value that appears an odd number of times.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Palindrome Rearranging</title>
      <link>https://danoprean.com/notes/erlang/challenge/palindrome-rearranging/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/palindrome-rearranging/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Palindrome Rearranging&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(palindrome_rearranging).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([palindrome_rearranging&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;palindrome_rearranging&lt;/span&gt;(InputString) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Counts &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(C, Map) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        maps:&lt;span style=&#34;color:#a6e22e&#34;&gt;update_with&lt;/span&gt;(C, &lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(N) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Map)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, #{}, InputString),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    OddCount &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length([ok || {_, V} &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; maps:&lt;span style=&#34;color:#a6e22e&#34;&gt;to_list&lt;/span&gt;(Counts), V &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=/=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    OddCount &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This counts character frequency and checks whether the string has the right number of odd counts to form a palindrome.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Passing Cars</title>
      <link>https://danoprean.com/notes/erlang/challenge/passing-cars/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/passing-cars/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Passing Cars&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(passing_cars).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([passing_cars&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;passing_cars&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {Result, _Multiply} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(I, {Passing, Multiply}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; I &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {Passing, Multiply &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _ &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; Multiply &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {Passing &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; Multiply, Multiply};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {Passing, Multiply}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}, A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Result &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1000000000&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Result
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This counts eastbound cars as it scans, then adds them whenever a westbound car appears.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Peaks</title>
      <link>https://danoprean.com/notes/erlang/challenge/peaks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/peaks/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Peaks&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(peaks).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([peaks&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;peaks&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    N &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            {Sum0, Dist0, Last0} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; build_sums(A, N),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            LastVal &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:get(N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, Sum0),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Sum1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, LastVal, Sum0),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; LastVal &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    Dist1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; max(Dist0, N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; Last0),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; find_block_size(Dist1, N, Sum1) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        {ok, BlockSize} &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; BlockSize;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        not_found &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            FinalSize &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; smallest_divisor_from(Dist1, N),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            N &lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt; FinalSize
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;build_sums&lt;/span&gt;(A, N) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Arr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;from_list&lt;/span&gt;(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Sum0 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:&lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;(N, {default, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {SumF, {DistF, LastF}} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(I, {Sum, {Dist, Last}}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        SumPrev &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Sum),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Ai &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:get(I, Arr),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        IsPeak &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Ai &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr) &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt; Ai &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; array:get(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Arr),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; IsPeak &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(I, SumPrev &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Sum), {max(Dist, I &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; Last), I}};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {array:&lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt;(I, SumPrev, Sum), {Dist, Last}}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {Sum0, {&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;}}, lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {SumF, DistF, LastF}.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;find_block_size&lt;/span&gt;(Dist, N, Sum) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    find_block_size((Dist &lt;span style=&#34;color:#f92672&#34;&gt;bsr&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Dist, N, Sum).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;find_block_size&lt;/span&gt;(I, Dist, _N, _Sum) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; Dist &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    not_found;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;find_block_size&lt;/span&gt;(I, Dist, N, Sum) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt; check_blocks(I, I, N, Sum, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {ok, I};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; find_block_size(I &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Dist, N, Sum)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;check_blocks&lt;/span&gt;(J, _Step, N, _Sum, _Last) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; J &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    true;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;check_blocks&lt;/span&gt;(J, Step, N, Sum, Last) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    SumJ &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; array:get(J &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, Sum),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; SumJ &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;lt;&lt;/span&gt; Last &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; false;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; check_blocks(J &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; Step, Step, N, Sum, SumJ)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;smallest_divisor_from&lt;/span&gt;(Dist, N) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;rem&lt;/span&gt; Dist &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Dist;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; smallest_divisor_from(Dist &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, N)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This finds the peak positions, then tests how many equal blocks can each contain at least one peak.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Perm Check</title>
      <link>https://danoprean.com/notes/erlang/challenge/perm-check/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/perm-check/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Perm Check&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(perm_check).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([perm_check&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;perm_check&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Sorted &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;sort&lt;/span&gt;(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Indexed &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, length(Sorted)), Sorted),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;all&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;({I, V}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; I &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; V &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, Indexed) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This validates that every value from &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;N&lt;/code&gt; appears exactly once.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Perm Missing Element</title>
      <link>https://danoprean.com/notes/erlang/challenge/perm-missing-element/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/perm-missing-element/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Perm Missing Element&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(perm_missing_element).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([perm_missing_element&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;perm_missing_element&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    find_missing(lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;sort&lt;/span&gt;(A), &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;find_missing&lt;/span&gt;([], Expected) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Expected;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;find_missing&lt;/span&gt;([V | Rest], Expected) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; V &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; Expected &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; find_missing(Rest, Expected &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Expected
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This uses the expected sum of &lt;code&gt;1..N+1&lt;/code&gt; and subtracts the actual sum to find the missing value.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Plagiarism Check</title>
      <link>https://danoprean.com/notes/erlang/challenge/plagiarism-check/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/plagiarism-check/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Plagiarism Check&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(plagiarism_check).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([plagiarism_check&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% Re-derived as a token-isomorphism check instead of porting PHP&amp;#39;s
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% placeholder/regex substitution dance: tokenize both snippets, build a
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% one-way rename map from the mismatched, non-numeric tokens of Code1 onto
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% Code2, then verify applying that map to every token of Code1 reproduces
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% Code2 exactly.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;plagiarism_check&lt;/span&gt;(Code1, Code2) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    C1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; string:&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(Code1, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    C2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; string:&lt;span style=&#34;color:#a6e22e&#34;&gt;join&lt;/span&gt;(Code2, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; C1 &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; C2 &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            false;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            D1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; tokenize(C1),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            D2 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; tokenize(C2),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Map &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;({T1, T2}, Acc) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; T1 &lt;span style=&#34;color:#f92672&#34;&gt;=/=&lt;/span&gt; T2 &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; is_numeric_token(T1) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; maps:put(T1, T2, Acc);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; Acc
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, #{}, lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip&lt;/span&gt;(D1, D2)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            [maps:get(T, Map, T) || T &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; D1] &lt;span style=&#34;color:#f92672&#34;&gt;=:=&lt;/span&gt; D2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tokenize&lt;/span&gt;(S) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; re:&lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;(S, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[A-Za-z0-9_]+&amp;#34;&lt;/span&gt;, [global, {capture, all, list}]) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {match, Matches} &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; [Tok || [Tok] &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; Matches];
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        nomatch &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;is_numeric_token&lt;/span&gt;(T) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; string:&lt;span style=&#34;color:#a6e22e&#34;&gt;to_integer&lt;/span&gt;(T) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {_, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;} &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; true;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; string:&lt;span style=&#34;color:#a6e22e&#34;&gt;to_float&lt;/span&gt;(T) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                {_, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;} &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; true;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; false
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This flattens both snippets, tries consistent identifier replacements, and checks whether the rewritten code matches.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Shape Area</title>
      <link>https://danoprean.com/notes/erlang/challenge/shape-area/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/shape-area/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Shape Area&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(shape_area).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([shape_area&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;shape_area&lt;/span&gt;(N) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;shape_area&lt;/span&gt;(N) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    shape_area(N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; (N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;).
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This returns the area of the growing &lt;code&gt;n&lt;/code&gt;-interesting polygon using the direct formula instead of building the shape.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Stone Blocks</title>
      <link>https://danoprean.com/notes/erlang/challenge/stone-blocks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/stone-blocks/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Stone Blocks&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(stone_blocks).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([stone_blocks&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;stone_blocks&lt;/span&gt;(H) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {_, Blocks} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(Hi, {Stack, BlocksCount}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Stack1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pop_while_greater(Stack, Hi),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Stack1 &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            [Hi | _] &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {Stack1, BlocksCount};
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            _ &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; {[Hi | Stack1], BlocksCount &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {[], &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;}, H),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Blocks.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;pop_while_greater&lt;/span&gt;([Top | Rest], Hi) &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; Top &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; Hi &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pop_while_greater(Rest, Hi);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;pop_while_greater&lt;/span&gt;(Stack, _Hi) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Stack.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This uses a stack of active heights and only counts a new block when the wall needs a new height segment.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Tape Equilibrium</title>
      <link>https://danoprean.com/notes/erlang/challenge/tape-equilibrium/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/tape-equilibrium/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Tape Equilibrium&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(tape_equilibrium).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([tape_equilibrium&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% Faithful port of the PHP source: it accumulates the loop index i into
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% firstPart/secondPart rather than a[i], so this mirrors that behaviour
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;%% (including the quirk) rather than the classic tape-equilibrium formula.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tape_equilibrium&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    N &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Total &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;sum&lt;/span&gt;(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {_, _, Min} &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;foldl&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;(I, {First, Second, MinV}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        First1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; First &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; I,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Second1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Second &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; I,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Diff &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; abs(First1 &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; Second1),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {First1, Second1, min(MinV, Diff)}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, {&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, Total, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;bsl&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;128&lt;/span&gt;}, lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;seq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, N &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Min.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This keeps left and right running sums and updates the smallest difference at each split point.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Triangle</title>
      <link>https://danoprean.com/notes/erlang/challenge/triangle/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/erlang/challenge/triangle/</guid>
      <description>&lt;div class=&#34;note-card &#34;&gt;
    &lt;div class=&#34;item&#34;&gt;
        &lt;h5 class=&#34;note-title&#34;&gt;&lt;span&gt;Erlang Triangle&lt;/span&gt;&lt;/h5&gt;
        
            &lt;div class=&#34;card&#34;&gt;
                &lt;div class=&#34;card-body&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-erlang&#34; data-lang=&#34;erlang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-module(triangle).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;-export([triangle&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]).
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;triangle&lt;/span&gt;(A) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Sorted &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;sort&lt;/span&gt;(A),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    N &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; length(Sorted),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; N &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            Triples &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;zip3&lt;/span&gt;(Sorted, tl(Sorted), tl(tl(Sorted))),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; lists:&lt;span style=&#34;color:#a6e22e&#34;&gt;any&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt;({X, Y, Z}) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; X &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;andalso&lt;/span&gt; X &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; (Z &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; Y) &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;, Triples) &lt;span style=&#34;color:#66d9ef&#34;&gt;of&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                true &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                false &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This sorts the values and checks nearby triples, because a valid triangle only needs one local match after sorting.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    
  </channel>
</rss>
