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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve only done part 1 and realized I was trying to be too clever and have to redo the whole thing for part 2. I thought I would be able to basically do a single pass by pattern matching on binaries but it didn’t work out and I just wanted to get an answer.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Day14 do
  @moduledoc """
  Day14 AoC Solutions
  """

  alias AocToolbox.Input

  def input(:test),
    do: """
    O....#....
    O.OO#....#
    .....##...
    OO.#O....O
    .O.....O#.
    O.#..O.#.#
    ..O..#O..O
    .......O..
    #....###..
    #OO..#....
    """
  def input(:real), do: Input.load(__DIR__ &lt;&gt; "/input.txt")

  def solve(1, mode) do
    __MODULE__.Part1.solve(input(mode))
  end

  def solve(2, mode) do
    __MODULE__.Part2.solve(input(mode))
  end

  defmodule Part1 do
    def solve(input) do
      {rock_map, _, max_cols, max_rows} = parse(input)
      IO.inspect({max_cols, max_rows})

      0..(max_cols - 1)
      |&gt; Enum.reduce(rock_map, fn col, r_m -&gt;
        case Map.get(r_m, col) do
          nil -&gt; r_m
          cells -&gt; Map.put(r_m, col, roll_rocks(cells))
        end
      end)
      |&gt; Enum.reduce(0, fn {k, bin}, sum -&gt; sum_bin(bin, max_rows) + sum end)
    end

    defp sum_bin(bin, max_row, acc \\ 0)
    defp sum_bin(&lt;&lt;&gt;&gt;, _, acc), do: acc |&gt; IO.inspect()

    defp sum_bin(&lt;&lt;row::8, 1::8, rest::binary&gt;&gt;, max_row, acc),
      do: sum_bin(rest, max_row, acc + max_row - row)

    defp sum_bin(&lt;&lt;_row::8, 0::8, rest::binary&gt;&gt;, max_row, acc), do: sum_bin(rest, max_row, acc)

    defp roll_rocks(column, roll_to \\ nil, acc \\ &lt;&lt;&gt;&gt;)
    defp roll_rocks(&lt;&lt;&gt;&gt;, _, acc), do: acc
    # no more rocks, if this one can roll it rolls all the way to the to
    defp roll_rocks(&lt;&lt;row::8, roller?::8&gt;&gt;, nil, acc) when roller? == 1,
      do: &lt;&lt;acc::binary, 0, roller?&gt;&gt;

    defp roll_rocks(&lt;&lt;row::8, roller?::8&gt;&gt;, roll_to, acc) when roller? == 1,
      do: &lt;&lt;acc::binary, 1 + roll_to, roller?&gt;&gt;

    # no more rocks but this one cannot roll so it stays put
    defp roll_rocks(&lt;&lt;row::8, roller?::8&gt;&gt;, _, acc), do: &lt;&lt;acc::binary, row, roller?&gt;&gt;

    # top remaining rock can roll up to last rock
    defp roll_rocks(&lt;&lt;_row::8, roller?::8, rest::binary&gt;&gt;, nil, acc)
         when roller? == 1,
         do: roll_rocks(rest, 0, &lt;&lt;acc::binary, 0::8, roller?::8&gt;&gt;)

    defp roll_rocks(&lt;&lt;_row::8, roller?::8, rest::binary&gt;&gt;, roll_to, acc)
         when roller? == 1,
         do: roll_rocks(rest, 1 + roll_to, &lt;&lt;acc::binary, 1 + roll_to::8, roller?::8&gt;&gt;)

    # top remaining rock cannot roll so becomes the next blocker
    defp roll_rocks(&lt;&lt;row::8, 0::8, rest::binary&gt;&gt;, _, acc),
      do: roll_rocks(rest, row, &lt;&lt;acc::binary, row::8, 0::8&gt;&gt;)

    def parse(input) do
      input
      |&gt; String.graphemes()
      |&gt; Enum.reduce({%{}, 0, 0, 0}, fn g, {acc, column, max_column, row} -&gt;
        case g do
          "." -&gt;
            {acc, column + 1, max_column, row}

          "O" -&gt;
            {Map.update(acc, column, &lt;&lt;row, 1&gt;&gt;, fn curr -&gt; &lt;&lt;curr::binary, row, 1&gt;&gt; end),
             column + 1, max_column, row}

          "#" -&gt;
            {Map.update(acc, column, &lt;&lt;row, 0&gt;&gt;, fn curr -&gt; &lt;&lt;curr::binary, row, 0&gt;&gt; end),
             column + 1, max_column, row}

          "\n" -&gt;
            {acc, 0, max(max_column, column), row + 1}
        end
      end)
    end
  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="311762" 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-2023-day-14/60362/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-311762" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="311762"
                     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 #11"></div>
  </section>
</div>
    <div class="postbit" id="311885" data-post-id="311885">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Trying to figure out why my rotation and tilt approach is not ever finding a repeat. Can anyone tell me how many iterations it took them to get the cycle in the example data?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="311885" 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-2023-day-14/60362/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-311885" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="311885"
                     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 #12"></div>
  </section>
</div>
    <div class="postbit" id="311896" data-post-id="311896">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>In the example, the repeating part begins after three cycles, and it is seven cycles long.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="311896" 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-2023-day-14/60362/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-311896" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="311896"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-last-post cat-last-post" title="Last post!"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <span class="all-loaded">— All posts loaded —</span>
</div></template></turbo-stream>