

#--------------------------------topic: --------------------------------#




#################################Slide 3#######################################
def computeHonestPerson_MEDIUM_RECURSIVE(A, isHonest):
    n = len(A)

    if n == 1: return A[0]

    p1 = computeHonestPerson_MEDIUM_RECURSIVE(A[:n//2], isHonest)
    p2 = computeHonestPerson_MEDIUM_RECURSIVE(A[n//2:], isHonest)

    count1 = 0
    for i in range(0, len(A)):
        if A[i] != p1 and isHonest(A[i], p1):
            count1 += 1

    if 2*count1 >= n-1:
        return p1
    else:
        return p2



#################################Slide 5#######################################
def computeHonestPerson_FAST_CHAIN(A, isHonest):
    n = len(A)

    B = []
    for i in range(0, n):
        if len(B) == 0:
            B.append(A[i])
        else:
            if isHonest(A[i], B[-1]):
                B.append(A[i])
            else:
                B.pop()
    return B[ 0 ]



#--------------------------------topic: --------------------------------#




#################################Slide 4#######################################
import random

x = random.randint(0,10)
print(x)
x = random.randint(0,10)
print(x)
x = random.randint(0,10)
print(x)
x = random.randint(0,10)
print(x)



#################################Slide 5#######################################
import random

x = random.choice([3,5, "hello", "bye", 3.51, False])
print(x)
x = random.choice([3,5, "hello", "bye", 3.51, False])
print(x)
x = random.choice([3,5, "hello", "bye", 3.51, False])
print(x)



#################################Slide 7#######################################
from random import randint

x = randint(0, 100)
print(x) 



#################################Slide 8#######################################
from random import randint

x = randint(0, 100)
print(x)

x = random.choice([3,6,1,6])
print(x)
 



#################################Slide 9#######################################
from random import *

x = randint(0, 100)
print(x)

x = choice([3,6,1,6])
print(x)
 



#################################Slide 10#######################################
from random import *

x = random.randint(0, 100)
print(x)

x = random.choice([3,6,1,6])
print(x)
 



#################################Slide 11#######################################
import random as mynameforrandom

x = mynameforrandom.randint(0, 100)
print(x)

x = mynameforrandom.choice([3,6,1,6])
print(x)
 



#################################Slide 11#######################################
import random

x = random.randint(0, 100)
print(x)

x = random.choice([3,6,1,6])
print(x)
 



#################################Slide 11#######################################
from random import *

x = randint(0, 100)
print(x)

x = choice([3,6,1,6])
print(x)
 



#################################Slide 12#######################################
import random

X = random.choices([3,5, "hello", "bye", 3.51, False], k = 1)
print(X)

X = random.choices([3,5, "hello", "bye", 3.51, False], k = 5)
print(X)

X = random.choices([3,5, "hello", "bye", 3.51, False], k = 10)
print(X)



#################################Slide 14#######################################
import sys

print(type(sys.argv))
print(sys.argv)



#################################Slide 16#######################################
import sys

if len(sys.argv) != 2:
    sys.exit("ERREUR : il faut exactement un argument.")

nom_fichier = sys.argv[1]
taille = 0

inputfile = open(nom_fichier, "r")
taille = len(inputfile.readlines())

print(nom_fichier, " contient ", taille, "lignes.")



#################################Slide 18#######################################
import os

if os.path.exists("a.txt"):
    print("a.txt is there :)")
else:
    print("a.txt NOT found :( ")



#################################Slide 19#######################################
import os

filepath = os.getcwd()

print(filepath)

L = os.listdir()

print(L)



#################################Slide 22#######################################
import time

print( time.time() )




#################################Slide 23#######################################
import time

n = pow(10,5)

start_time = time.time()

sum = 0
for i in range(0, n):
    sum += i

end_time = time.time()
print("time: ", end_time - start_time)



#################################Slide 23#######################################
import time

n = pow(10,6)

start_time = time.time()

sum = 0
for i in range(0, n):
    sum += i

end_time = time.time()
print("time: ", end_time - start_time)



#################################Slide 23#######################################
import time

n = pow(10,7)

start_time = time.time()

sum = 0
for i in range(0, n):
    sum += i

end_time = time.time()
print("time: ", end_time - start_time)



#--------------------------------topic: --------------------------------#




#################################Slide 2#######################################
import numpy as np

A = np.array([1, 2.2, 34, 51])

print( A )

print( type(A) )

print( A.size )



#################################Slide 3#######################################
import numpy as np

A = np.array([1.0, 2.2, 34, 51])

print(A)
print(type(A))

B = list(A)

print(B)
print(type(B))

C = np.array(B)

print(C)
print(type(C))




#################################Slide 5#######################################
import numpy as np

A = np.array( [2,1,5] )

l = np.linalg.norm(A)
print(l)

B = 2 * A
print(B)







#################################Slide 6#######################################
import numpy as np

A = np.array( [2,1,5] )
B = np.array( [56,42,3] )

print(A+B, "\n")
print(A*B, "\n")
print(A/B)






#################################Slide 7#######################################
import numpy as np

A = np.array( [2,1,5] )
B = np.array( [56,42,3] )
 

D = np.dot(A,B)
print(D)






#################################Slide 9#######################################
import numpy as np

v1 = np.array([1,0,0])
v2 = np.array([0,1,0])

v3 = np.cross(v1, v2)

print(v3)




#################################Slide 10#######################################
p1 = np.array([5.0,2.0,-3.0])
p2 = np.array([-2.0,6.0,6.0])
p3 = np.array([4.0,-3.0,1.0])

v1 = p2 - p1
v2 = p3 - p2
n = np.cross(v1,v2)
n = n / np.linalg.norm(n)




#--------------------------------topic: --------------------------------#




#################################Slide 2#######################################
import numpy as np

A = np.array( [ [1.0, 2.2, 34], [3, 5, 1], [33, 12, -4] ] )

print(A)
print(type(A))
print(A.shape)



#################################Slide 3#######################################
import numpy as np

A = np.array( [ [1.0, 2.2, 34] ] )

print(A)
print(type(A))
print(A.shape)



#################################Slide 4#######################################
import numpy as np

A = np.array( [ [1.0, 2.2, 34], [3, 5, 1], [33, 12, -4] ] )

print(A[0][0])
print(A[1][2])
print(A[2][2])




#################################Slide 4#######################################
import numpy as np

A = np.array( [ [1.0, 2.2, 34], [3, 5, 1], [33, 12, -4] ] )

print(A[0, 0])
print(A[1, 2])
print(A[2, 2])




#################################Slide 5#######################################
import numpy as np

A = np.array( [ [1.0, 2.2, 34], [3, 5, 1], [33, 12, -4] ] )

print(A)

A[1][1] = -344

print(A)




#################################Slide 6#######################################
import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]])

B = np.array([[7, 8],
              [9, 10],
              [11, 12]])

C = A @ B
print(C)




#################################Slide 7#######################################
import numpy as np

A = np.array( [ [1.0,2.2,34], 
                [3,5,1], 
                [33, 12, -4] ] )

C = A.T
print(C)

D = np.transpose(A)
print(D)





#################################Slide 9#######################################
import numpy as np

v1 = np.array([1, 2, 3, 4])
v2 = np.array([[1, 2, 3, 4]])

print(v1.shape)
print(v2.shape)




#################################Slide 9#######################################
import numpy as np

v1 = np.array([1, 2, 3, 4])
v2 = np.array([[1, 2, 3, 4]])
v3 = np.array([[1], [2], [3], [4]])

print(v1.shape)
print(v2.shape)
print(v3.shape)





#################################Slide 10#######################################
import numpy as np

v1 = np.array([1, 2, 3, 4])
v2 = np.array([[1, 2, 3, 4]])

print(v1.T.shape)
print(v2.T.shape)




#################################Slide 10#######################################
import numpy as np

v1 = np.array([1, 2, 3, 4])
v2 = np.array([[1, 2, 3, 4]])

print(v1[0])
print(v2[0])




#################################Slide 11#######################################
import numpy as np

v1 = np.array([1, 2, 3, 4])
A = np.array([[1,2,3,4],[5,6,7,8]])
print(A@v1)




#################################Slide 11#######################################
import numpy as np

v2 = np.array([[1, 2, 3, 4]])
A = np.array([[1,2,3,4],[5,6,7,8]])
print(A@v2)




#################################Slide 12#######################################
import numpy as np

vectors = [np.array([1,2,3]),
           np.array([4,5,6]),
           np.array([7,8,9])]

A = np.stack(vectors, axis=0)
B = np.stack(vectors, axis=1)

print(A)
print(B)




#################################Slide 14#######################################
import numpy as np

A = np.array( [ [1,2,3],
                [4,5,6],
                [7,8,9] ] )





#################################Slide 14#######################################
print( A[:, :] )




#################################Slide 14#######################################
print( A[1:3, 0:2] )




#################################Slide 14#######################################
print( A[:, 1:3] )




#################################Slide 15#######################################
import numpy as np

A = np.array( [ [1,2,3],
                [4,5,6],
                [7,8,9] ] )





#################################Slide 15#######################################
print( A[2, :] )




#################################Slide 15#######################################
print( A[ [2], :] )





#################################Slide 17#######################################
import numpy as np

A = np.arange(2, 4, 0.3)

print(A)






#################################Slide 17#######################################
import numpy as np

A = np.linspace(2, 3, 6)

print(A)




#################################Slide 17#######################################
import numpy as np

A = np.arange(5)

print(A)






#################################Slide 18#######################################
import numpy as np

A = np.zeros((2,3))
B = np.ones((3,2))

print(A)
print(B)




#################################Slide 18#######################################
import numpy as np

A = np.identity(3)

print(A)





#################################Slide 18#######################################
import numpy as np
A = np.random.random((3,3))
print(A)






#################################Slide 20#######################################
import numpy as np

A = np.array( [ [1.0,2.2,34], [3,5,1], [33, 12, -4] ] )

print(A.ndim)
print(A.shape)
print(A.size)
print(A.dtype)




#################################Slide 21#######################################
import numpy as np

A = np.array( [1, 2, 3, 4, 5, 6] )

B = A.reshape((3,2))
print(B)

C = A.reshape((2,3))
print(C)






#################################Slide 22#######################################
import numpy as np

A = np.array( [ [1,2], [3,4] ] )
print(A)

v = A.reshape(4)
print(v)






#################################Slide 23#######################################
import numpy as np

A = np.array( [ [1,2], [3,4] ] )
print(A)

v = A.reshape(-1)
print(v)




#################################Slide 23#######################################
import numpy as np

A = np.array([[1,2,3],[4,5,6]])
print(A)

v = A.reshape( (3, -1) )
print(v)




#################################Slide 24#######################################
import numpy as np

A = np.array( [1, 2, 3, 4, 5, 6] )

D = A.reshape((3,3))
print(D)




#################################Slide 24#######################################
import numpy as np

A = np.array( [1, 2, 3, 4, 5, 6] )

D = A.reshape((4,-1))
print(D)




#################################Slide 25#######################################
import numpy as np

A = np.array( [1, 2, 3, 4, 5] )

A.resize((3,3))
print(A)




#################################Slide 25#######################################
import numpy as np

A = np.array( [1, 2, 3, 4, 5] )

A.resize((2,2))
print(A)




#################################Slide 26#######################################
import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])

A.resize((2,10))
print(A)





#################################Slide 26#######################################
import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])

A.resize((4,4))
print(A)





#################################Slide 27#######################################
import numpy as np

A = np.arange(10).reshape(2,5)

print(A)




#################################Slide 28#######################################
import numpy as np

A = np.array( [2,1,5] )
B = np.array( [56,42,3] )

C = np.outer(A,B)
print(C)






#################################Slide 28#######################################
import numpy as np

A = np.array( [2,1,5] )
B = np.array( [56,42,3] )

Am = A.reshape(-1, 1)
Bm = B.reshape(1,-1)

D = Am @ Bm
print(D)






#################################Slide 29#######################################
import numpy as np

A = np.arange(27).reshape((3,3,3))

print(A)




#################################Slide 30#######################################
import numpy as np

A = np.arange(27).reshape((3,3,3))

for a in A:
    for b in a:
        for c in b:
            print(a,b,c)



