From b9d31bafb610d0e9da30cc2e44239f6c6d9566a3 Mon Sep 17 00:00:00 2001 From: Ishir Garg Date: Fri, 12 Apr 2024 04:27:16 -0700 Subject: [PATCH] Added blanket implementations for utility traits --- src/game/mod.rs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/game/mod.rs b/src/game/mod.rs index 6a89a4a..97be225 100644 --- a/src/game/mod.rs +++ b/src/game/mod.rs @@ -350,16 +350,29 @@ where G: SimpleSum, { fn utility(&self, state: State) -> [Utility; N] { - todo!() + SimpleSum::utility(self, state).map(|x| x as Utility) } } impl SimpleSum<2> for G where - G: ClassicGame, + G: ClassicGame + Extensive<2>, { fn utility(&self, state: State) -> [SimpleUtility; 2] { - todo!() + let player_utility = ClassicGame::utility(self, state); + let other_player_utility = match player_utility { + SimpleUtility::WIN => SimpleUtility::LOSE, + SimpleUtility::LOSE => SimpleUtility::WIN, + SimpleUtility::TIE => SimpleUtility::TIE, + SimpleUtility::DRAW => SimpleUtility::DRAW, + }; + + if Extensive::turn(self, state) == 0 { + [player_utility, other_player_utility] + } + else { + [other_player_utility, player_utility] + } } } @@ -368,6 +381,6 @@ where G: ClassicPuzzle, { fn utility(&self, state: State) -> [SimpleUtility; 1] { - todo!() + [ClassicPuzzle::utility(self, state)] } }