import matplotlib.pyplot as plt
import numpy as np

print("\n\nExercice 1\n")

def ppcm(a, b):
    A = [j*a for j in range(1, b +1)]
    B = [j*b for j in range(1, a +1)]
    for m in A:
        if m in B:
            return m

a = 24
b = 36
print(f"le ppcm de {a} et {b} est {ppcm(a, b)}")



print("\n\nExercice 2\n")

M = np.array([[2, -3, -4, 0, 3, 5, 7], [-3, 2, -4, 1, 5, -7, 0]])

def uneSorteDeMoyenne(A):
    l, c = np.shape(A)
    res = np.zeros([l, c])
    for i in range(l):
        for j in range(c):
            res[i, j] = (A[i, j] + A[i, -1 -j])/2
    return res

print(M)
print(uneSorteDeMoyenne(M))



print("\n\nExercice 3\n")

str1 = "engage le jeu que je le gagne"
str2 = "abba"

stg1 = "reverbere"
stg2 = "ebrecher"


def enMiroir(stg):
    stg_sansEspace = ""
    for s in stg:
        if s != " ":
            stg_sansEspace += s
    N = len(stg_sansEspace)
    res = True
    for j in range(N//2):
        if stg_sansEspace[j] != stg_sansEspace[-1 -j]:
            res = False
            print(stg_sansEspace[j], stg_sansEspace[-1 -j])
    return res


print(enMiroir(str1), f"pour {str1}")
print(enMiroir(str2), f"pour {str2}")
print(enMiroir("abscba"), "pour abscba")


def echange(stg, s1, s2):
    res = stg
    N = len(stg)
    for j in range(N -2):
        if stg[j] == s1 and stg[j +2] == s2:
            res = res[:j] + s2 + res[j +1] + s1 + res[j +3:]
    return res

print(echange(stg1, "r", "e"))
print(echange(stg2, "r", "e"))
print(echange(str2, "a", "b"))



print("\n\nExercice 4\n")

def F(x):
    return x*np.sin(np.pi/x)

def dF(x):
    r = np.sin(np.pi/x)
    r += -np.pi/x*np.cos(np.pi/x)
    return r

a = 1/3
b = 2
N = 200

X = np.linspace(a, b, N)  # abscisses pour le graphe
Y = F(X)

c = .3985
p = dF(c)
XT = [-.5 + c, c + .5]  # abscisses pour la tangente
YT = [F(c) - .5*p, F(c) +.5*p]  # ordonnees correspondantes

fig = plt.figure()
axis = fig.add_subplot(111)  # aspect='equal'
axis.set_title("le nombre de points satisfaisant TAF est 3")

axis.plot(X, Y, color="k")
axis.plot([a, b], [F(a), F(b)], color="b")
axis.plot([a, b], [F(a), F(b)], ls=" ", marker="o", ms=4, color="r")

axis.plot(XT, YT, color="b")  # la tangente
axis.plot([c], [F(c)], ls=" ", marker="o", ms=4, color="g", label=f"{c}")

axis.legend()

plt.show()

