Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice python réservoir

    3 octobre 2021 à 20:04:24

    Bonjour j'aimerais avoir une solution à cet exercice.

    -
    Edité par YanisBerkani1 3 octobre 2021 à 20:06:48

    • Partager sur Facebook
    • Partager sur Twitter
      3 octobre 2021 à 20:28:45

      Exercice intéressant.
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        3 octobre 2021 à 23:47:28

        >> Bonjour j'aimerais avoir une solution à cet exercice

        Bonsoir, ce n'est pas à la communauté de pondre une programme c'est à vous de l'écrire, vous recevrez aide et conseil par rapport à votre code.

        Code que vous insérer sur le forum à l'aide du bouton  code </> de la barre d'outil du forum.

        La modération

        • Partager sur Facebook
        • Partager sur Twitter
          4 octobre 2021 à 2:02:22

          Tout à fait d'accord ...

          josmiley a écrit:

          Exercice intéressant.



          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            4 octobre 2021 à 6:18:43

            un truc dégeu, je peux pas m'en empêcher:

            l = [3,1,9,2,1,0,3,7,4,6]
            t = 0
            while t!=(t:=''.join(map(str,l)).strip('0').count('0')+t):
                l=[x and x-1 for x in l]
            print(t)


            plus soft

            l = [3,1,9,2,1,0,3,7,4,6]
            tot = 0
            while len(l)>=3:
                while len(l)>=2 and l[0]<=l[1]  : l.pop(0)
                while len(l)>=2 and l[-1]<=l[-2]: l.pop()
                tot += l.count(0)
                l = [x and x-1 for x in l]
            print(tot)



            -
            Edité par josmiley 4 octobre 2021 à 9:33:05

            • Partager sur Facebook
            • Partager sur Twitter

            Python c'est bon, mangez-en. 

              4 octobre 2021 à 9:33:11

              Marche pas ton truc :-°

              EDIT : aucun des deux ne fonctionne, par ex avec [10, 0, 10]

              -
              Edité par thelinekioubeur 4 octobre 2021 à 9:44:33

              • Partager sur Facebook
              • Partager sur Twitter
                4 octobre 2021 à 10:00:04

                thelinekioubeur a écrit:

                Marche pas ton truc :-°

                EDIT : aucun des deux ne fonctionne, par ex avec [10, 0, 10]

                -
                Edité par thelinekioubeur il y a 14 minutes


                effectivement j'ai oublié ces cas là:

                l = [10,0,10]
                tot = 0
                while True:
                    while len(l)>=2 and l[0]<=l[1]  : l.pop(0)
                    while len(l)>=2 and l[-1]<=l[-2]: l.pop()
                    if len(l)<3: break
                    tot += l.count(0)
                    l = [x and x-1 for x in l]
                print(tot)
                # 10
                l = [10,0,10]
                t = 0
                while t!=(t:=''.join(x>0 and'.'or' 'for x in l).strip().count(' ')+t):
                    l=[x-1 for x in l]
                print(t)

                -
                Edité par josmiley 4 octobre 2021 à 10:17:37

                • Partager sur Facebook
                • Partager sur Twitter

                Python c'est bon, mangez-en. 

                  4 octobre 2021 à 10:42:12

                  La première semble fonctionner si mes tests sont complets.

                  La deuxième ne fonctionne pas avec [10, 2, 10]

                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 octobre 2021 à 10:49:43

                    thelinekioubeur a écrit:

                    La première semble fonctionner si mes tests sont complets.

                    La deuxième ne fonctionne pas avec [10, 2, 10]


                    Lol,  toi, tu m'énerves 😂

                    l = [10,2,10]
                    t = 0
                    while any(l):
                        t+=''.join(x and'.'or' 'for x in l).strip().count(' ')
                        l=[x and x-1 for x in l]
                    print(t)



                    -
                    Edité par josmiley 4 octobre 2021 à 10:58:47

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Python c'est bon, mangez-en. 

                      4 octobre 2021 à 11:20:47

                      Tu vois quand tu veux :lol:

                      Sinon si ton but c'est du codegolf tu peux encore raccourcir un peu :

                      t = 0
                      while any(l):
                          t+="".join(" ."[bool(x)]for x in l).strip().count(" ")
                          l=[max(0,x-1)for x in l]
                      return t



                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 octobre 2021 à 11:52:11

                        thelinekioubeur a écrit:

                        Tu vois quand tu veux :lol:

                        Sinon si ton but c'est du codegolf tu peux encore raccourcir un peu :

                        t = 0
                        while any(l):
                            t+="".join(" ."[bool(x)]for x in l).strip().count(" ")
                            l=[max(0,x-1)for x in l]
                        return t



                        voir même

                            t+=''.join(' .'[x>0]for x in l).strip().count(' ')
                        




                        • Partager sur Facebook
                        • Partager sur Twitter

                        Python c'est bon, mangez-en. 

                          4 octobre 2021 à 17:45:07

                          Bonjour.

                          Voici comment je résoudrai le problème :

                          # Hauteurs des murs
                          hm = [3, 1, 9, 2, 1, 0, 3, 7, 4, 6]
                          
                          # Détermination des bornes d'intervalle(s)
                          indice_intervalle = []
                          for i in range(0, len(hm)):
                              if i == 0 or i == (len(hm)-1):
                                  indice_intervalle.append(i)
                              elif hm[i-1] < hm[i] > hm[i+1]:
                                  indice_intervalle.append(i)
                          
                          # Calcul du volume d'eau
                          vol = 0
                          for i in range(len(indice_intervalle) - 1):
                              intervalle = [hm[_] for _ in range(indice_intervalle[i], indice_intervalle[i + 1] + 1)]
                              lim_sup = min(intervalle[0], intervalle[len(intervalle) - 1])
                              for j in range(1, len(intervalle) - 1):
                                  vol += lim_sup - intervalle[j]
                          
                          # Synthèse
                          print(f"Les hauteurs de mur sont : {' | '.join(str(h) for h in hm)}")
                          print(f"Le volume d'eau pouvant être contenu entre ces murs est de {vol}.")



                          -
                          Edité par PB68 4 octobre 2021 à 17:46:06

                          • Partager sur Facebook
                          • Partager sur Twitter

                          PB68

                            6 octobre 2021 à 13:56:14

                            PB68 a écrit:

                            Bonjour.

                            Voici comment je résoudrai le problème :

                            # Hauteurs des murs
                            hm = [3, 1, 9, 2, 1, 0, 3, 7, 4, 6]
                            
                            # Détermination des bornes d'intervalle(s)
                            indice_intervalle = []
                            for i in range(0, len(hm)):
                                if i == 0 or i == (len(hm)-1):
                                    indice_intervalle.append(i)
                                elif hm[i-1] < hm[i] > hm[i+1]:
                                    indice_intervalle.append(i)
                            
                            # Calcul du volume d'eau
                            vol = 0
                            for i in range(len(indice_intervalle) - 1):
                                intervalle = [hm[_] for _ in range(indice_intervalle[i], indice_intervalle[i + 1] + 1)]
                                lim_sup = min(intervalle[0], intervalle[len(intervalle) - 1])
                                for j in range(1, len(intervalle) - 1):
                                    vol += lim_sup - intervalle[j]
                            
                            # Synthèse
                            print(f"Les hauteurs de mur sont : {' | '.join(str(h) for h in hm)}")
                            print(f"Le volume d'eau pouvant être contenu entre ces murs est de {vol}.")



                            -
                            Edité par PB68 4 octobre 2021 à 17:46:06


                            Pour la liste hm=[5, 0, 8, 7, 5], ton code donne 3 alors qu'il me semble que la réponse est 5.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              6 octobre 2021 à 17:49:26

                              PascalOrtiz a écrit:

                              PB68 a écrit:

                              Bonjour.

                              Voici comment je résoudrai le problème :

                              # Hauteurs des murs
                              hm = [3, 1, 9, 2, 1, 0, 3, 7, 4, 6]
                              
                              # Détermination des bornes d'intervalle(s)
                              indice_intervalle = []
                              for i in range(0, len(hm)):
                                  if i == 0 or i == (len(hm)-1):
                                      indice_intervalle.append(i)
                                  elif hm[i-1] < hm[i] > hm[i+1]:
                                      indice_intervalle.append(i)
                              
                              # Calcul du volume d'eau
                              vol = 0
                              for i in range(len(indice_intervalle) - 1):
                                  intervalle = [hm[_] for _ in range(indice_intervalle[i], indice_intervalle[i + 1] + 1)]
                                  lim_sup = min(intervalle[0], intervalle[len(intervalle) - 1])
                                  for j in range(1, len(intervalle) - 1):
                                      vol += lim_sup - intervalle[j]
                              
                              # Synthèse
                              print(f"Les hauteurs de mur sont : {' | '.join(str(h) for h in hm)}")
                              print(f"Le volume d'eau pouvant être contenu entre ces murs est de {vol}.")



                              -
                              Edité par PB68 4 octobre 2021 à 17:46:06


                              Pour la liste hm=[5, 0, 8, 7, 5], ton code donne 3 alors qu'il me semble que la réponse est 5.


                              Ah ben oui, normal. J'ai pas fait de test par rapport aux valeurs d'extremité de la liste. C'est résolu.

                              # Hauteurs des murs
                              hm = [3, 1, 9, 2, 1, 0, 3, 7, 4, 6]
                              
                              # Détermination des bornes d'intervalle(s)
                              indice_intervalle = []
                              for i in range(0, len(hm)):
                                  if i == 0 or i == (len(hm)-1):
                                      indice_intervalle.append(i)
                                  elif hm[i-1] < hm[i] > hm[i+1]:
                                      indice_intervalle.append(i)
                              
                              # Calcul du volume d'eau
                              vol = 0
                              for i in range(len(indice_intervalle) - 1):
                                  intervalle = [hm[_] for _ in range(indice_intervalle[i], indice_intervalle[i + 1] + 1)]
                                  lim_sup = min(intervalle[0], intervalle[len(intervalle) - 1])
                                  for j in range(1, len(intervalle) - 1):
                                      if (lim_sup - intervalle[j]) >= 0:
                                          vol += lim_sup - intervalle[j]
                              
                              # Synthèse
                              print(f"Les hauteurs de mur sont : {' | '.join(str(h) for h in hm)}")
                              print(f"Le volume d'eau pouvant être contenu entre ces murs est de {vol}.")
                              • Partager sur Facebook
                              • Partager sur Twitter

                              PB68

                                6 octobre 2021 à 22:05:56

                                La liste [2, 5, 6, 1, 9, 10, 10, 4] devrait donner 5 et ton code donne 3.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  15 octobre 2021 à 16:02:41

                                  thelinekioubeur a écrit:

                                  Tu vois quand tu veux :lol:

                                  Sinon si ton but c'est du codegolf tu peux encore raccourcir un peu :

                                  t = 0
                                  while any(l):
                                      t+="".join(" ."[bool(x)]for x in l).strip().count(" ")
                                      l=[max(0,x-1)for x in l]
                                  return t

                                  Bonjour.

                                  J'ai compris la mécanique du code permettant d'arriver au résultat mais est-ce que quelqu'un aurait un lien qui explique la syntaxe de :

                                  " ." [bool(x)] for x in l   # Dans la ligne t += ......

                                  En vous remerciant d'avance.

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  PB68

                                    15 octobre 2021 à 16:11:05

                                    PB68 a écrit:

                                    J'ai compris la mécanique du code permettant d'arriver au résultat mais est-ce que quelqu'un aurait un lien qui explique la syntaxe de :

                                    " ." [bool(x)] for x in l   # Dans la ligne t += ......

                                    En vous remerciant d'avance.



                                    Pas besoin de lien spécifique pour ça, c'est juste que " ." est une chaîne de deux caractères et que bool(x) qui vaut False ou True s'évalue en un int 0 ou 1 (bool est une classe qui dérive de int) donc en un entier de range(2) et 2 est la longueur de la chaîne. Il était possible d'utiliser une expression conditionnelle pour cela.

                                    Sinon, tu avais vu mon objection à ton code ?

                                    EDIT. Peut-être que c'est la chaîne littérale qui te gêne. Le code équivaut à :

                                    s=" ."
                                    i=bool(x)
                                    s[i]



                                    -
                                    Edité par PascalOrtiz 15 octobre 2021 à 16:14:34

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      15 octobre 2021 à 16:46:36

                                      PascalOrtiz a écrit:

                                      PB68 a écrit:

                                      J'ai compris la mécanique du code permettant d'arriver au résultat mais est-ce que quelqu'un aurait un lien qui explique la syntaxe de :

                                      " ." [bool(x)] for x in l   # Dans la ligne t += ......

                                      En vous remerciant d'avance.



                                      Pas besoin de lien spécifique pour ça, c'est juste que " ." est une chaîne de deux caractères et que bool(x) qui vaut False ou True s'évalue en un int 0 ou 1 (bool est une classe qui dérive de int) donc en un entier de range(2) et 2 est la longueur de la chaîne. Il était possible d'utiliser une expression conditionnelle pour cela.

                                      Sinon, tu avais vu mon objection à ton code ?

                                      EDIT. Peut-être que c'est la chaîne littérale qui te gêne. Le code équivaut à :

                                      s=" ."
                                      i=bool(x)
                                      s[i]



                                      -
                                      Edité par PascalOrtiz il y a 6 minutes


                                      Ah oui, ok, je viens de comprendre. En fait, c'est le même principe que pour un tuple ou une liste sauf qu'ici c'est appliqué à une chaîne de caractère. Donc, on prend le 1er caractère si x = 0 et le 2ème lorsque x est différent de 0.

                                      Oui, j'avais vu ta remarque par rapport à la liste que tu proposais.

                                      Alors j'ai continué dans mon idée d'analyse de la variation des hauteurs de murs en recherchant les points hauts et bas, suppression des maxis adjacents et une analyse plus particulière pour les extrémités. Je pense être arrivé à un fonctionnement correct après m'être fait un bon paquet d'essais.

                                      Pour la curiosité, j'en suis arrivé à l'usine à gaz ci-dessous (j'ai pas cherché à simplifier, y'a sans doute l'une ou l'autre partie avec laquelle il doit être possible de faire une fonction spécifique) :

                                      # Configuration de murs
                                      hm = [3, 1, 9, 2, 1, 0, 3, 7, 4, 6]
                                      hm_initiales = hm.copy()
                                      
                                      
                                      # Suppression de maxis adjacents éventuels
                                      idx_max_hm = [idx for idx in range(len(hm)) if hm[idx] == max(hm)]
                                      if len(idx_max_hm) >= 2:
                                          for i in range(len(idx_max_hm) - 1):
                                              if idx_max_hm[i + 1] - idx_max_hm[i] == 1:
                                                  hm.remove(hm[idx_max_hm[i]])
                                      
                                      
                                      # Détermination des bornes d'intervalle(s) / Recherche de "pointe" haute ou basse
                                      indice_intervalle = []
                                      
                                      if len(hm) > 3:
                                          for i in range(1, len(hm) - 1):
                                              if hm[i - 1] < hm[i] > hm[i + 1]:
                                                  indice_intervalle.append((i, "haut"))
                                              elif hm[i - 1] > hm[i] < hm[i + 1]:
                                                  indice_intervalle.append((i, "bas"))
                                      
                                      elif len(hm) == 3:
                                          for i in range(1, len(hm) - 1):
                                              if hm[i - 1] > hm[i] < hm[i + 1]:
                                                  indice_intervalle.append((i, "bas"))
                                      
                                      
                                      # Détermination des bornes d'intervalle(s) / Traitement des intervalles d'extrémité / Extrémité gauche
                                      intervalle = hm[0:indice_intervalle[0][0] + 1]
                                      
                                      if indice_intervalle[0][1] == "haut" and indice_intervalle[0][0] >= 2:
                                      
                                          test = False
                                          for i in range(1, len(intervalle) - 1):
                                              if intervalle[i] < intervalle[0] and intervalle[i] < intervalle[len(intervalle) - 1]:
                                                  test = True
                                              else:
                                                  test = False
                                      
                                          if test == True:
                                              indice_intervalle.insert(0, (0, "haut"))
                                      
                                      elif indice_intervalle[0][1] == "bas":
                                          if len(intervalle) <= 2:
                                              indice_intervalle.insert(0, (0, "haut"))
                                          else:
                                              test = False
                                              for i in range(1, len(intervalle) - 1):
                                                  if intervalle[i] < intervalle[0] and intervalle[i] > intervalle[len(intervalle) - 1]:
                                                      test = True
                                                  else:
                                                      test = False
                                      
                                              if test == True:
                                                  indice_intervalle.insert(0, (0, "haut"))
                                      
                                      
                                      # Détermination des bornes d'intervalle(s) / Traitement des intervalles d'extrémité / Extrémité droite
                                      intervalle = hm[indice_intervalle[len(indice_intervalle) - 1][0]:len(hm)]
                                      
                                      if indice_intervalle[len(indice_intervalle) - 1][1] == "haut" and indice_intervalle[len(indice_intervalle) - 1][0] < (len(hm) - 2):
                                      
                                          test = False
                                          for i in range(1, len(intervalle) - 1):
                                              if intervalle[i] < intervalle[0] and intervalle[i] < intervalle[len(intervalle) - 1]:
                                                  test=True
                                              else:
                                                  test=False
                                      
                                          if test == True:
                                              indice_intervalle.insert(len(indice_intervalle), (len(hm) - 1, "haut"))
                                      
                                      elif indice_intervalle[len(indice_intervalle) - 1][1] == "bas":
                                          if len(intervalle) <= 2:
                                              indice_intervalle.insert(len(indice_intervalle), (len(hm) - 1, "haut"))
                                          else:
                                              test = False
                                              for i in range(1, len(intervalle) - 1):
                                                  if intervalle[i] > intervalle[0] and intervalle[i] < intervalle[len(intervalle) - 1]:
                                                      test = True
                                                  else:
                                                      test = False
                                      
                                              if test == True:
                                                  indice_intervalle.insert(len(indice_intervalle), (len(hm) - 1, "haut"))
                                      
                                      
                                      # Optimisation des intervalles
                                      zones = []
                                      
                                      i = 0
                                      while i < len(indice_intervalle) - 1:
                                          n = 1
                                          if indice_intervalle[i][1] == "haut":
                                              while indice_intervalle[i + n][1] != "haut":
                                                  n += 1
                                              zones.append([indice_intervalle[i][0], indice_intervalle[i + n][0]])
                                          i = i + n
                                      
                                      for zone in zones:
                                          for i in [zone[0] + 1, zone[1] - 1]:
                                              if hm[i] < max(hm[zone[0]], hm[zone[1]]) and hm[i] > min(hm[zone[0]], hm[zone[1]]):
                                                  max_zone = hm[i]
                                                  if zone[0] < zone[1]:
                                                      zone[1] = i
                                                  else:
                                                      zone[0] = i
                                      
                                      
                                      # Calcul du volume d'eau
                                      vol = 0
                                      for zone in zones:
                                          lim_sup = min(hm[zone[0]], hm[zone[1]])
                                          for i in range(zone[0] + 1, zone[1]):
                                              vol += lim_sup - hm[i]
                                      
                                      
                                      # Synthèse
                                      print(f"Avec les hauteurs de mur ({', '.join(str(h) for h in hm_initiales)}), le volume d'eau pouvant être contenu est de {vol}.")

                                      -
                                      Edité par PB68 15 octobre 2021 à 16:51:37

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      PB68

                                        15 octobre 2021 à 19:08:34

                                        J'ai essayé ton code sur des valeurs un peu grandes et il n'a pas donné la bonne la valeur.

                                        La question était intéressante, merci à celui qui l'a montrée. On peut s'amuser à programmer le dessin des bassins :

                                        Le problème est connu sous le nom de trapping water rain, et il admet une solution astucieuse de complexité linéaire. 

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 octobre 2021 à 17:28:26

                                          PascalOrtiz a écrit:

                                          J'ai essayé ton code sur des valeurs un peu grandes et il n'a pas donné la bonne la valeur.

                                          . . . .

                                          Le problème est connu sous le nom de trapping water rain, et il admet une solution astucieuse de complexité linéaire. 

                                          J'ai regardé les méthodes de résolution proposées et j'aime bien celle avec un index "gauche" et un index "droit".

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          PB68

                                            19 octobre 2021 à 16:25:02

                                            Bonjour, 

                                            C'est bizarre, j'ai testé le 1er algo du site trapping water rain, et ça n'est pas mieux, ou alors je ne suis pas bien réveillé :-)

                                            # -*- coding:Utf-8 -*-
                                            import copy
                                            
                                            walls = [2,5,6,1,9,8,2,2,5,5,2,3,6]
                                            volume = 0
                                            
                                            config_i, config  = 0, {}
                                            c = copy.copy(walls)
                                            
                                            for k in range(max(walls)):
                                                config[config_i] = '  '
                                                if(c[0] > 0): config[config_i] = 'o '
                                            
                                                for j in range(1, len(c)):
                                                    if(c[j] > 0):
                                                        config[config_i] += 'o '
                                                    else:
                                                        config[config_i] += '  '
                                                    c[j] -= 1
                                            
                                                c[0] -= 1
                                                config_i += 1
                                            
                                            print('Configuration des murs :')
                                            for k in range(config_i-1,-1,-1): print(' ',config[k])
                                            
                                            # algo initial : valeur pas toujours bonne
                                            
                                            #while any(walls):
                                            #	volume += ''.join(x and'.'or' 'for x in walls).strip().count(' ')
                                            #	walls = [x and x-1 for x in walls]
                                            
                                            #algo du site trapping water rain
                                            #
                                            #ans=0
                                            #
                                            #Iterate the array from left to right:
                                            #	left_max=0
                                            #	right_max=0
                                            #	Iterate from the current element to the beginning of array updating:
                                            #		left_max=max(left_max,height[j])
                                            #	Iterate from the current element to the end of array updating:
                                            #		right_max=max(right_max,height[j])
                                            #	ans += min(left_max,right_max)-height[i]
                                            
                                            for i in range(len(walls)):
                                                left_max, right_max = 0,0
                                            
                                                for j in range(i, -1,-1):
                                                    left_max = max(left_max, walls[j])
                                            
                                                for j in range(i, len(walls)):
                                                    right_max = max(right_max,walls[j])
                                            
                                                volume += min(left_max,right_max)-walls[i]
                                            
                                            print('\nVolume possible :',volume)

                                            Avec 5 comme dernière valeur, ça donne bien 16, mais avec 6, ca donne 22 !

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              19 octobre 2021 à 16:38:54

                                              Phil_1857 a écrit:

                                              Bonjour, 

                                              C'est bizarre, j'ai testé le 1er algo du site trapping water rain, et ça n'est pas mieux, ou alors je ne suis pas bien réveillé :-)

                                              # -*- coding:Utf-8 -*-
                                              import copy
                                              
                                              walls = [2,5,6,1,9,8,2,2,5,5,2,3,6]
                                              volume = 0
                                              
                                              config_i, config  = 0, {}
                                              c = copy.copy(walls)
                                              
                                              for k in range(max(walls)):
                                                  config[config_i] = '  '
                                                  if(c[0] > 0): config[config_i] = 'o '
                                              
                                                  for j in range(1, len(c)):
                                                      if(c[j] > 0):
                                                          config[config_i] += 'o '
                                                      else:
                                                          config[config_i] += '  '
                                                      c[j] -= 1
                                              
                                                  c[0] -= 1
                                                  config_i += 1
                                              
                                              print('Configuration des murs :')
                                              for k in range(config_i-1,-1,-1): print(' ',config[k])
                                              
                                              # algo initial : valeur pas toujours bonne
                                              
                                              #while any(walls):
                                              #	volume += ''.join(x and'.'or' 'for x in walls).strip().count(' ')
                                              #	walls = [x and x-1 for x in walls]
                                              
                                              #algo du site trapping water rain
                                              #
                                              #ans=0
                                              #
                                              #Iterate the array from left to right:
                                              #	left_max=0
                                              #	right_max=0
                                              #	Iterate from the current element to the beginning of array updating:
                                              #		left_max=max(left_max,height[j])
                                              #	Iterate from the current element to the end of array updating:
                                              #		right_max=max(right_max,height[j])
                                              #	ans += min(left_max,right_max)-height[i]
                                              
                                              for i in range(len(walls)):
                                                  left_max, right_max = 0,0
                                              
                                                  for j in range(i, -1,-1):
                                                      left_max = max(left_max, walls[j])
                                              
                                                  for j in range(i, len(walls)):
                                                      right_max = max(right_max,walls[j])
                                              
                                                  volume += min(left_max,right_max)-walls[i]
                                              
                                              print('\nVolume possible :',volume)

                                              Avec 5 comme dernière valeur, ça donne bien 16, mais avec 6, ca donne 22 !

                                              C'est juste, il y a 6 murs qui seront chacun recouvert d'une case d'eau donc 16+6=22.

                                              -
                                              Edité par PB68 19 octobre 2021 à 16:39:49

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              PB68

                                                19 octobre 2021 à 16:45:30

                                                Bonjour pb68,

                                                Heuuu ... tu es sur ?

                                                avec une hauteur de 6 au dernier mur au lieu de 5, ca ne change rien: ca doit donner 16, l'affichage de la configuration donne ceci:

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  19 octobre 2021 à 16:59:43

                                                  Phil_1857 a écrit:

                                                  Bonjour pb68,

                                                  Heuuu ... tu es sur ?

                                                  avec une hauteur de 6 au dernier mur au lieu de 5, ca ne change rien: ca doit donner 16, l'affichage de la configuration donne ceci:

                                                  Avec 6 comme dans ta vue, tu as la zone en rouge ci-dessous en plus soit 6 cases.



                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  PB68

                                                    19 octobre 2021 à 17:32:51

                                                    aaaaaaaaaah voila !

                                                    C'est bien ce que je disais: je ne suis pas bien réveillé !!!!   :-) :-)

                                                    certaines fois, on fait des trucs pointus, et d'autres, on ne voit pas le nez au milieu de la figure ...

                                                    merci pb68 !

                                                    -
                                                    Edité par Phil_1857 19 octobre 2021 à 17:34:24

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Exercice python réservoir

                                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                    • Editeur
                                                    • Markdown