Powered by AppSignal & Oban Pro

Habitación 5: Rangos y Sumatorias

space_station/solutions/06.livemd

Habitación 5: Rangos y Sumatorias

Mix.install([
  {:explorer, "~> 0.11.1"},
  {:kino, "~> 0.19.0"},
  {:kino_explorer, "~> 0.1.25"},
  {:kino_vega_lite, "~> 0.1.13"},
  {:helpers, path: Path.expand("../helpers", __DIR__)}
])

defmodule Room do
  require Explorer.DataFrame, as: DF

  def verify(answer) do
    case answer do
      500500 -> Helpers.Messages.correct(
            "07.livemd",
            "¡Muy bien!, Es el valor buscado."
        )

      _ -> Helpers.Messages.error(
            "No es la respuesta correcta. Inténtalo nuevamente."
        )
    end
    |> Kino.Markdown.new()
  end
end

Contexto

Frente a ti, una compuerta metálica de alta seguridad se mantiene cerrada 🔒.

En su pantalla, un mensaje parpadea sin cesar:

> 🧮 Ingresa la suma correcta de la secuencia del 1 al 1000 para desbloquear el sistema.

Desafío de la habitación

Asigna los valores correspondientes a las variables a y b.

💡¿Cómo se hacen los rangos y sumatorias en Elixir?

Rangos

Los rangos (range) en Elixir se pueden crear utilizando los dos puntos .. entre dos números. Representan una secuencia de cero, uno o muchos enteros, ya sea en orden ascendente o descendente, con una diferencia común llamada paso (step).

La forma más común de crear y hacer coincidencia (matching) con rangos es mediante las notaciones primero..último y primero..último//paso, que se importan automáticamente desde Kernel.

Ejemplos

1..5
# 1, 2, 3, 4, 5
5..1
# 5, 4, 3, 2, 1
1..10//2
# 1, 3, 5, 7, 9
10..1//-3
# 10, 7, 4, 1

Donde:

  • 1..5 → rango ascendente.
  • 5..1 → rango descendente.
  • 1..10//2 → avanza de 2 en 2.
  • 10..1//-3 → retrocede de 3 en 3.

Sumatorias

Para realizar una sumatoria de números en una lista se utiliza Enum.sum:

numeros =
    [1, 2, 3]
    |> Enum.sum()

Establece tu respuesta

a = 1
b = 1000
respuesta =
    a..b
    |> Enum.sum()

Verifica tu respuesta

Room.verify(respuesta)