From dd2265288f47f7327d7026578bf6fe0a9779356e Mon Sep 17 00:00:00 2001 From: GuillaumeSD Date: Wed, 17 Apr 2024 01:36:00 +0200 Subject: [PATCH] fix : improve great move classification --- src/lib/chessCom.ts | 4 +-- src/lib/engine/helpers/moveClassification.ts | 36 +++++++++++++++++--- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/lib/chessCom.ts b/src/lib/chessCom.ts index 5137e33..1fab516 100644 --- a/src/lib/chessCom.ts +++ b/src/lib/chessCom.ts @@ -34,9 +34,7 @@ export const getChessComUserRecentGames = async ( } const gamesToReturn = games - .sort((a, b) => { - return b.end_time - a.end_time; - }) + .sort((a, b) => b.end_time - a.end_time) .slice(0, 50); return gamesToReturn; diff --git a/src/lib/engine/helpers/moveClassification.ts b/src/lib/engine/helpers/moveClassification.ts index bce1b2a..8bb4697 100644 --- a/src/lib/engine/helpers/moveClassification.ts +++ b/src/lib/engine/helpers/moveClassification.ts @@ -147,14 +147,31 @@ const isBrilliantMove = ( ); if (!isPieceSacrifice) return false; - const isNotLosing = isWhiteMove - ? positionWinPercentage >= 50 - : positionWinPercentage <= 50; + if ( + isLosingOrAlternateCompletelyWinning( + positionWinPercentage, + lastPositionAlternativeLineWinPercentage, + isWhiteMove + ) + ) + return false; + + return true; +}; + +const isLosingOrAlternateCompletelyWinning = ( + positionWinPercentage: number, + lastPositionAlternativeLineWinPercentage: number, + isWhiteMove: boolean +): boolean => { + const isLosing = isWhiteMove + ? positionWinPercentage < 45 + : positionWinPercentage > 55; const isAlternateCompletelyWinning = isWhiteMove ? lastPositionAlternativeLineWinPercentage > 70 : lastPositionAlternativeLineWinPercentage < 30; - return isNotLosing && !isAlternateCompletelyWinning; + return isLosing || isAlternateCompletelyWinning; }; const isGreatMove = ( @@ -179,6 +196,15 @@ const isGreatMove = ( ) return false; + if ( + isLosingOrAlternateCompletelyWinning( + positionWinPercentage, + lastPositionAlternativeLineWinPercentage, + isWhiteMove + ) + ) + return false; + const hasChangedGameOutcome = getHasChangedGameOutcome( lastPositionWinPercentage, positionWinPercentage, @@ -217,5 +243,5 @@ const getIsTheOnlyGoodMove = ( const winPercentageDiff = (positionWinPercentage - lastPositionAlternativeLineWinPercentage) * (isWhiteMove ? 1 : -1); - return winPercentageDiff > 5; + return winPercentageDiff > 10; };