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 !