On se retrouve aujourd'hui pour la solution du précédent #KataOfTheWeek proposé par Nicolas en début de semaine !
J'espère que vous avez trouvé une solution dans le langage de votre choix. Voici la mienne en javascript.
const cleanSet = partie => ({P1:{...partie.P1,J:0,X:0},P2:{...partie.P2,J:0,X:0}});
const cleanGame = partie => ({P1:{...partie.P1,X:0},P2:{...partie.P2,X:0}});
const setIsWin = partie => {
if ((partie.P1.J > 6)||(partie.P1.J > 5 && (partie.P1.J - partie.P2.J) > 1)) {
return cleanSet({...partie, P1: {...partie.P1, S:partie.P1.S+1}});
} else if ((partie.P2.J > 6)||(partie.P2.J > 5 && (partie.P2.J - partie.P1.J) > 1)) {
return cleanSet({...partie, P2: {...partie.P2, S:partie.P2.S+1}});
}
return partie;
}
const gameIsWin = (partie) => {
let min = 3;
if (partie.P1.J === 6 && partie.P1.J === partie.P2.J) {
min = 6;
}
if (partie.P1.X > min && (partie.P1.X - partie.P2.X) > 1) {
return cleanGame({...partie, P1: {...partie.P1, J:partie.P1.J+1}});
} else if (partie.P2.X > min && (partie.P2.X - partie.P1.X) > 1) {
return cleanGame({...partie, P2: {...partie.P2, J:partie.P2.J+1}});
}
if (min === 3 && partie.P1.X > min && partie.P1.X === partie.P2.X) {
return {P1:{...partie.P1,X:min},P2:{...partie.P2,X:min}};
}
return partie;
}
const printPoints = (x) => {
switch(x) {
case 4: return 'av';
case 3: return '40';
case 2: return '30';
case 1: return '15';
default: return '0';
}
return '0';
}
const printCurrentGame = (partie) => {
if (partie.P1.J === 6 && partie.P1.J === partie.P2.J) {
return `${partie.P1.X}-${partie.P2.X}`;
}
return `${printPoints(partie.P1.X)}-${printPoints(partie.P2.X)}`;
}
const stringifyScore = (stringOfPoints) => {
let partie = {P1:{S:0,J:0,X:0},P2:{S:0,J:0,X:0}};
let current;
for (i in stringOfPoints) {
current = stringOfPoints[i];
if (current === '1') {
partie = {...partie,P1:{...partie.P1,X:((partie.P1.X)+1)}}
} else {
partie = {...partie,P2:{...partie.P2,X:((partie.P2.X)+1)}}
}
partie = setIsWin(gameIsWin(partie));
if (partie.P1.S === 2 || partie.P2.S === 2) {
return `Player ${current} Win !`
}
}
return `${partie.P1.S}-${partie.P2.S} ${partie.P1.J}-${partie.P2.J} ${printCurrentGame(partie)}`
}
A bientôt pour un nouveau #KataOfTheWeek !