-module(rock_paper_scissors). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([play/2]). -export_type([move/0, game_result/0]). -type move() :: rock | paper | scissors. -type game_result() :: {player1_wins, move(), move()} | {player2_wins, move(), move()} | {draw, move()}. -file("/Users/bradleymehder/Developer/Frameworks/Gleam/playground/src/rock_paper_scissors.gleam", 26). -spec move_to_string(move()) -> binary(). move_to_string(Move) -> case Move of rock -> <<"Rock"/utf8>>; paper -> <<"Paper"/utf8>>; scissors -> <<"Scissors"/utf8>> end. -file("/Users/bradleymehder/Developer/Frameworks/Gleam/playground/src/rock_paper_scissors.gleam", 34). -spec game_result_to_string(game_result()) -> binary(). game_result_to_string(Result) -> case Result of {player1_wins, Threw, Beat} -> <<<<<<"Player 1 won - "/utf8, (move_to_string(Threw))/binary>>/binary, " beats "/utf8>>/binary, (move_to_string(Beat))/binary>>; {player2_wins, Threw@1, Beat@1} -> <<<<<<"Player 2 won - "/utf8, (move_to_string(Threw@1))/binary>>/binary, " beats "/utf8>>/binary, (move_to_string(Beat@1))/binary>>; {draw, Move} -> <<<<"Draw! Both players chose "/utf8, (move_to_string(Move))/binary>>/binary, "s"/utf8>> end. -file("/Users/bradleymehder/Developer/Frameworks/Gleam/playground/src/rock_paper_scissors.gleam", 13). -spec play(move(), move()) -> binary(). play(Player_1_move, Player_2_move) -> _pipe = case {Player_1_move, Player_2_move} of {rock, scissors} -> {player1_wins, rock, scissors}; {rock, paper} -> {player2_wins, paper, rock}; {paper, rock} -> {player1_wins, rock, paper}; {paper, scissors} -> {player2_wins, scissors, paper}; {scissors, rock} -> {player2_wins, rock, scissors}; {scissors, paper} -> {player1_wins, scissors, paper}; {_, _} -> {draw, Player_1_move} end, game_result_to_string(_pipe).