import random
import math

M0 = 1000
M_new = 500

def p(D):
    #return 1./(1. + 10**(-D/400))
    #return 0.5
    if D < -1:
        return 0
    return (0.5*(D+1))**0.25

def match(u1,u2): #u1 et u2 ne sont pas encore amis. Attention !!! pas de commit
    D = (u1.score - u2.score)/M0
    won = False
    #fonction de gain asymétrique. Si tu es nullissime et que tu contactes le Boss tu peux augmenter ta masse jusqu'à 20%
    if random.random() < p(D): #i won the game
        u1.score *= 1+0.2*0.5*(1-D**3)/(D+2)**2
        u2.score *= 1+0.15*0.5*(1+D**3)/(D+2)**2
        won = True
    else:
        u1.score *= 1-0.9*0.5*(1-D**3)/(D+2)**2 #Ici une version très punitive en cas d'invitation déclinéee, qui donne un skew différent
        u2.score *= 1
    return won

def update(u1,u2): #u1 et u2 sont deja amis. Ca impacte leurs scores avec le temps, comme chacun évolue.
    # Attention !!! pas de commit
    D = (u1.score - u2.score)/1000
    won = False
    if random.random() < 1.: #i gagne toujours car connexion existe
        u1.score *= 1+0.018*0.5*(1-D**3)/(D+2)**2
        u2.score *= 1+0.02*0.5*(1+D**3)/(D+2)**2 #plus de raison d'avoir une asymétrie
        won = True
    return won
