Powered by AppSignal & Oban Pro

Habitación 6: Índices en Lista

space_station/solutions/07.livemd

Habitación 6: Índices en Lista

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
      27.75 -> Helpers.Messages.correct(
            "08.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

Mientras te acercas al núcleo de comunicaciones, detectas un patrón pulsante en la pantalla del sistema cifrado. Es la secuencia de Fibonacci, transmitida como una señal de emergencia desde un satélite perdido hace años 🛰️✨.

Desafío de la habitación

💾 Extrae y analiza ciertas posiciones para encontrar la clave de acceso y así poder avanzar al siguiente nivel.

De la lista de Fibonacci generada, extrae los elementos (números) en los índices 0, 2, 10, -2.

Luego obtén el promedio de los números extraídos.

💡¿Cómo se acceden a elementos de una lista en Elixir?

Para acceder a un elemento se necesita indicar su índice y usar la función Enum.at/2, los índices comienzan desde el valor 0 hasta n - 1 dónde n igual a la cantidad de elementos de la lista.

En Elixir los indices pueden ser también negativos -1, -2, -3, …, -n pero estos se cuentan de derecha a izquierda.

Teniendo la siguiente lista

lista = [1, 2, 3, 4, 5, 6]

Índices positivos:

  • 0 para obtener 1
  • 2 para obtener 3
  • 3 para obtener 4

Índices negativos:

  • -6 para obtener 1
  • -3 para obtener 4
  • -1 para obtener 6

Ejemplo

lista = [1, 2, 3, 4]

Enum.at(lista, 0) # Obtiene valor 1

Enum.at(lista, 3) # Obtiene valor 4

Enum.at(lista, -3) # Obtiene valor 2

Establece tu respuesta

lista_fibonacci = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
promedio = [
    Enum.at(lista_fibonacci, 0),
    Enum.at(lista_fibonacci, 2),
    Enum.at(lista_fibonacci, 10),
    Enum.at(lista_fibonacci, -2)
    ]
alias Explorer.Series

respuesta =
    promedio
    |> Series.from_list()
    |> Series.mean()

Verifica tu respuesta

Room.verify(respuesta)