#question 1
# 1 : 1
# 2 : 10
# 3 : 11
# 4 : 100
# 5 : 101
# 6 : 110
# 7 : 111
# 8 : 1000
# 9 : 1001
# 10 : 1010

#_________________________________________________
#question 2

# On peut coder 2**n entiers avec n bits.
# Le plus grand est (2**n)-1.
# Le plus petit est 0.

#_________________________________________________
#question 3

#On cherche la première valeur de n telle que (2**n)-1 >= 16 803 256

def plus_grande_puis_2(n):
    res = 0
    puis = 1
    while n>puis :
        puis = puis*2
        res += 1
    return res

#On trouve 4 octets (pour contenir au moins 25 chiffres binaires)

#_________________________________________________
#question 4

# 110010101 en base 2 donne : 405
# 314 en base 5 donne : 84
# 147 en base 13 donne : 228

#_________________________________________________
#question 5

def binaireVersDecimal(n):
    out = 0
    for i in range(len(n)):
        out += n[len(n)-1-i]*(2**i)
    return out

#plus élégant
def binaireVersDecimal_v2(n):
    out = 0
    p=1
    for i in range(len(n)):
        out += n[len(n)-1-i]*p
        p = p*2
    return out

#encore plus élégant
def binaireVersDecimal_v3(n):
    out = 0
    for i in range(len(n)):
        out = out*2
        out += n[i]
    return out

#_________________________________________________
#question 6

def versDecimal(k,n):
    out = 0
    for i in range(len(n)):
        out = out*k
        out += n[i]
    return out

# On aurait pu faire la question précédente avec :

def binairesVersDecimal_v4(n):
    return versDecimal(2,n)

#_________________________________________________
#question 7

# 267 s'écrit 100001011 en binaire.
# 267 s'écrit 100220 en base 3.
# 267 s'écrit 2032 en base 5.


#_________________________________________________
#question 8

def renverse(L):
    out = []
    n = len(L)
    for i in range(n):
        out.append(L[n-1-i])
    return out

def decimalVersBinaire(n):
    out = []
    temp = n
    while temp > 0 :
        out.append(temp%2)
        temp = temp//2
    return renverse(out)

#On peut utiliser une sous fonction récursive pour éviter d'avoir à renverser le résultat.

def decimalVersBinaire_v2(n):
    def boucle(temp):
        if temp == 0 :
            return []
        else :
            toto = boucle(temp//2)
            toto.append(temp%2)
            return toto
    return boucle(n)


#_________________________________________________
#question 9

def versBasek(k,n):
    out = []
    temp = n
    while temp > 0 :
        out.append(temp%k)
        temp = temp//k
    return renverse(out)

#_________________________________________________
#question 12

def suite01(n):
    out = 0.1
    for i in range(n):
        out = 11*out-1
    return out