<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Lisp Notes on Dan Stefan Oprean</title>
    <link>https://danoprean.com/notes/lisp/</link>
    <description>Recent content in Lisp Notes on Dan Stefan Oprean</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language><atom:link href="https://danoprean.com/notes/lisp/index.xml" rel="self" type="application/rss+xml" /><item>
      <title>Introduction</title>
      <link>https://danoprean.com/notes/lisp/basic/introduction/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, world!~%&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run with a Common Lisp implementation such as SBCL:&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-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sbcl --script main.lisp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This prints a line in Common Lisp using &lt;code&gt;format&lt;/code&gt;, which is a flexible function for building and writing text.&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;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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defparameter *name* &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;(defparameter *count* &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;(defparameter *active* &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These global parameters hold simple values you can reuse across expressions.&lt;/p&gt;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;

&lt;!-- Functions --&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;Functions&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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun greet (name)
&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;format&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, ~A!&amp;#34;&lt;/span&gt; name))
&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;(greet &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;world&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This defines a function and then calls it. Lisp keeps the function shape compact, even for small reusable helpers.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>Add</title>
      <link>https://danoprean.com/notes/lisp/challenge/add/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun add (param1 param2)
&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;+&lt;/span&gt; param1 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/lisp/challenge/add-border/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun add-border (picture)
&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;let*&lt;/span&gt; ((width (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;first&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:#a6e22e&#34;&gt;make-string&lt;/span&gt; width &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;         (wrapped (&lt;span style=&#34;color:#a6e22e&#34;&gt;mapcar&lt;/span&gt; (lambda (row) (&lt;span style=&#34;color:#a6e22e&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;*~A*&amp;#34;&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:#a6e22e&#34;&gt;cons&lt;/span&gt; border picture))))
&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;append&lt;/span&gt; wrapped (&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-string&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; width &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;#\*&lt;/span&gt;)))))
&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/lisp/challenge/adjacent-elements-product/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun adjacent-elements-product (input-array)
&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;let&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; input-array &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (max-product most-negative-fixnum))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (dotimes (i (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; vec)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (setf max-product (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; max-product (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; i))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    max-product))
&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/lisp/challenge/almost-magic-square/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun almost-magic-square (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;let&lt;/span&gt; ((m (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#39;&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&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;        (row-sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;        (col-sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;        (max-sum &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;    (loop for idx from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          for val in a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; m (&lt;span style=&#34;color:#a6e22e&#34;&gt;floor&lt;/span&gt; idx &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; idx &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)) val))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (dotimes (i &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;      (dotimes (j &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;        (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; row-sum i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; m i j))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; col-sum i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; m j i))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (dotimes (k &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;      (setf max-sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; max-sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; row-sum k) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; col-sum k))))
&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;let&lt;/span&gt; ((i &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) (j &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;      (loop while (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; j &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;            do (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; ((diff (&lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; max-sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; row-sum i))
&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;-&lt;/span&gt; max-sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; col-sum j)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; m i j) diff)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; row-sum i) diff)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; col-sum j) diff)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; row-sum i) max-sum) (incf i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (when (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; j &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; col-sum j) max-sum)) (incf j)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for idx from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          collect (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; m (&lt;span style=&#34;color:#a6e22e&#34;&gt;floor&lt;/span&gt; idx &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; idx &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)))))
&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/lisp/challenge/are-equally-strong/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun are-equally-strong (your-left your-right friends-left friends-right)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; your-right your-left) (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; friends-left friends-right))
&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;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; your-left your-right) (&lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; friends-right friends-left))))
&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/lisp/challenge/array-change/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun array-change (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;let&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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&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;    (dotimes (k (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; vec)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec k) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; k)))
&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;let&lt;/span&gt; ((dif (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec k) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; k))) &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;          (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; k)) dif)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (incf &lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; dif))))
&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&lt;/span&gt;))
&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;</description>
    </item>
    
    <item>
      <title>Array Maximal Adjacement Difference</title>
      <link>https://danoprean.com/notes/lisp/challenge/array-maximal-adjacement-difference/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun array-maximal-adjacent-difference (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;let*&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; vec))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (dif &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;    (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; below (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; c)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (setf dif (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; dif
&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;abs&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&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:#a6e22e&#34;&gt;abs&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; i)))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dif))
&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;</description>
    </item>
    
    <item>
      <title>Binary Gap</title>
      <link>https://danoprean.com/notes/lisp/challenge/binary-gap/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun binary-gap (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;let*&lt;/span&gt; ((bits (&lt;span style=&#34;color:#a6e22e&#34;&gt;write-to-string&lt;/span&gt; n &lt;span style=&#34;color:#e6db74&#34;&gt;:base&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;         (trimmed (&lt;span style=&#34;color:#a6e22e&#34;&gt;string-trim&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; bits))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (groups (split-on-char trimmed &lt;span style=&#34;color:#e6db74&#34;&gt;#\1&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (gap &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;    (dolist (zero groups)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (setf gap (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; gap (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; zero))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    gap))
&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;(defun split-on-char (s ch)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (loop with start &lt;span style=&#34;color:#a6e22e&#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;        for pos &lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;position&lt;/span&gt; ch s &lt;span style=&#34;color:#e6db74&#34;&gt;:start&lt;/span&gt; start)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        collect (&lt;span style=&#34;color:#a6e22e&#34;&gt;subseq&lt;/span&gt; s start pos)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        while pos
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        do (setf start (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; pos))))
&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;</description>
    </item>
    
    <item>
      <title>Bracket</title>
      <link>https://danoprean.com/notes/lisp/challenge/bracket/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun bracket (s)
&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;let&lt;/span&gt; ((stack &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#39;&lt;/span&gt;()))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for v across s
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (cond
&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;char=&lt;/span&gt; v &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;                (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (or (&lt;span style=&#34;color:#a6e22e&#34;&gt;null&lt;/span&gt; stack) (&lt;span style=&#34;color:#a6e22e&#34;&gt;char/=&lt;/span&gt; (pop stack) &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;                    (&lt;span style=&#34;color:#66d9ef&#34;&gt;return-from&lt;/span&gt; bracket &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;char=&lt;/span&gt; v &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;                (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (or (&lt;span style=&#34;color:#a6e22e&#34;&gt;null&lt;/span&gt; stack) (&lt;span style=&#34;color:#a6e22e&#34;&gt;char/=&lt;/span&gt; (pop stack) &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;                    (&lt;span style=&#34;color:#66d9ef&#34;&gt;return-from&lt;/span&gt; bracket &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;char=&lt;/span&gt; v &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;                (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (or (&lt;span style=&#34;color:#a6e22e&#34;&gt;null&lt;/span&gt; stack) (&lt;span style=&#34;color:#a6e22e&#34;&gt;char/=&lt;/span&gt; (pop stack) &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;                    (&lt;span style=&#34;color:#66d9ef&#34;&gt;return-from&lt;/span&gt; bracket &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;t&lt;/span&gt; (push v stack))))
&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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;null&lt;/span&gt; stack) &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;/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/lisp/challenge/century-from-year/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun century-from-year (year)
&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;ceiling&lt;/span&gt; year &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/lisp/challenge/check-palindrome/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun check-palindrome (input-string)
&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;string=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;reverse&lt;/span&gt; input-string) input-string))
&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/lisp/challenge/chocolates-by-numbers/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun choc-gcd (n 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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;zerop&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; n m))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      m
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (choc-gcd m (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; n 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;(defun chocolates-by-numbers (n 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;/&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; n m) (choc-gcd n m)) 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/lisp/challenge/common-prime-divisors/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun cpd-gcd (n 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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;zerop&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; n m))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      m
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (cpd-gcd m (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; n 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;(defun remove-common-prime-divisors (n m)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (loop while (&lt;span style=&#34;color:#a6e22e&#34;&gt;/=&lt;/span&gt; n &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;        do (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; ((d (cpd-gcd n m)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; d &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;return-from&lt;/span&gt; remove-common-prime-divisors n))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;             (setf n (&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt; n d))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  n)
&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;(defun common-prime-divisors (a b)
&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;let&lt;/span&gt; ((counter &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;    (loop for x in a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          for y in b
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (&lt;span style=&#34;color:#66d9ef&#34;&gt;let*&lt;/span&gt; ((d (cpd-gcd x y))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     (rx (remove-common-prime-divisors x d)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; rx &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;let&lt;/span&gt; ((ry (remove-common-prime-divisors y d)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; ry &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;                     (incf counter))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    counter))
&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/lisp/challenge/count-div/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun count-div (a b k)
&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;let*&lt;/span&gt; ((first-div (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;zerop&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; a k)) a (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; a (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; k (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; a k)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (last-div (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; b (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; b k))))
&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;1+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; last-div first-div) k))))
&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/lisp/challenge/count-factors/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun count-factors (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;let&lt;/span&gt; ((&lt;span style=&#34;color:#a6e22e&#34;&gt;count&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;        (i &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;    (loop while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; i i) n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (&lt;span style=&#34;color:#66d9ef&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;zerop&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; n i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (incf &lt;span style=&#34;color:#a6e22e&#34;&gt;count&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;               (incf i)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; i i) n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (incf &lt;span style=&#34;color:#a6e22e&#34;&gt;count&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&lt;/span&gt;))
&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/lisp/challenge/count-non-divisible/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun count-non-divisible (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;let*&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; vec))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (occurrences (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;max&lt;/span&gt; vec)) &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;    (loop for v across vec do (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; occurrences v)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for v across vec
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          collect (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; ((&lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) (i &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;                    (loop while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; i i) v)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                          do (&lt;span style=&#34;color:#66d9ef&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                               (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;zerop&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; v i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                 (incf &lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; occurrences i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                 (unless (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt; v i) i)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                   (incf &lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; occurrences (&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt; v i)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                               (incf i)))
&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;-&lt;/span&gt; size &lt;span style=&#34;color:#a6e22e&#34;&gt;count&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/lisp/challenge/count-semi-primes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun count-semi-primes (n p q)
&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;let&lt;/span&gt; ((primes (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; n) &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (semi-primes (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; n) &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;    (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; i i) n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; primes i)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (loop for k from (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; i i) to n by i
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     do (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; primes k) &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for k from &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; k k) n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; primes k)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; i k) n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     do (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; primes i)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                          (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; semi-primes (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; k i)) &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;    (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; to n
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; semi-primes i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; semi-primes (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; i))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for v in p
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          for qi in q
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          collect (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; semi-primes qi) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; semi-primes (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; v))))))
&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/lisp/challenge/cyclic-rotation/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun cyclic-rotation (a k)
&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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;null&lt;/span&gt; a)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&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;let&lt;/span&gt; ((result (&lt;span style=&#34;color:#a6e22e&#34;&gt;copy-list&lt;/span&gt; a)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (dotimes (i k)
&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;let&lt;/span&gt; ((&lt;span style=&#34;color:#a6e22e&#34;&gt;last&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;car&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;last&lt;/span&gt; result))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (setf result (&lt;span style=&#34;color:#a6e22e&#34;&gt;cons&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;last&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;butlast&lt;/span&gt; result)))))
&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;/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/lisp/challenge/distinct/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun distinct (a)
&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;length&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;remove-duplicates&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;:test&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;equal&lt;/span&gt;)))
&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/lisp/challenge/dominator/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun dominator (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;let&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#ae81ff&#34;&gt;0&lt;/span&gt;) (value &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) (index &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;    (loop for k from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; vec)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          for v &lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec k)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (cond
&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;zerop&lt;/span&gt; size) (incf size) (setf value v) (setf index k))
&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;/=&lt;/span&gt; value v) (decf size))
&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;t&lt;/span&gt; (incf size))))
&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;let&lt;/span&gt; ((candidate (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; size &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) value &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&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;      (loop for v across vec do (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; v candidate) (incf &lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; vec) &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;        (setf index &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;      index)))
&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/lisp/challenge/equi-leader/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun equi-leader (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;let&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (leader-size &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) (value &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;    (loop for v across vec
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (cond
&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;zerop&lt;/span&gt; leader-size) (incf leader-size) (setf value v))
&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;/=&lt;/span&gt; value v) (decf leader-size))
&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;t&lt;/span&gt; (incf leader-size))))
&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;let*&lt;/span&gt; ((candidate (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; leader-size &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) value &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;           (leader-count &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;      (loop for v across vec do (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; v candidate) (incf leader-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;let&lt;/span&gt; ((leader (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; leader-count (&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; vec) &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)) candidate &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&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; vec))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (l-leader-count &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;            (equi-leaders &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;        (loop for k from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below &lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              for v &lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec k)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              do (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; ((left-half (&lt;span style=&#34;color:#a6e22e&#34;&gt;floor&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; k) &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;                       (right-half (&lt;span style=&#34;color:#a6e22e&#34;&gt;floor&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt; k &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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; v leader) (incf l-leader-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;let&lt;/span&gt; ((r-leader-count (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; leader-count l-leader-count)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     (when (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; l-leader-count left-half)
&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;&amp;gt;&lt;/span&gt; r-leader-count right-half))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       (incf equi-leaders)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        equi-leaders))))
&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/lisp/challenge/fib-frog/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun fib-frog (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;let*&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; vec))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (fib (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-contents&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#39;&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &lt;span style=&#34;color:#e6db74&#34;&gt;:adjustable&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:fill-pointer&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;let&lt;/span&gt; ((i &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;      (loop while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; fib i) size)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            do (&lt;span style=&#34;color:#66d9ef&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (incf i)
&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;vector-push-extend&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; fib (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; i)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; fib (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;))) fib))))
&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;let&lt;/span&gt; ((paths (&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:idx&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;-1&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:jmp&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;          (steps (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; size &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (loop while paths
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            do (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; ((path (pop paths)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (loop for i from (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; fib)) downto &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;                       do (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; ((idx (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;getf&lt;/span&gt; path &lt;span style=&#34;color:#e6db74&#34;&gt;:idx&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; fib i))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            (cond
&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;=&lt;/span&gt; idx size) (&lt;span style=&#34;color:#66d9ef&#34;&gt;return-from&lt;/span&gt; fib-frog (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;getf&lt;/span&gt; path &lt;span style=&#34;color:#e6db74&#34;&gt;:jmp&lt;/span&gt;))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                              ((or (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; idx size)
&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;aref&lt;/span&gt; steps idx)
&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;zerop&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec idx)))
&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;nil&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;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec idx) &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;                               (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; steps idx) &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                               (setf paths (&lt;span style=&#34;color:#a6e22e&#34;&gt;append&lt;/span&gt; paths (&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:idx&lt;/span&gt; idx &lt;span style=&#34;color:#e6db74&#34;&gt;:jmp&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;getf&lt;/span&gt; path &lt;span style=&#34;color:#e6db74&#34;&gt;:jmp&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;/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/lisp/challenge/fish/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun fish (a b)
&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;let*&lt;/span&gt; ((veca (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (vecb (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; b &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; veca))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (dead &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;         (stack &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#39;&lt;/span&gt;()))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (dotimes (i size)
&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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vecb i) &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;          (push (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; veca i) stack)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (when stack
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (loop while stack
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  do (&lt;span style=&#34;color:#66d9ef&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       (incf dead)
&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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; veca i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;first&lt;/span&gt; stack))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                           (pop stack)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                           (return)))))))
&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;-&lt;/span&gt; size dead)))
&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/lisp/challenge/flags/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun flags (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;let*&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; vec))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (peaks (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; size &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (next (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; size &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;    (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; below size
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; peaks i)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; i)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec i))
&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;&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec i) (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; i) size) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; i)) &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;    (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; next (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; size)) &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;    (loop for i from (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; size &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) downto &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;          do (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; next i) (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; peaks i) i (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; next (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&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;let&lt;/span&gt; ((i &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) (result &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;      (loop while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; i (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; i)) size)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            do (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; ((pos &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) (num &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;                 (loop while (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; pos size) (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; num i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       do (&lt;span style=&#34;color:#66d9ef&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            (setf pos (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; next pos))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; pos &lt;span style=&#34;color:#ae81ff&#34;&gt;-1&lt;/span&gt;) (return))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            (incf num)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            (incf pos i)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (incf i)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (setf result (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; result num))))
&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;/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/lisp/challenge/frog-jmp/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun frog-jmp (x y d)
&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;ceiling&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; y x) 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/lisp/challenge/frog-river-one/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun frog-river-one (x 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;let&lt;/span&gt; ((existing (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-hash-table&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for k from &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;          for i in a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (when (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;not&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;gethash&lt;/span&gt; i existing)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; i x))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;gethash&lt;/span&gt; i existing) i)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;hash-table-count&lt;/span&gt; existing) x)
&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;return-from&lt;/span&gt; frog-river-one k))))
&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;/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;&lt;/div&gt;
            &lt;/div&gt;
        
    &lt;/div&gt;
&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Genomic Range Query</title>
      <link>https://danoprean.com/notes/lisp/challenge/genomic-range-query/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun genomic-range-query (s p q)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (loop for pi in p
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        for qi in q
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        collect (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; ((sub (&lt;span style=&#34;color:#a6e22e&#34;&gt;subseq&lt;/span&gt; s pi (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; qi))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  (cond
&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&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;#\A&lt;/span&gt; sub) &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;find&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;#\C&lt;/span&gt; sub) &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:#a6e22e&#34;&gt;find&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;#\G&lt;/span&gt; sub) &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 style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&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/lisp/challenge/is-ipv-4-adress/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun split-on-char (s ch)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (loop with start &lt;span style=&#34;color:#a6e22e&#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;        for pos &lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;position&lt;/span&gt; ch s &lt;span style=&#34;color:#e6db74&#34;&gt;:start&lt;/span&gt; start)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        collect (&lt;span style=&#34;color:#a6e22e&#34;&gt;subseq&lt;/span&gt; s start pos)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        while pos
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        do (setf start (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; pos))))
&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;(defun is-ipv4-address (input-string)
&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;let&lt;/span&gt; ((parts (split-on-char input-string &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;    (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; parts) &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:#a6e22e&#34;&gt;every&lt;/span&gt; (lambda (v)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; v) &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;every&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;digit-char-p&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:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;parse-integer&lt;/span&gt; v) &lt;span style=&#34;color:#ae81ff&#34;&gt;255&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;string=&lt;/span&gt; v (&lt;span style=&#34;color:#a6e22e&#34;&gt;write-to-string&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;parse-integer&lt;/span&gt; v)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                parts))))
&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;</description>
    </item>
    
    <item>
      <title>Ladder</title>
      <link>https://danoprean.com/notes/lisp/challenge/ladder/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun ladder (a b)
&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;let*&lt;/span&gt; ((veca (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (vecb (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; b &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; veca))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (modulus (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ash&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;max&lt;/span&gt; vecb))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (limit (&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;max&lt;/span&gt; veca))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (fib (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; limit &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;    (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; fib &lt;span style=&#34;color:#ae81ff&#34;&gt;1&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;    (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; below (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; limit &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;          do (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; fib i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;logand&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; fib (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; i)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; fib (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;))) modulus)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below size
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          collect (&lt;span style=&#34;color:#a6e22e&#34;&gt;logand&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; fib (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; veca i))) (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ash&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vecb i)))))))
&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/lisp/challenge/largest-string/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun largest-string (s)
&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;let*&lt;/span&gt; ((str (&lt;span style=&#34;color:#a6e22e&#34;&gt;copy-seq&lt;/span&gt; s))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (len (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; str))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (cur &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;         (i (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; len)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;=&lt;/span&gt; i &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;          do (&lt;span style=&#34;color:#66d9ef&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (setf cur (&lt;span style=&#34;color:#a6e22e&#34;&gt;concatenate&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;string&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;string&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;char&lt;/span&gt; str i)) cur))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; cur) &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;                 (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;string=&lt;/span&gt; cur &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;abb&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;char&lt;/span&gt; str i) &lt;span style=&#34;color:#e6db74&#34;&gt;#\b&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;char&lt;/span&gt; str (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)) &lt;span style=&#34;color:#e6db74&#34;&gt;#\a&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;char&lt;/span&gt; str (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)) &lt;span style=&#34;color:#e6db74&#34;&gt;#\a&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (cond
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     ((and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;) len) (&lt;span style=&#34;color:#a6e22e&#34;&gt;char=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;char&lt;/span&gt; str (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;)) &lt;span style=&#34;color:#e6db74&#34;&gt;#\b&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      (incf i (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&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;                     ((and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;) len) (&lt;span style=&#34;color:#a6e22e&#34;&gt;char=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;char&lt;/span&gt; str (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)) &lt;span style=&#34;color:#e6db74&#34;&gt;#\b&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      (incf i (&lt;span style=&#34;color:#a6e22e&#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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     ((&lt;span style=&#34;color:#a6e22e&#34;&gt;char=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;char&lt;/span&gt; str (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)) &lt;span style=&#34;color:#e6db74&#34;&gt;#\b&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      (incf i (&lt;span style=&#34;color:#a6e22e&#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;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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;char=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;char&lt;/span&gt; str (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)) &lt;span style=&#34;color:#e6db74&#34;&gt;#\b&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     (incf i (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&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;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     (incf i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (setf cur &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;               (decf i)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    str))
&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/lisp/challenge/max-counters/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun max-counters (n 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;let&lt;/span&gt; ((counters (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; n &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;        (max-counter &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;        (last-update &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;condition&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; n)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (dolist (v a)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; v 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;let&lt;/span&gt; ((index (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; v)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; counters index) last-update)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; counters index) last-update))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; counters index))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (setf max-counter (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; max-counter (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; counters index)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; v &lt;span style=&#34;color:#66d9ef&#34;&gt;condition&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (setf last-update max-counter)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (dotimes (k n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; counters k) last-update)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; counters k) last-update)))
&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;coerce&lt;/span&gt; counters &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;list&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/lisp/challenge/max-double-slice-sum/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun max-double-slice-sum (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;let*&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; vec)))
&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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; size &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 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;let&lt;/span&gt; ((p1 (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; size &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;              (p2 (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; size &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;          (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; p1 &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;          (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; p2 (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; size &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&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; below (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; size)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                do (&lt;span style=&#34;color:#66d9ef&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; p1 i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; p1 (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; i)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; i)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; p2 (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; size i &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; p2 (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; size i)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; size 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;let&lt;/span&gt; ((sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; p1 &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; p2 &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;            (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; below (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; size)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  do (setf sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; p1 i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; p2 i)))))
&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;/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/lisp/challenge/max-product-of-three/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun max-product-of-three (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;let*&lt;/span&gt; ((sorted (&lt;span style=&#34;color:#a6e22e&#34;&gt;sort&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;copy-list&lt;/span&gt; a) &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;&amp;lt;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; sorted &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; vec)))
&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&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; c &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; c &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; c &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 style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; c &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 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;</description>
    </item>
    
    <item>
      <title>Max Profit</title>
      <link>https://danoprean.com/notes/lisp/challenge/max-profit/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun max-profit (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;let&lt;/span&gt; ((price (&lt;span style=&#34;color:#a6e22e&#34;&gt;first&lt;/span&gt; a))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (profit &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;    (dolist (v a)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (setf price (&lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; price v))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (setf profit (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; profit (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; v price))))
&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/lisp/challenge/max-slice-sum/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun max-slice-sum (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;let&lt;/span&gt; ((tmp most-negative-fixnum)
&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&lt;/span&gt; most-negative-fixnum))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (dolist (v a)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (setf tmp (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; tmp v) v))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (setf &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; tmp)))
&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&lt;/span&gt;))
&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/lisp/challenge/min-avg-two-slice/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun min-avg-two-slice (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;let*&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; vec))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (idx &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;min&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)) &lt;span style=&#34;color:#ae81ff&#34;&gt;2.0&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; ((cur (&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; i))) &lt;span style=&#34;color:#ae81ff&#34;&gt;2.0&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;count&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;let&lt;/span&gt; ((three (&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; i)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;))) &lt;span style=&#34;color:#ae81ff&#34;&gt;3.0&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (setf cur (&lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; cur three))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; cur &lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (setf &lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; cur)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (setf idx i))))
&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/lisp/challenge/min-perimeter-rectangle/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun min-perimeter-rectangle (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;let&lt;/span&gt; ((i &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;min&lt;/span&gt; most-positive-fixnum))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; i i) n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (&lt;span style=&#34;color:#66d9ef&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;zerop&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; n i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (setf &lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i (&lt;span style=&#34;color:#a6e22e&#34;&gt;/&lt;/span&gt; n i))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (incf i)))
&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&lt;/span&gt;))
&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/lisp/challenge/missing-integer/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun missing-integer (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;let&lt;/span&gt; ((sorted (&lt;span style=&#34;color:#a6e22e&#34;&gt;sort&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;remove-duplicates&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;copy-list&lt;/span&gt; a) &lt;span style=&#34;color:#e6db74&#34;&gt;:test&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;=&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;&amp;lt;&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&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;    (loop for v in sorted
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; v &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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;/=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; v)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (return)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (incf &lt;span style=&#34;color:#a6e22e&#34;&gt;min&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&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/lisp/challenge/nesting/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun nesting (s)
&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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;zerop&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; s))
&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:#66d9ef&#34;&gt;let&lt;/span&gt; ((stack &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#39;&lt;/span&gt;()))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (loop for v across s
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              do (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;char=&lt;/span&gt; v &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;                     (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (or (&lt;span style=&#34;color:#a6e22e&#34;&gt;null&lt;/span&gt; stack) (&lt;span style=&#34;color:#a6e22e&#34;&gt;char/=&lt;/span&gt; (pop stack) &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;                         (&lt;span style=&#34;color:#66d9ef&#34;&gt;return-from&lt;/span&gt; nesting &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;                     (push v stack)))
&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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;null&lt;/span&gt; stack) &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;/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/lisp/challenge/number-of-disc-intersections/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun number-of-disc-intersections (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;let*&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; vec))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (start (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; c &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;         (end (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; c &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;         (sum &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;         (active &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;    (loop for k from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          for v &lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec k)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; ((key1 (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; k v) &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; k v)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    (key2 (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; k v) c) (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; c) (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; k v))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; start key1))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; end key2))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for k from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below c
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (&lt;span style=&#34;color:#66d9ef&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (incf sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; active (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; start k))
&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;/&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; start k) (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; start k))) &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;               (incf active (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; start k) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; end k)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; sum &lt;span style=&#34;color:#ae81ff&#34;&gt;10000000&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;return-from&lt;/span&gt; number-of-disc-intersections &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;    sum))
&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/lisp/challenge/odd-occurrences-in-array/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun odd-occurrences-in-array (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;let&lt;/span&gt; ((counts (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-hash-table&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:test&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;eql&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (dolist (v a)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;gethash&lt;/span&gt; v counts &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;    (loop for v being &lt;span style=&#34;color:#66d9ef&#34;&gt;the&lt;/span&gt; hash-keys of counts using (hash-value c)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          when (&lt;span style=&#34;color:#a6e22e&#34;&gt;oddp&lt;/span&gt; c)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            return v)))
&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/lisp/challenge/palindrome-rearranging/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun palindrome-rearranging (input-string)
&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;let&lt;/span&gt; ((counts (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-hash-table&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:test&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;eql&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:#ae81ff&#34;&gt;0&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for ch across input-string
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;gethash&lt;/span&gt; ch counts &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;    (loop for v being &lt;span style=&#34;color:#66d9ef&#34;&gt;the&lt;/span&gt; hash-values of counts
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;oddp&lt;/span&gt; v) (incf c)))
&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;&amp;lt;=&lt;/span&gt; c &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/lisp/challenge/passing-cars/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun passing-cars (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;let&lt;/span&gt; ((passing-cars &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;        (multiply &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;    (dolist (i 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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;zerop&lt;/span&gt; i)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (incf multiply)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; multiply &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;            (incf passing-cars multiply)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; passing-cars &lt;span style=&#34;color:#ae81ff&#34;&gt;1000000000&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;return-from&lt;/span&gt; passing-cars &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;    passing-cars))
&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/lisp/challenge/peaks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun peaks (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;let&lt;/span&gt; ((n (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; 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;        &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;let*&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; n &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;last&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;               (dist &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;          (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; below (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                do (&lt;span style=&#34;color:#66d9ef&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; sum i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; i)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     (when (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&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:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; i))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       (setf dist (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; dist (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; i &lt;span style=&#34;color:#a6e22e&#34;&gt;last&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       (setf &lt;span style=&#34;color:#a6e22e&#34;&gt;last&lt;/span&gt; i)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       (incf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; sum i)))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; n)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; 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;          (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;zerop&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; sum (&lt;span style=&#34;color:#a6e22e&#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:#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;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                (setf dist (&lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt; dist (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; n &lt;span style=&#34;color:#a6e22e&#34;&gt;last&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                (loop for i from (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ash&lt;/span&gt; dist &lt;span style=&#34;color:#ae81ff&#34;&gt;-1&lt;/span&gt;)) below dist
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      do (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;zerop&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; n 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;let&lt;/span&gt; ((lst &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;                                 (j i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                             (loop while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; j n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                   do (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; j)) lst)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                          (return)
&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;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                            (setf lst (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; sum (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; j)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                            (incf j i))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                             (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; j 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;return-from&lt;/span&gt; peaks (&lt;span style=&#34;color:#a6e22e&#34;&gt;floor&lt;/span&gt; n i))))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                (setf &lt;span style=&#34;color:#a6e22e&#34;&gt;last&lt;/span&gt; dist)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                (loop while (&lt;span style=&#34;color:#a6e22e&#34;&gt;/=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; n &lt;span style=&#34;color:#a6e22e&#34;&gt;last&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      do (incf &lt;span style=&#34;color:#a6e22e&#34;&gt;last&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;floor&lt;/span&gt; n &lt;span style=&#34;color:#a6e22e&#34;&gt;last&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/lisp/challenge/perm-check/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun perm-check (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;let*&lt;/span&gt; ((sorted (&lt;span style=&#34;color:#a6e22e&#34;&gt;sort&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;copy-list&lt;/span&gt; a) &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;&amp;lt;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; sorted &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; vec)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for k from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below n
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (when (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; k) n) (&lt;span style=&#34;color:#a6e22e&#34;&gt;/=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec k) (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; k)))
&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;return-from&lt;/span&gt; perm-check &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:#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 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/lisp/challenge/perm-missing-element/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun perm-missing-element (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;let*&lt;/span&gt; ((sorted (&lt;span style=&#34;color:#a6e22e&#34;&gt;sort&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;copy-list&lt;/span&gt; a) &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;&amp;lt;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; sorted &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for k from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; vec)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (when (&lt;span style=&#34;color:#a6e22e&#34;&gt;/=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec k) (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; k))
&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;return-from&lt;/span&gt; perm-missing-element (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; k))))
&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;1+&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; vec))))
&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/lisp/challenge/plagiarism-check/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun word-char-p (ch)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (or (&lt;span style=&#34;color:#a6e22e&#34;&gt;alphanumericp&lt;/span&gt; ch) (&lt;span style=&#34;color:#a6e22e&#34;&gt;char=&lt;/span&gt; ch &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;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun word-tokens (s)
&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;let&lt;/span&gt; ((tokens &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#39;&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:#a6e22e&#34;&gt;length&lt;/span&gt; s))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (i &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;    (loop while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; i n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (word-char-p (&lt;span style=&#34;color:#a6e22e&#34;&gt;char&lt;/span&gt; s 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;let&lt;/span&gt; ((start i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (loop while (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; i n) (word-char-p (&lt;span style=&#34;color:#a6e22e&#34;&gt;char&lt;/span&gt; s i)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                         do (incf i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   (push (&lt;span style=&#34;color:#a6e22e&#34;&gt;subseq&lt;/span&gt; s start i) tokens))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (incf i)))
&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;nreverse&lt;/span&gt; tokens)))
&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;(defun numeric-token-p (tok)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; tok) &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;every&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;digit-char-p&lt;/span&gt; tok)))
&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;(defun boundary-replace (str token replacement)
&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;let&lt;/span&gt; ((out (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-string-output-stream&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (tlen (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; token))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (n (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; str))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (i &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;    (loop while (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; i n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; ((pos (&lt;span style=&#34;color:#a6e22e&#34;&gt;search&lt;/span&gt; token str &lt;span style=&#34;color:#e6db74&#34;&gt;:start2&lt;/span&gt; i)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (cond
&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;null&lt;/span&gt; pos)
&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;write-string&lt;/span&gt; str out &lt;span style=&#34;color:#e6db74&#34;&gt;:start&lt;/span&gt; i &lt;span style=&#34;color:#e6db74&#34;&gt;:end&lt;/span&gt; n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  (setf i n))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 ((and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; pos &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;not&lt;/span&gt; (word-char-p (&lt;span style=&#34;color:#a6e22e&#34;&gt;char&lt;/span&gt; str (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; pos)))))
&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;write-string&lt;/span&gt; str out &lt;span style=&#34;color:#e6db74&#34;&gt;:start&lt;/span&gt; i &lt;span style=&#34;color:#e6db74&#34;&gt;:end&lt;/span&gt; pos)
&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;write-string&lt;/span&gt; replacement out)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  (setf i (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; pos tlen)))
&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;t&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;write-string&lt;/span&gt; str out &lt;span style=&#34;color:#e6db74&#34;&gt;:start&lt;/span&gt; i &lt;span style=&#34;color:#e6db74&#34;&gt;:end&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; pos))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  (setf i (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&lt;/span&gt; pos))))))
&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;get-output-stream-string&lt;/span&gt; out)))
&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;(defun plagiarism-check (code1 code2)
&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;let&lt;/span&gt; ((c1 (&lt;span style=&#34;color:#a6e22e&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~{~A~^ ~}&amp;#34;&lt;/span&gt; code1))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (c2 (&lt;span style=&#34;color:#a6e22e&#34;&gt;format&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;~{~A~^ ~}&amp;#34;&lt;/span&gt; code2)))
&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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;string=&lt;/span&gt; c1 c2)
&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;nil&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;let&lt;/span&gt; ((d1 (word-tokens c1))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              (d2 (word-tokens c2))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              (r-cand (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-hash-table&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;:test&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;equal&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;              (r-order &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#39;&lt;/span&gt;()))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (loop for v in d1
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                for w in d2
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                do (when (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;not&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;string=&lt;/span&gt; v w)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;not&lt;/span&gt; (numeric-token-p v)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     (unless (nth-value &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;gethash&lt;/span&gt; v r-cand))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       (push v r-order))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;gethash&lt;/span&gt; v r-cand) w)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (setf r-order (&lt;span style=&#34;color:#a6e22e&#34;&gt;nreverse&lt;/span&gt; r-order))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (dolist (orig r-order)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (setf c1 (boundary-replace c1 orig (&lt;span style=&#34;color:#a6e22e&#34;&gt;concatenate&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PLACEHOLDER&amp;#34;&lt;/span&gt; orig))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (dolist (orig r-order)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            (setf c1 (boundary-replace c1 (&lt;span style=&#34;color:#a6e22e&#34;&gt;concatenate&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PLACEHOLDER&amp;#34;&lt;/span&gt; orig) (&lt;span style=&#34;color:#a6e22e&#34;&gt;gethash&lt;/span&gt; orig r-cand))))
&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;string=&lt;/span&gt; c1 c2)))))
&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/lisp/challenge/shape-area/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun shape-area (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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; n &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;+&lt;/span&gt; (shape-area (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; n)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#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:#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/lisp/challenge/stone-blocks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun stone-blocks (h)
&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;let*&lt;/span&gt; ((n (&lt;span style=&#34;color:#a6e22e&#34;&gt;length&lt;/span&gt; h))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (height (&lt;span style=&#34;color:#a6e22e&#34;&gt;make-array&lt;/span&gt; n &lt;span style=&#34;color:#e6db74&#34;&gt;:initial-element&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;         (index &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;         (blocks &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;    (dolist (i h)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (loop while (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; index &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; height (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; index)) i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            do (decf index))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      (unless (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; index &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; height (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; index)) i))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (setf (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; height index) i)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (incf blocks)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (incf index)))
&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;/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/lisp/challenge/tape-equilibrium/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun tape-equilibrium (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;let*&lt;/span&gt; ((vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; a &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; vec))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (first-part &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;         (second-part (&lt;span style=&#34;color:#a6e22e&#34;&gt;reduce&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;+&lt;/span&gt; vec))
&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&lt;/span&gt; most-positive-fixnum))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below (&lt;span style=&#34;color:#a6e22e&#34;&gt;1-&lt;/span&gt; n)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          do (&lt;span style=&#34;color:#66d9ef&#34;&gt;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (incf first-part i)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               (decf second-part 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;let&lt;/span&gt; ((difference (&lt;span style=&#34;color:#a6e22e&#34;&gt;abs&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; first-part second-part))))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                 (setf &lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; difference &lt;span style=&#34;color:#a6e22e&#34;&gt;min&lt;/span&gt;) difference &lt;span style=&#34;color:#a6e22e&#34;&gt;min&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&lt;/span&gt;))
&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/lisp/challenge/triangle/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://danoprean.com/notes/lisp/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;Lisp 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-lisp&#34; data-lang=&#34;lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(defun triangle (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;let*&lt;/span&gt; ((sorted (&lt;span style=&#34;color:#a6e22e&#34;&gt;sort&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;copy-list&lt;/span&gt; a) &lt;span style=&#34;color:#a6e22e&#34;&gt;#&amp;#39;&amp;lt;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         (vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;coerce&lt;/span&gt; sorted &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;vector&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:#a6e22e&#34;&gt;length&lt;/span&gt; vec)))
&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;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;lt;&lt;/span&gt; c &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 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;progn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          (loop for i from &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; below (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; c &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;                do (when (and (&lt;span style=&#34;color:#a6e22e&#34;&gt;&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec i) &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;&amp;gt;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec i) (&lt;span style=&#34;color:#a6e22e&#34;&gt;-&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;+&lt;/span&gt; i &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)) (&lt;span style=&#34;color:#a6e22e&#34;&gt;aref&lt;/span&gt; vec (&lt;span style=&#34;color:#a6e22e&#34;&gt;1+&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;return-from&lt;/span&gt; triangle &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:#ae81ff&#34;&gt;0&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;</description>
    </item>
    
    
  </channel>
</rss>
