Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Measurements

measurements.livemd

Measurements

Mix.install([
  {:kino, github: "livebook-dev/kino", override: true},
  {:kino_lab, "~> 0.1.0-dev", github: "jonatanklosko/kino_lab"},
  {:vega_lite, "~> 0.1.4"},
  {:kino_vega_lite, "~> 0.1.1"},
  {:benchee, "~> 0.1"},
  {:ecto, "~> 3.7"},
  {:math, "~> 0.7.0"},
  {:faker, "~> 0.17.0"},
  {:utils, path: "#{__DIR__}/../utils"},
  {:tested_cell, git: "https://github.com/BrooklinJazz/tested_cell"}
])

Navigation

Return Home Report An Issue

Measurements

You are going to make a utility module for working with measurements.

increased/1

Given a list of measurements as integers, determine how many have increased. Each positive change since the previous integer in the list should count as an increase.

For example:

Measurements.increased([1, 1, 2, 3, 1])
2

Measurements.increased([1, 2, 1])
1

Measurements.increased([3, 1, 2])
1

increased_by/1

Given a list of measurements as integers, sum the amount they have increased by.

For example:

Measurements.increased_by([100, 150, 120, 130])
60

Measurements.increased_by([10, 20, 10, 40])
40

increments/1

Given a list of measurements as integers, determine the increment between each integer.

For example:

Measurements.increments([100, 150, 120, 130])
[50, -30, 10]

Measurements.increments([10, 20, 10, 40])
[10, -10, 30]

average/1

Find the average of a list of numbers. You can calculate average as $\frac{sum}{length}$.

For example:

Measurements.average([4, 5, 6])
5

Measurements.average([2, 10])
6
ExUnit.start(auto_run: false)

defmodule Assertion do
  use ExUnit.Case

  test "" do
    defmodule Measurements do
      def increments(measurements) do
      end

      def increased(measurements) do
      end

      def increased_by(measurements) do
      end

      def average(measurements) do
      end
    end

    defmodule Solutions.Measurements do
      def increments(measurements) do
        measurements
        |> Enum.chunk_every(2, 1, :discard)
        |> Enum.map(fn [x, y] -> y - x end)
      end

      def increased(measurements) do
        measurements
        |> increments()
        |> Enum.count(&(&1 > 0))
      end

      def increased_by(measurements) do
        measurements
        |> increments()
        |> Enum.filter(&(&1 > 0))
        |> Enum.sum()
      end

      def average(measurements) do
        Enum.sum(measurements) / Enum.count(measurements)
      end
    end

    list = Utils.Factory.integers()

    assert Measurements.increased([1, 1]), "Implement the `increased` function."
    assert Measurements.increased([1, 2, 1]) == 1
    assert Measurements.increased([3, 1, 2]) == 1, "Ensure you count each positive change."
    assert Measurements.increased([1, 1, 2, 3, 1]) == 2

    assert Measurements.increased(list) == Solutions.Measurements.increased(list),
           "`increased/1 failed when called with #{inspect(list)}"

    assert Measurements.increased_by([1, 1]), "Implement the `increased_by` function."
    assert Measurements.increased_by([100, 150, 120, 130]) == 60
    assert Measurements.increased_by([10, 20, 10, 40]) == 40

    assert Measurements.increased_by(list) == Solutions.Measurements.increased_by(list),
           "`increased_by/1 failed when called with #{inspect(list)}"

    assert Measurements.increments([1, 2]), "Implement the `increments` function."
    assert Measurements.increments([100, 150, 120, 130]) == [50, -30, 10]
    assert Measurements.increments([10, 20, 10, 40]) == [10, -10, 30]

    assert Measurements.increments(list) == Solutions.Measurements.increments(list),
           "`increments/1 failed when called with #{inspect(list)}"

    assert Measurements.average([1, 1]), "Implement the `average` function."
    assert Measurements.average([4, 5, 6]) == 5
    assert Measurements.average([2, 10]) == 6

    assert Measurements.average(list) == Solutions.Measurements.average(list),
           "`increments/1 failed when called with #{inspect(list)}"
  end
end

ExUnit.run()

# Make variables and modules defined in the test available.
# Also allows for exploration using the output of the cell.
defmodule Measurements do
  def increments(measurements) do
  end

  def increased(measurements) do
  end

  def increased_by(measurements) do
  end

  def average(measurements) do
  end
end

Commit Your Progress

Run the following in your command line from the project folder to track and save your progress in a Git commit.

$ git add .
$ git commit -m "finish measurements exercise"