Skip to content

Latest commit

 

History

History
155 lines (116 loc) · 2.62 KB

017-carrera.livemd

File metadata and controls

155 lines (116 loc) · 2.62 KB

17 - Carrera de Obstáculos

LA CARRERA DE OBSTÁCULOS

Enunciado

Crea una función que evalúe si un/a atleta ha superado correctamente una carrera de obstáculos.

  • La función recibirá dos parámetros:

    • Un array que sólo puede contener String con las palabras "run" o "jump"
    • Un String que represente la pista y sólo puede contener "_" (suelo) o "|" (valla)
  • La función imprimirá cómo ha finalizado la carrera:

    • Si el/a atleta hace "run" en "_" (suelo) y "jump" en "|" (valla) será correcto y no variará el símbolo de esa parte de la pista.
    • Si hace "jump" en "_" (suelo), se variará la pista por "x".
    • Si hace "run" en "|" (valla), se variará la pista por "/".
  • La función retornará un Boolean que indique si ha superado la carrera. Para ello tiene que realizar la opción correcta en cada tramo de la pista.

Solución

defmodule Runner do
  def check("run", "_") do
    "_"
  end

  def check("jump", "|") do
    "|"
  end

  def check("run", _) do
    "x"
  end

  def check("jump", _) do
    "/"
  end

  def run(steps, stage) do
    blocks = String.graphemes(stage)

    course =
      steps
      |> Enum.with_index()
      |> Enum.map(fn {step, index} ->
        check(step, Enum.at(blocks, index))
      end)
      |> Enum.join()

    course == stage
  end
end
{:module, Runner, <<70, 79, 82, 49, 0, 0, 9, ...>>, {:run, 2}}
defmodule Athlete do
  def run() do
    "run"
  end

  def jump() do
    "jump"
  end
end
{:module, Athlete, <<70, 79, 82, 49, 0, 0, 6, ...>>, {:jump, 0}}
defmodule Solution do
  def run(steps, stage) do
    Runner.run(steps, stage)
  end
end
{:module, Solution, <<70, 79, 82, 49, 0, 0, 6, ...>>, {:run, 2}}
Solution.run(
  [
    Athlete.run(),
    Athlete.jump(),
    Athlete.run(),
    Athlete.jump(),
    Athlete.run(),
    Athlete.run(),
    Athlete.run()
  ],
  "_|_|___"
)
true
Solution.run(["run", "jump"], "_|")
true
Solution.run(["run", "jump", "run"], "_")
false
Solution.run(["run", "jump", "run"], "_|")
false