• [^] # Re: En Python bref

    Posté par (Mastodon) . En réponse au message Avent du Code, jour 2. Évalué à 3.

    Sur celui-là, j'ai vachement modélisé au contraire :

    class chifumi(int):
     lose = 1
     draw = 2
     win = 3
     def __init__(self, chifumi):
     self.chifumi = chifumi
     self.chifumi = ~self
     def __invert__(self):
     """~chifumi returns value in [1, 2, 3]"""
     return (self.chifumi % 3) or 3
     def __eq__(self, other):
     return ~self == ~other
     def __lt__(self, other):
     return +self == ~other
     def __gt__(self, other):
     return -self == ~other
     def __neg__(self):
     return ((self.chifumi - 1) % 3) or 3
     def __pos__(self):
     return ((self.chifumi + 1) % 3) or 3
     def __mod__(self, other):
     """score of self against other"""
     if self == other:
     return ~self+3
     if self > other:
     return ~self+6
     return ~self
     def __matmul__(self, other):
     """score when result is self, against other"""
     if ~self == self.win:
     return +other+6
     if ~self == self.lose:
     return -other
     return ~other+3

    Et la résolution est triviale derrière :

    import sys
    input = [l.split(" ") for l in sys.stdin.read().strip().split("\n")]
    values = dict(
     A=chifumi(1),
     B=chifumi(2),
     C=chifumi(3),
     X=chifumi(1),
     Y=chifumi(2),
     Z=chifumi(3),
    )
    score1 = sum(values[me] % values[you] for you, me in input)
    score2 = sum(values[me] @ values[you] for you, me in input)
    print(f"Strategy 1 = {score1}")
    print(f"Strategy 2 = {score2}")
    • Yth.