ποΈDay 16
Tuesday, 23 August 2022 - Day 16 of Exhort August 2022 - Exercism (My Elixir Journey)
Last updated
defmodule Chessboard do
@spec rank_range :: Range.t()
def rank_range, do: 1..8
@spec file_range :: Range.t()
def file_range, do: ?A..?H
@spec ranks :: list(integer())
def ranks, do: Enum.to_list(rank_range())
@spec files :: list(String.t())
def files, do: Enum.map(file_range(), &<<&1>>)
end
defmodule RemoteControlCar do
@enforce_keys [:nickname]
defstruct [:nickname, battery_percentage: 100, distance_driven_in_meters: 0]
@spec new(String.t()) :: struct()
def new(nickname \\ "none") do
%RemoteControlCar{nickname: nickname}
end
@spec display_distance(remote_car :: struct()) :: String.t()
def display_distance(%RemoteControlCar{} = remote_car) do
"#{remote_car.distance_driven_in_meters} meters"
end
@spec display_battery(remote_car :: struct()) :: String.t()
def display_battery(%RemoteControlCar{battery_percentage: 0}), do: "Battery empty"
def display_battery(%RemoteControlCar{} = remote_car),
do: "Battery at #{remote_car.battery_percentage}%"
@spec drive(remote_car :: struct()) :: struct()
def drive(%RemoteControlCar{battery_percentage: 0} = remote_car), do: remote_car
def drive(%RemoteControlCar{} = remote_car) do
%{
remote_car
| battery_percentage: remote_car.battery_percentage - 1,
distance_driven_in_meters: remote_car.distance_driven_in_meters + 20
}
end
end