호두나무 공방/Exercism in Elixir

Need For Speed - Exercism in Elixir

2022. 9. 7. 22:43

문제 보기

간만에 풀어본 개념 문제. 여러 모듈이 주어졌을 때 이들을 aliasimport를 사용하여 적당히 연결하는 문제였다(구현은 이미 되어 있고, 이 코드를 고치지 않은 채 aliasimport만 추가해야 했다). 실제로 작성한 코드는 NeedForSpeed 모듈의 위에 위치한 4줄에 불과하지만, alias에 별칭 주기, import에서 onlyexcept 옵션 사용하기 등 여러 형태를 사용해볼 수 있었다.

defmodule NeedForSpeed do
  # Add missing aliases and imports here.
  alias NeedForSpeed.Race
  alias NeedForSpeed.RemoteControlCar, as: Car

  import IO, only: [puts: 1]
  import IO.ANSI, except: [color: 1]

  # Do not edit the code below.

  def print_race(%Race{} = race) do
    puts("""
    🏁 #{race.title} 🏁
    Status: #{Race.display_status(race)}
    Distance: #{Race.display_distance(race)}

    Contestants:
    """)

    race.cars
    |> Enum.sort_by(&(-1 * &1.distance_driven_in_meters))
    |> Enum.with_index()
    |> Enum.each(fn {car, index} -> print_car(car, index + 1) end)
  end

  defp print_car(%Car{} = car, index) do
    color = color(car)

    puts("""
      #{index}. #{color}#{car.nickname}#{default_color()}
      Distance: #{Car.display_distance(car)}
      Battery: #{Car.display_battery(car)}
    """)
  end

  defp color(%Car{} = car) do
    case car.color do
      :red -> red()
      :blue -> cyan()
      :green -> green()
    end
  end
end

# and some other modules...