<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="348259" data-post-id="348259">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="davewil" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/davewil/120/36706_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  davewil
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Can definitely be tidied up and simplified, but still exploring different ways to solve a problem in Elixir</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Aoc2024.Day3 do
  def part_1(input) do
    ~r/mul\((\d{1,3}),(\d{1,3})\)/
      |&gt; Regex.scan(input, capture: :all_but_first)
      |&gt; Enum.reduce(0, fn [a, b], acc -&gt; acc + (String.to_integer(a) * String.to_integer(b)) end)
  end

  def part_2(input) do
    ~r/mul\((\d{1,3}),(\d{1,3})\)|don't\(\)|do\(\)/
      |&gt; Regex.scan(input)
      |&gt; Enum.reduce({:enabled, 0}, fn row, acc -&gt;
        case process(row) do
          :enabled -&gt;
            {:enabled, elem(acc, 1)}
          :disabled -&gt; 
            {:disabled, elem(acc, 1)}
          x -&gt;
            case elem(acc, 0) do
              :disabled -&gt;
                {:disabled, elem(acc, 1)}
              :enabled -&gt;
                {:enabled, x + elem(acc, 1)}
            end
        end
      end)    
  end

  def process(row) when is_list(row) and length(row) == 1 do
    case row do
      ["don't()"] -&gt;
        :disabled
      ["do()"] -&gt;
        :enabled
    end
  end

  def process(row) when is_list(row) and length(row) == 3 do
    [_ | rest] = row
    rest
    |&gt; Enum.map(&amp;String.to_integer/1)
    |&gt; Enum.product()
  end  
end
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="348259" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/advent-of-code-2024-day-3/67837/32">Post #31</a>
	                </div>
	            </div>
              <div id="likers-container-348259" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="348259"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #31"></div>
  </section>
</div>
    <div class="postbit" id="348260" data-post-id="348260">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="donaldww" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/donaldww/120/21623_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  donaldww
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<pre data-code-wrap="elixir"><code class="lang-elixir">#!/usr/bin/env elixir

defmodule Day3 do
  def run(test_file) do
    list = File.read!(test_file)
    IO.puts("Total Product Sum: #{total_product_sum(list)}")
    IO.puts("Total Processed Sum: #{total_processed_sum(list)}")
  end

  def total_product_sum(list) do
    regex = ~r/mul\((\d+),(\d+)\)/

    list
    |&gt; extract_phrases(regex)
    |&gt; Stream.map(&amp;extract_numbers_product/1)
    |&gt; Stream.map(fn {a, b} -&gt; a * b end)
    |&gt; Enum.sum()
  end

  def total_processed_sum(list) do
    regex = ~r/(do\(\)|don't\(\)|mul\((\d+),(\d+)\))/

    list
    |&gt; extract_phrases(regex)
    |&gt; process_phrases()
    |&gt; Stream.map(fn {a, b} -&gt; a * b end)
    |&gt; Enum.sum()
  end

  defp extract_phrases(content, regex), do: Regex.scan(regex, content)

  defp extract_numbers_product([_, a, b]), do: {String.to_integer(a), String.to_integer(b)}

  defp process_phrases(phrases) do
    Enum.reduce(phrases, {true, []}, fn
      # Enable mul instructions
      ["do()", _], {_, acc} -&gt;
        {true, acc}

      # Disable mul instructions
      ["don't()", _], {_, acc} -&gt;
        {false, acc}

      # Handle mul(a,b) when mul is enabled
      ["mul(" &lt;&gt; _, _, a, b], {true, acc} when a != nil and b != nil -&gt;
        {true, [{String.to_integer(a), String.to_integer(b)} | acc]}

      # Handle mul(a,b) when mul is disabled (ignore)
      ["mul(" &lt;&gt; _, _, _, _], {false, acc} -&gt;
        {false, acc}

      _, acc -&gt;
        acc
    end)
    |&gt; elem(1)
  end
end

Day3.run("./testdata.txt")

</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="348260" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/advent-of-code-2024-day-3/67837/33">Post #32</a>
	                </div>
	            </div>
              <div id="likers-container-348260" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="348260"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #32"></div>
  </section>
</div>
    <div class="postbit" id="348269" data-post-id="348269">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="rySeeR" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  rySeeR
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have been <em>naughty</em> and just ran eval string on every mul(x,y) I collected</p>
<p><a href="https://github.com/jbonet/advent_of_code_2024/blob/main/lib/advent_of_code_2024/days/03.ex" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/jbonet/advent_of_code_2024/blob/main/lib/advent_of_code_2024/days/03.ex</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="348269" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/advent-of-code-2024-day-3/67837/34">Post #33</a>
	                </div>
	            </div>
              <div id="likers-container-348269" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="348269"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #33"></div>
  </section>
</div>
    <div class="postbit" id="348273" data-post-id="348273">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="code-shoily" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/code-shoily/120/8052_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  code-shoily
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>First time posting here I see. What an entry!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="348273" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/advent-of-code-2024-day-3/67837/35">Post #34</a>
	                </div>
	            </div>
              <div id="likers-container-348273" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="348273"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #34"></div>
  </section>
</div>
    <div class="postbit" id="348275" data-post-id="348275">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="billylanchantin" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/billylanchantin/120/28428_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  billylanchantin
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Approach: regex + code eval:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Aoc2024.Day03 do
  def part1(file) do
    Regex.scan(~r/mul\(\d+,\d+\)/, File.read!(file))
    |&gt; Enum.reduce(0, fn [code], sum -&gt; sum + eval(code) end)
  end

  def part2(file) do
    Regex.scan(~r/don't\(\)|do\(\)|mul\(\d+,\d+\)/, File.read!(file))
    |&gt; Enum.reduce({0, true}, fn
      ["do" &lt;&gt; rest], {sum, _} -&gt; {sum, rest == "()"}
      [code], {sum, add?} -&gt; {sum + ((add? &amp;&amp; eval(code)) || 0), add?}
    end)
    |&gt; then(&amp;elem(&amp;1, 0))
  end

  def eval(code), do: elem(Code.eval_string("Aoc2024.Day03." &lt;&gt; code, [], __ENV__), 0)
  def mul(a, b), do: a * b
end
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="348275" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/advent-of-code-2024-day-3/67837/36">Post #35</a>
	                </div>
	            </div>
              <div id="likers-container-348275" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="348275"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #35"></div>
  </section>
</div>
    <div class="postbit" id="348289" data-post-id="348289">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="billylanchantin" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/billylanchantin/120/28428_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  billylanchantin
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="billylanchantin" data-post="36" data-topic="67837">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/billylanchantin/48/28428_2.png" class="avatar"> billylanchantin:</div>
<blockquote>
<p><code>|&gt; then(&amp;elem(&amp;1, 0))</code></p>
</blockquote>
</aside>
<p><img src="https://forum.elixirforum.com/images/emoji/apple/man_facepalming.png?v=15" title=":man_facepalming:" class="emoji only-emoji" alt=":man_facepalming:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="348289" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/advent-of-code-2024-day-3/67837/37">Post #36</a>
	                </div>
	            </div>
              <div id="likers-container-348289" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="348289"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #36"></div>
  </section>
</div>
    <div class="postbit" id="348301" data-post-id="348301">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="billylanchantin" data-post="36" data-topic="67837">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/billylanchantin/48/28428_2.png" class="avatar"> billylanchantin:</div>
<blockquote>
<p><code>|&gt; then(&amp;elem(&amp;1, 0))</code></p>
</blockquote>
</aside>
<p>Yeah, I always refactor those to (f.ex. for a tri-tuple):</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">|&gt; then(fn {x, _y, _z} -&gt; x end)
</code></pre>
<p>It’s just clearer and easier to read.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="348301" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/advent-of-code-2024-day-3/67837/38">Post #37</a>
	                </div>
	            </div>
              <div id="likers-container-348301" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="348301"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #37"></div>
  </section>
</div>
    <div class="postbit" id="348306" data-post-id="348306">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="billylanchantin" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/billylanchantin/120/28428_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  billylanchantin
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Ha yeah I actually did the opposite here. I was actually refactoring <code>|&gt; then(fn {sum, _} -&gt; sum end)</code> (which I also prefer for readability) to be shorter. Only after I posted did I see what I’d done.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="348306" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/advent-of-code-2024-day-3/67837/39">Post #38</a>
	                </div>
	            </div>
              <div id="likers-container-348306" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="348306"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #38"></div>
  </section>
</div>
    <div class="postbit" id="348307" data-post-id="348307">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="pehbehbeh" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/pehbehbeh/120/32778_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  pehbehbeh
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Wanted to try out something new and used <a href="https://hexdocs.pm/nimble_parsec/NimbleParsec.html" rel="noopener nofollow ugc">nimble_parsec</a> for the first time.</p>
<p><a href="https://github.com/pehbehbeh/adventofcode/blob/main/2024/03.livemd" class="onebox" target="_blank" rel="noopener nofollow ugc">https://github.com/pehbehbeh/adventofcode/blob/main/2024/03.livemd</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="348307" data-batch-url="/posts/batch_likers">
                        5
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/advent-of-code-2024-day-3/67837/40">Post #39</a>
	                </div>
	            </div>
              <div id="likers-container-348307" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="348307"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #39"></div>
  </section>
</div>
    <div class="postbit" id="348309" data-post-id="348309">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="billylanchantin" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/billylanchantin/120/28428_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  billylanchantin
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Ok I’m giving myself <em>one</em> resubmit for golfing.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Aoc2024.Day03 do
  def part1(file), do: sum(file, ~r/mul\((\d+),(\d+)\)/)
  def part2(file), do: sum(file, ~r/don't\(\)|do\(\)|mul\((\d+),(\d+)\)/)

  def sum(file, regex) do
    Regex.scan(regex, File.read!(file))
    |&gt; Enum.reduce({0, true}, fn
      ["do" &lt;&gt; rest], {s, _} -&gt; {s, rest == "()"}
      [_, a, b], {s, add?} -&gt; {s + ((add? &amp;&amp; elem(Code.eval_string("#{a}*#{b}"), 0)) || 0), add?}
    end)
    |&gt; elem(0)
  end
end
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="348309" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/advent-of-code-2024-day-3/67837/41">Post #40</a>
	                </div>
	            </div>
              <div id="likers-container-348309" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="348309"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #40"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/67837/load_more?page=5">Load more posts (17 remaining)</a>
</div></template></turbo-stream>