from typing import List
import numpy as np
from axelrod.action import Action
from axelrod.interaction_utils import compute_final_score
from axelrod.player import Player
from axelrod.strategies.finite_state_machines import FSMPlayer
lllIIlIllIIlIllll, IIlIIIIIlIlIllI = Action.C, Action.D
class IlIlIlIlI(Player):
    lIlIlllIllIIIIIIll = "strategy"
    lIIlIIlIl = {
        "memory_depth": float("inf"),
        "stochastic": True,
        "long_run_time": False,
        "inspects_source": False,
        "manipulates_source": False,
        "manipulates_state": False,
    }
    def __init__(lIlIllIIIlIl):
        super().__init__()
        lIlIllIIIlIl.IlllllIlllII, lIlIllIIIlIl.llIllIIIIIIlI, lIlIllIIIlIl.IlIIIlIlIlIllll, lIlIllIIIlIl.IIIlIIIIl = (
            0,
            0,
            0,
            0,
        )
    def IlllllllIllIllIII(lIlIllIIIlIl, IllllllllIlIlllllIl: Player) -> Action:
        if len(lIlIllIIIlIl.history) >= 2:
            if lIlIllIIIlIl.history[-2] == IIlIIIIIlIlIllI:
                if IllllllllIlIlllllIl.history[-1] == lllIIlIllIIlIllll:
                    lIlIllIIIlIl.IlllllIlllII += 1
                else:
                    lIlIllIIIlIl.llIllIIIIIIlI += 1
            else:
                if IllllllllIlIlllllIl.history[-1] == lllIIlIllIIlIllll:
                    lIlIllIIIlIl.IIIlIIIIl += 1
                else:
                    lIlIllIIIlIl.IlIIIlIlIlIllll += 1
        if len(lIlIllIIIlIl.history) > 26:
            if lIlIllIIIlIl.IlllllIlllII >= (
                lIlIllIIIlIl.IlllllIlllII + lIlIllIIIlIl.llIllIIIIIIlI
            ) / 2 - 0.75 * np.sqrt(
                lIlIllIIIlIl.IlllllIlllII + lIlIllIIIlIl.llIllIIIIIIlI
            ) and lIlIllIIIlIl.IlIIIlIlIlIllll >= (
                lIlIllIIIlIl.IlIIIlIlIlIllll + lIlIllIIIlIl.IIIlIIIIl
            ) / 2 - 0.75 * np.sqrt(
                lIlIllIIIlIl.IlIIIlIlIlIllll + lIlIllIIIlIl.IIIlIIIIl
            ):
                return IIlIIIIIlIlIllI
        lIIlIlIIII, llllIIIllIIlI, lIIlIIIllIllll = lllIIlIllIIlIllll, lllIIlIllIIlIllll, lllIIlIllIIlIllll
        if len(IllllllllIlIlllllIl.history) >= 1:
            lIIlIlIIII = IllllllllIlIlllllIl.history[-1]
        if len(IllllllllIlIlllllIl.history) >= 2:
            llllIIIllIIlI = IllllllllIlIlllllIl.history[-2]
        if len(IllllllllIlIlllllIl.history) >= 3:
            lIIlIIIllIllll = IllllllllIlIlllllIl.history[-3]
        if lIIlIlIIII == llllIIIllIIlI and llllIIIllIIlI == lIIlIIIllIllll:
            return lIIlIlIIII
        lIIIIIIIlllllIllll = lIlIllIIIlIl._random.random()  
        if lIIlIlIIII == llllIIIllIIlI:
            if lIIIIIIIlllllIllll < 0.9:
                return lIIlIlIIII
            else:
                return lIIlIlIIII.flip()
        if lIIlIlIIII == lllIIlIllIIlIllll:
            if lIIIIIIIlllllIllll < 0.7:
                return lIIlIlIIII
            else:
                return lIIlIlIIII.flip()
        if lIIlIlIIII == IIlIIIIIlIlIllI:
            if lIIIIIIIlllllIllll < 0.6:
                return lIIlIlIIII
            else:
                return lIIlIlIIII.flip()