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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Aoc.Y2020.D2 do
  use Aoc.Boilerplate,
    transform: fn raw -&gt;
      raw
      |&gt; String.split("\n")
      |&gt; Enum.map(fn line -&gt;
        [rules, password] = line |&gt; String.split(": ")
        [occurance, letter] = rules |&gt; String.split(" ")
        [min, max] = occurance |&gt; String.split("-")

        {password, String.to_integer(min), String.to_integer(max), letter}
      end)
    end

  def part1(input \\ processed()) do
    input
    |&gt; Enum.reduce(0, fn {password, min, max, letter}, valid_passwords -&gt;
      if valid_password?(password, min, max, letter) do
        valid_passwords + 1
      else
        valid_passwords
      end
    end)
  end

  def part2(input \\ processed()) do
    input
    |&gt; Enum.reduce(0, fn {password, position1, position2, letter}, valid_passwords -&gt;
      if valid_toboggan_password?(password, position1, position2, letter) do
        valid_passwords + 1
      else
        valid_passwords
      end
    end)
  end

  @doc """
    Validates the password based on rules.
    Uses a regex, for example `~r/^([^a]*a){1,3}[^a]*$/`
    ^     Start of string
    (     Start of group
    [^a]* Any character except `a`, zero or more times
    a     our character `a`
    ){1,3} End and repeat the group 1 to 3 times
    [^a]* Any character except `a`, zero or more times again
    $     End of string
    Examples:
      iex&gt; Aoc.Y2020.D2.valid_password?("aabbcc", 1, 2, "a")
      true
      iex&gt; Aoc.Y2020.D2.valid_password?("aaabbcc", 1, 2, "a")
      false
  """
  def valid_password?(password, min, max, letter) do
    Regex.match?(~r/^([^#{letter}]*#{letter}){#{min},#{max}}[^#{letter}]*$/, password)
  end

  @doc """
    Validates the password based on Toboggan rule.
    Examples:
      iex&gt; Aoc.Y2020.D2.valid_toboggan_password?("aabbcc", 1, 3, "a")
      true
      iex&gt; Aoc.Y2020.D2.valid_toboggan_password?("aaabbcc", 1, 2, "a")
      false
  """
  def valid_toboggan_password?(password, position1, position2, letter) do
    letter1 = String.at(password, position1 - 1)
    letter2 = String.at(password, position2 - 1)

    (letter1 == letter || letter2 == letter) &amp;&amp; letter1 != letter2
  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="196141" 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-2020-day-2/35931/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-196141" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="196141"
                     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="196142" data-post-id="196142">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Short solution part 1:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">File.stream!("input")
|&gt; Stream.filter(fn str -&gt;
  [_, min, max, char, pass] = Regex.run(~r/^(\d+)-(\d+) (.): (\S+)/, str)
  count = String.graphemes(pass) |&gt; Enum.frequencies() |&gt; Map.get(char, 0)
  count &gt;= String.to_integer(min) &amp;&amp; count &lt;= String.to_integer(max)
end)
|&gt; Enum.count()
|&gt; IO.puts()

</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="196142" 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-2020-day-2/35931/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-196142" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="196142"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-most-liked cat-most-liked" title="One of the top 3 liked posts in this thread!"></div>
  </section>
</div>
    <div class="postbit" id="196144" data-post-id="196144">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Short solution part 2:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">true_one = &amp;if String.at(&amp;1, String.to_integer(&amp;2) - 1) == &amp;3, do: 1, else: 0

File.stream!("input")
|&gt; Enum.count(fn str -&gt;
  [_, p1, p2, char, pass] = Regex.run(~r/^(\d+)-(\d+) (.): (\S+)/, str)
  true_one.(pass, p1, char) + true_one.(pass, p2, char) == 1
end)
|&gt; IO.puts()
</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="196144" 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-2020-day-2/35931/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-196144" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="196144"
                     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 #13"></div>
  </section>
</div>
    <div class="postbit" id="196151" data-post-id="196151">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>My solution:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule AdventOfCode.DayTwo do
  def validate_1(path) do
    path
    |&gt; read_file()
    |&gt; String.split("\r\n", trim: true)
    |&gt; Enum.filter(&amp;process_input_1/1)
    |&gt; Enum.count()
    |&gt; IO.puts()
  end

  def validate_2(path) do
    path
    |&gt; read_file()
    |&gt; String.split("\r\n", trim: true)
    |&gt; Enum.filter(&amp;process_input_2/1)
    |&gt; Enum.count()
    |&gt; IO.puts()
  end

  def process_input_1(input) do
    [spec, password] = String.split(input, ": ")
    [range, key] = String.split(spec, " ")
    [min, max] = String.split(range, "-")
    count = password |&gt; String.graphemes() |&gt; Enum.frequencies() |&gt; Map.get(key, 0)
    count &gt;= String.to_integer(min) &amp;&amp; count &lt;= String.to_integer(max)
  end

  def process_input_2(input) do
    [spec, password] = String.split(input, ": ")
    [range, key] = String.split(spec, " ")
    [min, max] = String.split(range, "-")
    min = String.to_integer(min)
    max = String.to_integer(max)
    letter1 = String.at(password, min - 1)
    letter2 = String.at(password, max - 1)

    (letter1 == key || letter2 == key) &amp;&amp; letter1 != letter2
  end

  def read_file(path) do
    case File.read(path) do
      {:ok, body} -&gt;
          body
      {:error, reason} -&gt;
          reason
    end
  end
end

AdventOfCode.DayTwo.validate_1("input.txt")
AdventOfCode.DayTwo.validate_2("input.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="196151" 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-2020-day-2/35931/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-196151" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="196151"
                     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 #15"></div>
  </section>
</div>
    <div class="postbit" id="196158" data-post-id="196158">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Seems no one stumbled upon <code>:erang.xor</code> <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Event2 do
  def run do
    IO.puts("Test part1: #{part1("input/event2/test.txt")}")
    IO.puts("Puzzle part1: #{part1("input/event2/puzzle.txt")}")
    IO.puts("Test part2: #{part2("input/event2/test.txt")}")
    IO.puts("Puzzle part2: #{part2("input/event2/puzzle.txt")}")
  end

  def part1(path), do: input_stream(path) |&gt; Stream.filter(&amp;filter_fun/1) |&gt; Enum.count()
  def part2(path), do: input_stream(path) |&gt; Stream.filter(&amp;filter_fun2/1) |&gt; Enum.count()

  def input_stream(path), do: path |&gt; File.stream!() |&gt; Stream.map(&amp;parse_input/1)

  def parse_input(input) do
    [low, high, letter, pass] = String.trim(input) |&gt; String.split(~r/[-: ]/, trim: true)
    {String.to_integer(low), String.to_integer(high), letter, pass}
  end

  def filter_fun({low, high, letter, pass}) do
    pass_letter_count = pass |&gt; String.graphemes() |&gt; Enum.count(&amp;(&amp;1 == letter))
    low &lt;= pass_letter_count and pass_letter_count &lt;= high
  end

  def filter_fun2({low, high, letter, pass}),
    do: :erlang.xor(String.at(pass, low - 1) == letter, String.at(pass, high - 1) == letter)
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="196158" data-batch-url="/posts/batch_likers">
                        4
                      </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-2020-day-2/35931/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-196158" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="196158"
                     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 #16"></div>
  </section>
</div>
    <div class="postbit" id="196170" data-post-id="196170">
  <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>Not sure how kosher it is to use an import but this seemed like a good exercise for using a parser library. I really like how easy NimbleParsec is to use.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Day2 do
  import NimbleParsec

  rule =
    integer(min: 1, max: 3)
    |&gt; ignore(string("-"))
    |&gt; integer(min: 1, max: 3)
    |&gt; ignore(string(" "))
    |&gt; ascii_char([?a..?z])
    |&gt; ignore(string(": "))

  defparsec(:pw_parse, rule)

  def pw_check(file, fun) do
    File.stream!(file)
    |&gt; Enum.map(&amp;pw_parse(&amp;1))
    |&gt; Enum.count(&amp;fun.(&amp;1))
  end
end

valid? = fn parsed -&gt;
  case parsed do
    {:ok, [a, b, c], pw, _, _, _} -&gt;
      a..b
      |&gt; Enum.member?(String.to_charlist(pw) |&gt; Enum.count(fn x -&gt; x == c end))

    _ -&gt;
      false
  end
end

valid2? = fn parsed -&gt;
  case parsed do
    {:ok, [a, b, c], pw, _, _, _} -&gt;
      [a - 1, b - 1]
      |&gt; Enum.count(&amp;(Enum.at(String.to_charlist(pw), &amp;1) == c))
      |&gt; Kernel.==(1)

    _ -&gt;
      false
  end
end

IO.inspect(Day2.pw_check("lib/input.txt", valid?))

IO.inspect(Day2.pw_check("lib/input.txt", valid2?))

</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="196170" data-batch-url="/posts/batch_likers">
                        4
                      </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-2020-day-2/35931/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-196170" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="196170"
                     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 #17"></div>
  </section>
</div>
    <div class="postbit" id="196171" data-post-id="196171">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Seems like we all came up with the same solution, more or less <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Aoc2020.Day02 do
  def part1() do
    input_stream("lib/02/input.txt")
    |&gt; Enum.count(fn {policy, password} -&gt; valid_password?(password, policy) end)
    |&gt; IO.inspect(label: "part1")
  end

  def part2() do
    input_stream("lib/02/input.txt")
    |&gt; Enum.count(fn {policy, password} -&gt;
      valid_password2?(password, policy)
    end)
    |&gt; IO.inspect(label: "part2")
  end

  defp input_stream(path) do
    File.stream!(path)
    |&gt; Stream.map(fn line -&gt;
      [policy, password] = String.split(line, ":")
      {parse_policy(policy), String.trim(password)}
    end)
  end

  def parse_policy(policy) do
    [spec, char] = String.split(policy, " ", parts: 2)
    [min, max] = String.split(spec, "-", parts: 2)

    {String.to_integer(min), String.to_integer(max), char}
  end

  def valid_password?(password, {min, max, char}) do
    password
    |&gt; String.graphemes()
    |&gt; Enum.count(fn x -&gt; x === char end)
    |&gt; Kernel.in(min..max)
  end

  @spec valid_password2?(binary, {integer, integer, any}) :: boolean
  def valid_password2?(password, {a, b, char}) do
    xor(String.at(password, a - 1) === char, String.at(password, b - 1) === char)
  end

  defp xor(a, b) when is_boolean(a) and is_boolean(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="196171" 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-2020-day-2/35931/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-196171" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="196171"
                     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 #18"></div>
  </section>
</div>
    <div class="postbit" id="196184" data-post-id="196184">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="hauleth" data-post="11" data-topic="35931">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hauleth/48/18942_2.png" class="avatar"> hauleth:</div>
<blockquote>
<p><code>count = for &lt;&lt;^char &lt;- pass&gt;&gt;, reduce: 0, do: (n -&gt; n + 1)</code></p>
</blockquote>
</aside>
<p>I really like your solutions. Would it be too much too ask if you could explain this syntax a little bit?</p>
<p><code>&lt;&lt;^char &lt;- pass&gt;&gt;</code> is a generator I presume?<br>
<code>for, reduce, do</code> - I remember vaguely it was one of the newer syntax in 1.10 or about but can’t find the docs now.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="196184" 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-2020-day-2/35931/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-196184" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="196184"
                     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 #19"></div>
  </section>
</div>
    <div class="postbit" id="196185" data-post-id="196185">
  <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’ll give it a shot.<br>
<code>&lt;&lt;^char &lt;- pass&gt;&gt;</code> filters the characters from the <code>pass</code> string to match the <code>char</code> which is pinned to avoid reassignment. I confess I’m not sure why the pin is necessary. You can see the docs <a href="https://hexdocs.pm/elixir/Kernel.SpecialForms.html#for/1" rel="noopener nofollow ugc">here</a> about the filtering step. This works because wrapping it in the <code>&lt;&lt; ... &gt;&gt;</code> syntax exposes the bitstring representation of <code>pass</code>.</p>
<blockquote>
<p>Generators can also be used to filter as it removes any value that doesn’t match the pattern on the left side of ← </p>
</blockquote>
<p>The pin operator is discussed <a href="https://hexdocs.pm/elixir/Kernel.SpecialForms.html#%5E/1" rel="noopener nofollow ugc">here</a>.</p>
<p>Hopefully someone more knowledgeable will correct me or explain it better.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="196185" 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-2020-day-2/35931/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-196185" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="196185"
                     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 #20"></div>
  </section>
</div>
    <div class="postbit" id="196186" data-post-id="196186">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Mostly what <a class="mention" href="/u/stevensonmt" rel="nofollow">@stevensonmt</a> said. The pin operator is needed to filter characters, as generator will allow only matches, in other words it is the same as:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">for &lt;&lt;c &lt;- pass&gt;&gt;, match?(^char, c), …
</code></pre>
<p>Which in the end behaves exactly the same as:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">for &lt;&lt;c &lt;- pass&gt;&gt;, char == c, …
</code></pre>
<p>But is shorter and a little bit more confusing definition of such behaviour.</p>
<p>The rest is new, as you have spotted, syntax for defining reduction. In short:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">for item &lt;- generator, reduce: x, do: (n -&gt; …)
</code></pre>
<p>Is the same as:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">Enum.reduce(generator, x, fn item n -&gt; … end)
</code></pre>
<p>So in the end it just count characters that match given byte.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="196186" 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-2020-day-2/35931/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-196186" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="196186"
                     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 #21"></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/35931/load_more?page=3">Load more posts</a>
</div></template></turbo-stream>