TT22 icon

Programmation Dynamique

TT22 | PRO | 10/19/17 04:36:20 PM UTC | 0 ⭐ | 183 👁️ | Never ⏰ | []
Python |

2.16 KB

|

None

|

0 👍

/

0 👎

# Exercice 1
 
def create():
    return []
 
def is_empty(s):
    return len(s) == 0
 
def size(s):
    return len(s)
 
def push(x, s):
    s.append(x)
    return s
 
def pop(s):
    return s.pop()
 
def peek(s):
    return s[-1]
 
# Exercice 2
def check(s):
    pile = create()
    for c in s:
        # Pour chaque parenthèse ouvrante, on empile
        # Pour chaque parenthèse fermante, on dépile
        if c == '(':
            push(0, pile)
        if c == ')':
            # On véritfie la taille
            if size(pile) == 0:
                return False
            pop(pile)
    # À la fin, la pile doit être vide
    return size(pile) == 0
 
check('(())()(())') # True
check('(())()(()') # False
 
# Exercice 4
def multi_check(s):
    pile = create()
    for c in s:
        # Pour chaque ( ou [, on empile
        # Pour chaque ] ou ), on dépile en vérifiant le parenthésage
        if c == '[' or c == '(':
            push(c, pile)
        else:
            if size(pile) == 0:
                return False
            top = pop(pile)
            if (top == '(' and c == ']') or (top == '[' and c == ')'):
                return False
    # À la fin, la pile doit être vide
    return size(pile) == 0
 
multi_check('([]())') # True
multi_check('([(]))') # False
 
# Exos sur les listes
def somme(l):
    return reduce(lambda acc, e: acc+e, l)
 
def maximum(l):
    m = l[0]
    return reduce(lambda acc, e: max(acc, e), l)
 
def fst(l):
    return map(lambda e: e[0], l)
 
def permute(l):
    return map(lambda e: 0 if e == 1 else 1, l)
 
def compte0(l):
    return reduce(lambda acc, e: acc + (1 if e == 0 else 0), l, 0)
 
# Retourne la taille de la plus grande suite de v dans l
# On utilise un triplet comme accumulateur pour stocker la valeur précédente, le conteur actuel et le maximum
# <|°_°|>
def pgs(v, l):
    def f((last, count, maxcount), e):
        if e == last == v:
            return (e, count+1, max(maxcount, count+1))
        else:
            return (e, 1, max(maxcount, 1))
    return reduce(f, l, (l[0], 0, 0))[2]
 
# Version courte
def prg(v, l):
    return reduce(lambda (last, count, maxcount), e: (e, count+1, max(maxcount, count+1)) if e == last == v else (e, 1, max(1, maxcount)), l, (l[0], 0, 0))[2]
 
pgs(6, [3,3,3,4,4,5,6,2,2,2,2,2,0,0]) # 1
pgs(3, [3,3,3,4,4,5,6,2,2,2,2,2,0,0]) # 3
pgs(2, [3,3,3,4,4,5,6,2,2,2,2,2,0,0]) # 5

Comments