import math


def calcular_rachas(dias):
    rachas_positivas = []
    rachas_negativas = []
    contador_positivas = 0
    contador_negativas = 0

    for dia in dias:
        if dia == 'G':
            contador_positivas += 1
            contador_negativas = 0
        else:
            contador_negativas += 1
            contador_positivas = 0

        if contador_positivas > 1:
            rachas_positivas.append(contador_positivas)
        if contador_negativas > 1:
            rachas_negativas.append(contador_negativas)

    return rachas_positivas, rachas_negativas


def calcular_probabilidad_ultima_racha_bueno(tamaño_ultima_racha_negativa, maxima_racha_negativa, cantidad_maximas_rachas_negativas):
    # Pesos iniciales de prioridad
    prioridad_maxima_racha = tamaño_ultima_racha_negativa * 0.1
    prioridad_cantidad_maximas_rachas = 0.1
    prioridad_promedio_b = 0.1

    # Calcular el factor de corrección para la diferencia entre la última racha y la máxima racha
    factor_correccion = 1 + ((maxima_racha_negativa+10) -
                             tamaño_ultima_racha_negativa) / maxima_racha_negativa

    # Calcular los pesos de cada factor, ajustando la prioridad según el factor de corrección
    peso_maxima_racha = prioridad_maxima_racha * factor_correccion
    peso_cantidad_maximas_rachas = prioridad_cantidad_maximas_rachas * \
        (cantidad_maximas_rachas_negativas - 1) / \
        cantidad_maximas_rachas_negativas
    peso_promedio_b = prioridad_promedio_b * \
        tamaño_ultima_racha_negativa / cantidad_maximas_rachas_negativas

    # Calcular el peso total y la probabilidad
    peso_total = peso_maxima_racha + peso_cantidad_maximas_rachas + peso_promedio_b
    probabilidad_base = 0.5  # Probabilidad base sin considerar rachas negativas
    # Factor de aumento de la probabilidad por cada día "B" adicional en la última racha
    aumento_probabilidad = 0.1
    probabilidad = probabilidad_base + aumento_probabilidad * peso_total

    # Asegurar que la probabilidad no sea mayor que 0.95
    return min(0.95, probabilidad)


# Secuencia de días

#9:30 [15 -10] dias = ['B','G','B','G','B','B','G','B','G','B','G','B','G','G','G','B','G','G','G','G','B','B','B','B','B','G','G','G','B','B','G','B','G','G','B','G','G','B','B','B']
#9:40 [19 -19] dias =[B','B','G','B','B','G','G','B','G','G','B','B','B','B','B','G','G','B','B','B','B','G','B','G','G','G','B','G','G','G','G','G','B','G','B','G','G','B','B','B','B','B','G','G','G','B','B','B','B','B','B','B','G','B','B','G','G','G','G','G','B','G','G','B','B','G','G','G','B','B','G','G','B','B','G','B','B','G','G','G','G','G','G','B','B','G','G','G','G','B','G','B','B','B','G','B','G','G','G','G','B','G','G','G','G','G','G','G','B','G','B','G','G','B','B','G','G','B','B','B','G','G','G','B','B','G','B','G','G','B','G','G','B','G','G','G','G','B','B','G','G','G','B','G','B','B','B','B','G','G','B','B','B','G','G','G','G','G','G','B','B','B']
#10:30  [19 -10] dias = ['B','G','G','B','G','B','G','G','B','G','G','B','B','B','B','B','G','G','B','B','G','B','G','B','B','B','B','G','G','B','G','B','B','G','B','B','G','B','B','B','B','B','G','B','B','G','B','G','G','G','G','G','B','B','B','B','B','G','B','G','B','G','G','G','B','B','G','B','B','G','B','B','G','G','G','G','G','B','G','G','G','B','B','B','B','B','G','G','B','G','B','G','B','G','B','B','B','G','G','B','G','G','G','G','G','B','B','G','B','G','G','B','G','G','B','B','B']
#11:30  [12 -18] dias = ['G','B','G','B','G','B','G','G','G','G','B','G','B','G','G','B','G','G','B','B','G','G','G','B','G','G','G','B','G','G','G','B','B','B','B','G','G','G','G','G','B','G','B','G','G','B','G','G','G','G','G','B','B','G','B','G','B','B','G','G','G','G','G','G','G','G','G','G','G','B','B','B','B','G','B','B','G','B','G','G','G','G','B','B','G','G','B','B','G','G','G','G','G','B','B','G','B','G','G','G','G','B','B','B']
#11:00  [15 -12] dias = ['G','G','B','G','B','B','G','G','B','G','B','B','G','G','G','G','G','G','B','G','B','G','B','G','B','B','G','G','G','B','B','B','G','B','G','G','G','B','G','G','B','G','B','G','B','B','G','G','B','G','G','B','B','B','B','G','G','G','G','G','B','B','G','B','B','B','G','G','G','B','G','B','B','B','G','B','B','B','B','B','G','G','B','G','G','G','G','G','G','B','B','B','B','B','G','G','B','G','B','G','G','G','G','G','G','G','G','B','B','G','G','G','G','B','B','B','G','B','B','B','G','B','G','B','G','G','B','G','G','G','B','B','B']
 
dias = ['B','B','G','B','B','G','G','B','G','G','B','B','B','B','B','G','G','B','B','B','B','G','B','G','G','G','B','G','G','G','G','G','B','G','B','G','G','B','B','B','B','B','G','G','G','B','B','B','B','B','B','B','G','B','B','G','G','G','G','G','B','G','G','B','B','G','G','G','B','B','G','G','B','B','G','B','B','G','G','G','G','G','G','B','B','G','G','G','G','B','G','B','B','B','G','B','G','G','G','G','B','G','G','G','G','G','G','G','B','G','B','G','G','B','B','G','G','B','B','B','G','G','G','B','B','G','B','G','G','B','G','G','B','G','G','G','G','B','B','G','G','G','B','G','B','B','B','B','G','G','B','B','B','G','G','G','G','G','G','B','B','B']

# Calcular rachas
rachas_positivas, rachas_negativas = calcular_rachas(dias)

# Obtener la última racha negativa
ultima_racha_negativa = rachas_negativas[-1] if rachas_negativas else 0

# Calcular la máxima racha negativa y la cantidad de máximas rachas negativas
maxima_racha_negativa = max(rachas_negativas) if rachas_negativas else 0
cantidad_maximas_rachas_negativas = rachas_negativas.count(
    maxima_racha_negativa)

# Verificar si hay una racha de 2 o más días "B" en la secuencia completa de "dias"
if dias[-1] == 'B' and dias[-2] == 'B':
    # Calcular la probabilidad para la última racha negativa
    probabilidad_ultima_racha_bueno = calcular_probabilidad_ultima_racha_bueno(
        ultima_racha_negativa, maxima_racha_negativa, cantidad_maximas_rachas_negativas)

    # Imprimir la probabilidad para la última racha negativa
    # Imprimir la probabilidad para la última racha negativa
    print(
        f"Probabilidad de que el próximo día sea bueno (G) después de una racha de {ultima_racha_negativa} días 'B': {probabilidad_ultima_racha_bueno * 100:.2f}%")
    print(f"Máxima racha negativa: {maxima_racha_negativa}")
    print(
        f"Cantidad de máximas rachas negativas: {cantidad_maximas_rachas_negativas}")

else:
    print("La última secuencia no contiene al menos 2 'B', por lo tanto, no se puede calcular la probabilidad.")
