defmodule Hexzip.K do @moduledoc false alias Krug.StringUtil def z(w,z) do cond do (j() |> j(w) or z(w) |> j(y())) -> z (j() |> j(z) or z(z) |> j(y())) -> w true -> z(w,z,y(),y(),[]) end end defp z(z,x,k,y,w) do cond do (y >= z(x)) -> w |> w() true -> w(z,x,k,y,w) end end defp w(y,k,z,w,x) do a = y |> k(z) b = k |> k(w) z = y(y,z) w = x(z,w) z(y,k,z,w,z(x,a,b)) end defp y(w,y) do cond do ((y |> b()) >= z(w)) -> y() true -> y |> b() end end defp w(z) do z |> Enum.reverse() end defp x(y,x) do cond do (y |> j(y())) -> x |> b() true -> x end end def j(x,w) do w == x end defp x(y) do "#{y}" |> StringUtil.trim(true) end defp w(x,w) do x |> Enum.at(w) end defp b(b) do b() + b end defp z(w,z,y) do [b(y,z) | w] end defp y() do 0 end defp k(x,w) do x |> w(w) |> x() end defp b() do y() + 1 end defp j() do nil end defp z(z) do z |> length() end defp b(g,h) do [h,g] |> Enum.join() end end