Advent of code 2020 - Day 25

Thanks a lot, I learned a lot by reading your solutions and all !

Merry Xmas !

defmodule AOC.D25 do
  import AOC.Helper.Input

  def run1(test \\ false) do
    [cpubk, dpubk] =
      get_input("D25", test)
      |> split_input()
      |> Enum.map(&String.to_integer/1)

    transforms(cpubk, 7, 1, 1)
    |> encryption_key(0, dpubk, 1)
  end

  def run2() do
    "Merry Xmas !"
  end

  def encryption_key(lsize, count, _subject, value) when lsize == count, do: value

  def encryption_key(lsize, count, subject, value) do
    encryption_key(lsize, count + 1, subject, rem(value * subject, 20_201_227))
  end

  def transforms(pubkey, _subject, lsize, value) when pubkey == value, do: lsize - 1

  def transforms(pubkey, subject, lsize, value) do
    transforms(pubkey, subject, lsize + 1, rem(value * subject, 20_201_227))
  end
end