Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Day 6 - Tuning Trouble

day06.livemd

Day 6 - Tuning Trouble

Mix.install([{:kino, "~> 0.8.0"}, {:kino_bumblebee, "~> 0.1.0"}, {:exla, "~> 0.4.1"}],
  config: [nx: [default_backend: EXLA.Backend]]
)

Input

input = Kino.Input.textarea("Please insert your input")
message =
  input
  |> Kino.Input.read()

Part 1

defmodule CommProtocol do
  @moduledoc """
  This module implements the elf communication protocol

    ## Examples

      iex> CommProtocol.detect_marker("mjqjpqmgbljsphdztnvjfqwrcgsmlb", 4)
      7

      iex> CommProtocol.detect_marker("bvwbjplbgvbhsrlpgdmjqwftvncz", 4)
      5

      iex> CommProtocol.detect_marker("nppdvjthqldpwncqszvftbrmjlhg", 4)
      6

      iex> CommProtocol.detect_marker("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", 4)
      10

      iex> CommProtocol.detect_marker("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw", 4)
      11

      iex> CommProtocol.detect_marker("mjqjpqmgbljsphdztnvjfqwrcgsmlb", 14)
      19

      iex> CommProtocol.detect_marker("bvwbjplbgvbhsrlpgdmjqwftvncz", 14)
      23

      iex> CommProtocol.detect_marker("nppdvjthqldpwncqszvftbrmjlhg", 14)
      23

      iex> CommProtocol.detect_marker("nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg", 14)
      29

      iex> CommProtocol.detect_marker("zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw", 14)
      26

  """
  def detect_marker(msg, sz) when is_binary(msg), do: detect_marker(String.to_charlist(msg), sz)

  def detect_marker(msg, sz) when is_list(msg) do
    start =
      msg
      |> Enum.chunk_every(sz, 1)
      |> Enum.with_index()
      |> Enum.find(fn {marker, _pos} ->
        length(Enum.uniq(marker)) == sz
      end)
      |> elem(1)

    start + sz
  end
end
CommProtocol.detect_marker(message, 4)

Part 2

CommProtocol.detect_marker(message, 14)