-
-
Save petros/5659061fbaa406a6b55508e56e555663 to your computer and use it in GitHub Desktop.
Remote Control Car - Elixir - Exercism
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment