Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercice] trouver les dix plus grands nombres

sans utiliser sort...

    6 août 2011 à 10:44:39

    Lord Casque Noir > En fait j'y connais pas grand chose en python ^^.
    Sinon une autre façon de faire plus facilement parallélisable pour exploiter du multi-coeur ou processeur :
    def macaque2_fusion(liste1, liste2, n):
        newListe = []
        index1 = 0
        index2 = 0
        for index in range(n):
            if liste1[index1] > liste2[index2]:
                newListe.append(liste1[index1])
                index1 += 1
            else:
                newListe.append(liste2[index2])
                index2 += 1
        return newListe
    
    def macaque2_nmax2(generator, n, generatorLength):
        milieu = int(generatorLength/2)
        if milieu <= n:
            generator.sort()
            generator.reverse()
            return generator[:n]
        else:
            return macaque2_fusion(macaque2_nmax2(generator[:milieu], n, milieu), macaque2_nmax2(generator[milieu:], n, generatorLength-milieu), n)
            
    def macaque2_nmax(generator, n=10):
        return macaque2_nmax2(generator, n, len(generator))
    

    Désoles, le code doit vous paraître vraiment pas propre...
    Là aussi je considère que generator est une liste.
    J'utilise sort et reverse ce qui est crado mais bon c'est pas l'idée principale de l'algo.
    Pour la méthode fusion il faut obligatoirement que les deux listes est plus de n élément.
    Au benchmark ça donne quelque chose du genre :
    Podium
    macaque(yoch_improved) : 0.0488169193268 seconde
    macaque2 : 0.0534739494324 seconde
    quark : 0.0884439945221 seconde
    yoch : 0.139960050583 seconde
    GurneyH : 0.166954040527 seconde
    [edit]Mais en fait en augmentant l'iterable macaque2 se fait distancer...[/edit]

    • Partager sur Facebook
    • Partager sur Twitter
      6 août 2011 à 18:30:17

      Salut :D

      Voici ma solution, il y a surement mieux j'ai pas encore lu toutes les autres mais bon c'est déjà ça :p
      Je me suis beaucoup creusé la tête pour m'apercevoir que ce qui me manquait c'était la fonction max()^^

      def dix_max(nb):
          dix=[]  # Liste qui va contenir les 10 plus grands nombres
          i=0
          liste=[]
          # On met les nombres du générateur dans une liste
          for elt in nb:
                  liste.append(elt)
          while i<10:
                  liste_max=max(liste)
                  dix.append(liste_max)
                  liste.remove(liste_max)
                  i+=1
          return dix
      
      • Partager sur Facebook
      • Partager sur Twitter
        6 août 2011 à 18:59:26

        Citation : PyNuts

        Salut :D

        Voici ma solution, il y a surement mieux j'ai pas encore lu toutes les autres mais bon c'est déjà ça :p
        Je me suis beaucoup creusé la tête pour m'apercevoir que ce qui me manquait c'était la fonction max()^^

        def dix_max(nb):
            dix=[]  # Liste qui va contenir les 10 plus grands nombres
            i=0
            liste=[]
            # On met les nombres du générateur dans une liste
            for elt in nb:
                    liste.append(elt)
            while i<10:
                    liste_max=max(liste)
                    dix.append(liste_max)
                    liste.remove(liste_max)
                    i+=1
            return dix
        


        Le problème, c'est que tu vas chercher un maximum 10x d'affilé, si la liste est très longue ca va mettre des siècles.
        • Partager sur Facebook
        • Partager sur Twitter
        yjltg.
          6 août 2011 à 20:16:59

          @ PsycoPy :
          Merci pour le benchmark. :)
          • Partager sur Facebook
          • Partager sur Twitter
            7 août 2011 à 11:19:37

            Une autre version très moche, en gros la version itérative de ma version précédente avec utilisation de deque.
            Ce qui m'oblige a faire plein de conversion bien moche d'ailleurs...
            from collections import deque
            def macaque3_nmax(liste, n=10):
                length = len(liste)
                position = 2*n
                result = liste[:position]
                result.sort()
                result = deque(result[n:position])
                while position < length:
                    newPosition = position+2*n
                    current = liste[position:newPosition]
                    position = newPosition
                    current.sort()
                    current = deque(current)
                    listeFusion = deque([])
                    a = result.pop()
                    b = current.pop()
                    i = 0
                    while True:
                        i += 1
                        if a > b:
                            listeFusion.appendleft(a)
                            if i == n:
                                break
                            a = result.pop()
                        else:
                            listeFusion.appendleft(b)
                            if i == n:
                                break
                            b = current.pop()
                    result = listeFusion
                return result
            

            Ca reste moins performant que les algos de Yoch et GurneyH (en étant beaucoup plus crade).
            En tout cas merci pour l'exercice.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              7 août 2011 à 11:36:48

              Citation

              Ca reste moins performant que les algos de Yoch et GurneyH (en étant beaucoup plus crade).



              Ils peuvent sûrement encore faire plus rapide avec un décorateur spécial ;)

              • Partager sur Facebook
              • Partager sur Twitter
                7 août 2011 à 11:51:30

                Citation : fred1599

                Ils peuvent sûrement encore faire plus rapide avec un décorateur spécial ;)


                Pourquoi faire, ce truc ? o_O

                En tout cas, merci pour le lien, en général je fais ce genre de truc à la main (et puis le code est joli :) ).
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  7 août 2011 à 11:56:25

                  C'est une technique qui permet de mémoriser le dernier résultat calculé et le réutiliser pour la suite.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 août 2011 à 12:00:56

                    Citation : fred1599

                    C'est une technique qui permet de mémoriser le dernier résultat calculé et le réutiliser pour la suite.


                    Oui, j'avais compris cela ;) . Ce que je n'ai pas compris, c'est comment tu compte t'en servir ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      7 août 2011 à 12:04:06

                      from random import randint
                      
                      gen = lambda n, a, b: (randint(a,b) for i in range(n))
                      
                      class Memoize(object):
                          def __init__(self, fn):
                              self.fn = fn
                              self.memo = {}
                          def __call__(self, *args):
                              if not self.memo.has_key(args):
                                  self.memo[args] = self.fn(*args)
                              return self.memo[args]
                      
                      
                      def maxi(liste):
                          liste = set(liste)
                          for i in range(10):
                              if liste:
                                  m = max(liste)
                                  liste.remove(m)
                                  yield m
                      
                      maxi = Memoize(maxi)
                      print [i for i in maxi(gen(1000000,1,1000000))]
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 août 2011 à 12:12:37

                        Je ne comprends toujours pas, tu appelles la fonction maxi() une seule fois, ça ne devrait pas aller plus vite...

                        Sinon, comme mentionné plus haut (edit), tu ne gère pas les doublons, mais ça peut être corrigé facilement (Counter() ou équivalent).
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          7 août 2011 à 12:21:40

                          J'ai simplement fait un copier-coller pour montrer son utilisation.

                          Oui ça ne va pas plus vite, car il y a juste un seul appel en effet :honte:

                          Citation

                          tu ne gère pas les doublons



                          justement si, avec la commande set, mais ce n'est pas ce que tu veux, je suppose et si on garde les doublons je ne vois pas trop l'intérêt de l'exercice.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 août 2011 à 13:04:29

                            Citation : fred1599

                            Citation

                            tu ne gère pas les doublons


                            justement si, avec la commande set


                            Je voulais dire "tu vires les doublons, alors qu'il ne faudrait pas".

                            Citation : fred1599

                            mais ce n'est pas ce que tu veux, je suppose et si on garde les doublons je ne vois pas trop l'intérêt de l'exercice.


                            Bien sûr qu'il peut y avoir un intérêt ! Tout comme un tri ou autre, quel mal fait-il de garder les doublons ? Tout dépend du contexte.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              7 août 2011 à 13:16:19

                              Bon si tu insistes

                              from random import randint
                              
                              gen = lambda n, a, b: (randint(a,b) for i in range(n))
                              
                              def maxi(liste, n):
                                  liste = list(liste)
                                  for i in range(n):
                                      if liste:
                                          m = max(liste)
                                          liste.remove(m)
                                          yield m
                              
                              print [i for i in maxi(gen(1000000,1,1000000), 10)]
                              


                              • Partager sur Facebook
                              • Partager sur Twitter
                                7 août 2011 à 15:06:52

                                Citation : quelqun_dautre

                                Citation : PyNuts

                                Salut :D

                                Voici ma solution, il y a surement mieux j'ai pas encore lu toutes les autres mais bon c'est déjà ça :p
                                Je me suis beaucoup creusé la tête pour m'apercevoir que ce qui me manquait c'était la fonction max()^^

                                def dix_max(nb):
                                    dix=[]  # Liste qui va contenir les 10 plus grands nombres
                                    i=0
                                    liste=[]
                                    # On met les nombres du générateur dans une liste
                                    for elt in nb:
                                            liste.append(elt)
                                    while i<10:
                                            liste_max=max(liste)
                                            dix.append(liste_max)
                                            liste.remove(liste_max)
                                            i+=1
                                    return dix
                                



                                Le problème, c'est que tu vas chercher un maximum 10x d'affilé, si la liste est très longue ca va mettre des siècles.



                                Je sais pas ce que tu entends par liste très longue mais moi je trouve que ça marche plutôt bien en optimisant un peu le code comme celui de fred 1599
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  7 août 2011 à 15:16:21

                                  Citation : PyNuts

                                  Je sais pas ce que tu entends par liste très longue mais moi je trouve que ça marche plutôt bien en optimisant un peu le code comme celui de fred 1599


                                  Même si tu optimise, tu auras toujours une complexité relativement mauvaise : nombreTotalElems * nombreElemsARetourner.
                                  Si les deux sont conséquents (genre 50.000 plus grands éléments d'une liste de 100.000.000 d'éléments), bonjours les dégâts...

                                  Apres , effectivement, pour les 10 premiers éléments, ce ne sera pas bien grave (voire même meilleur dans le cas de python, puisqu'une fonction comme max() est built-in, il se peut donc que ça tourne plus vite).
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    7 août 2011 à 15:28:53

                                    Pardon Yoch,
                                    J'ai l'impression que tu n'as pas vus les premières solutions de mac.aque.

                                    Je les trouve pas mal(meilleure que ma soluce en tous cas). Tu vois un problème à ces solutions?

                                    En complexité temporelle en tous cas, elle sont meilleures que les notre.
                                    J'ai un viel ordi, et la différence est énorme!(enfin, chez moi il nous mais 5-6 secondes dans la vue)

                                    edit:
                                    C'est juste pour discuter autour de l'algo proposé qui est totalement différent du notre, qui repose essentiellement sur la structure de données choisie.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Zeste de Savoir, le site qui en a dans le citron !
                                      7 août 2011 à 15:47:17

                                      Citation : GurneyH

                                      Pardon Yoch,
                                      J'ai l'impression que tu n'as pas vus les premières solutions de mac.aque.

                                      Je les trouve pas mal(meilleure que ma soluce en tous cas). Tu vois un problème à ces solutions?

                                      En complexité temporelle en tous cas, elle sont meilleures que les notre.
                                      J'ai un viel ordi, et la différence est énorme!(enfin, chez moi il nous mais 5-6 secondes dans la vue)


                                      Laquelle exactement ? Si tu parles de celle-ci (enfin, la version corrigée plus bas), le prog tournera effectivement plus vite, mais c'est la même complexité, la différence reste un 'détail' d'implémentation.

                                      EDIT : ajout du lien, désolé :-°
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        7 août 2011 à 15:52:56

                                        Je parle de celle çi
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Zeste de Savoir, le site qui en a dans le citron !
                                        Anonyme
                                          7 août 2011 à 16:15:36

                                          Citation

                                          Même si tu optimise, tu auras toujours une complexité relativement mauvaise : nombreTotalElems * nombreElemsARetourner.
                                          Si les deux sont conséquents (genre 50.000 plus grands éléments d'une liste de 100.000.000 d'éléments), bonjours les dégâts...

                                          Apres , effectivement, pour les 10 premiers éléments, ce ne sera pas bien grave (voire même meilleur dans le cas de python, puisqu'une fonction comme max() est built-in, il se peut donc que ça tourne plus vite).



                                          @Yoch,

                                          Quand je lis ce que tu écris, je me dis que ton exercice n'est pas suffisamment précis dans son énoncé.

                                          Dans ce cas, stipule exactement pour quel nombre d'éléments l'algorithme doit être valable, ainsi que le nombre d'éléments les plus grands (je pensais que c'était 10).

                                          Si à chaque fois qu'on te propose un algo tu rajoutes une difficulté on va pas s'en sortir.

                                          Sinon comme le dis PyNuts, par rapport à ton énoncé de départ, mon code se comporte très bien. Maintenant pour 100000000 d'éléments, la RAM sature, c'est évident.

                                          Edit : Allez je te rajoute une difficulté, utilise ton code pour 100 Milliards d'éléments et tu me prends le 1er Million d'éléments les plus grands entre 1 et 100 Milliards.

                                          Un moment faudra passer au C/C++ ;)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            7 août 2011 à 16:20:19

                                            @Fred1599:
                                            il me semble que tout est bien ciblé depuis le départ. :-°
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Zeste de Savoir, le site qui en a dans le citron !
                                            Anonyme
                                              7 août 2011 à 16:24:16

                                              Citation

                                              @Fred1599:
                                              il me semble que tout est bien ciblé depuis le départ.



                                              Le nombre d'éléments minimum n'est pas stipulé, l'intervalle non plus, il est juste stipulé le nombre d'éléments les plus grands de la liste à récupérer.

                                              À la rigueur, même proposé un temps maximum, pourquoi pas?
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                7 août 2011 à 16:39:48

                                                @ GurneyH :
                                                Tu pourrais poster un code de bench complet, s'il te plait ?

                                                Chez moi, mon code fait aussi bien avec 1.000.000 éléments, et 5000 < n < 50000. Voire même légèrement mieux avec une version améliorée :
                                                def nmax(generator, n=10):
                                                    result = []
                                                    it = iter(generator)
                                                    for i in range(n):
                                                        heappush(result, next(it))
                                                    for elt in it:
                                                        if elt > result[0]:
                                                            heapreplace(result, elt)
                                                    return result
                                                


                                                D'ailleurs, c'est aussi la conclusion de mac.aque, plus ou moins.

                                                Sinon, son code est en soi très intéressant, je ne l'avais effectivement pas remarqué. Une adaptation du tri fusion, en quelque sorte. Je suis toutefois un peu surpris pas les bonnes performances, malgré les multiples recopies. Mais il a clairement une mauvaise complexité mémoire, puisqu'il doit stocker toute la séquence, plus des copies de slices. Le traitement "à la volée" est clairement impossible avec une telle approche.

                                                [edit]: Il convient d'ajouter que dans certains cas, les recopies peuvent être beaucoup plus couteuses qu'ici.

                                                @ fred1599 :
                                                Ne sois pas fâché, please. Je ne rajoute pas des contraintes, j'explique mon choix d'algo. Les exemples un peu extrêmes sont là pour imager les choses.
                                                Il est évident pour moi que ton code résout parfaitement l'exercice donné :) .
                                                Mon but était, en plus de proposer une question intéressante, de pointer du doigt certains aspects purement algorithmiques.

                                                Citation : fred1599

                                                Le nombre d'éléments minimum n'est pas stipulé, l'intervalle non plus.


                                                Que veux tu dire ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  7 août 2011 à 16:44:01

                                                  Je vous ai un peu amélioré le bench pour pouvoir tester avec différents arguments (taille de l'itérable et nombre d'éléments à retourner).

                                                  # -*- coding:utf-8 -*-
                                                  
                                                  from __future__ import print_function
                                                  from itertools import islice
                                                  import heapq
                                                  
                                                  
                                                  # -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                                                  # mac.aque :
                                                  def mac_aque_nmax(generator, n=10):
                                                      result = []
                                                      for elt in iter(generator[:n]):
                                                          heapq.heappush(result, elt)
                                                      for elt in iter(generator[n:]):
                                                          if elt > result[0]:
                                                              heapq.heapreplace(result, elt)
                                                      return result
                                                  
                                                  
                                                  # -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                                                  # Lord Casque Noir :
                                                  
                                                  def Lord_Casque_Noir_nmax(generator, n=10):
                                                      it = iter( generator )
                                                  
                                                      result = list(islice( it, n ))
                                                      if not result: 
                                                          return result
                                                      heapq.heapify(result)
                                                  
                                                      for elt in it:
                                                          if elt > result[0]:
                                                              heapq.heapreplace(result, elt)
                                                  
                                                      return result
                                                  
                                                  
                                                  
                                                  
                                                  # -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                                                  # -*-*-*-*-*-*-*-*-*-*-*-*-*- Benchmark -*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                                                  # -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                                                  if __name__ == "__main__":
                                                      from random import randint
                                                      from timeit import Timer
                                                      
                                                      print("\n[nmax] Benchmark")
                                                  
                                                      players = (
                                                          "mac_aque",
                                                          "Lord_Casque_Noir"
                                                      )
                                                      
                                                      arguments = ( # (it_size, n)
                                                          (1000, 10),
                                                          (1000, 1000),
                                                          (10000, 10),
                                                          (10000, 10000),
                                                          (100000, 10),
                                                          (100000, 100000)
                                                      )
                                                      
                                                      def test(funct, args):
                                                          for _ in funct(*args):
                                                              pass
                                                  
                                                      repeat = 100
                                                  
                                                      stmt = "test({}_nmax, (it, n))"
                                                      setup = "from __main__ import test, it, n, {}_nmax, islice, heapq"
                                                      
                                                      gen = lambda a, b, n: [ randint(a, b) for _ in range(n) ]
                                                      
                                                      scores = []
                                                      for name in players:
                                                          
                                                          print()
                                                          
                                                          ls = []
                                                          for args in arguments:
                                                              
                                                              print(name, "[ it_size =", args[0], "| n =", args[1], ']')
                                                              
                                                              it = gen(10, 10000, args[0])
                                                              n = args[1]
                                                              
                                                              # Tester si la fonction retourne bien le resultat attendu :
                                                              r = sorted(list(it))[-n:][::-1]
                                                              if r == sorted(list(eval(name + "_nmax(it, n)")), reverse=True):
                                                                  
                                                                  t = Timer(stmt.format(name),
                                                                            setup.format(name)).timeit(repeat)
                                                                  print('\t', t, " seconde", 's' if t > 1 else '', sep='')
                                                                  ls.append(t)
                                                              
                                                              else:
                                                                  print("\tERROR : resultat incorrect !")
                                                                  break
                                                          
                                                          else:
                                                              t = sum(ls)
                                                              print("Total : ", t, " seconde", 's' if t > 1 else '', sep='')
                                                              scores.append((t, name))
                                                      
                                                      print("\nPodium")
                                                      
                                                      scores.sort()
                                                      for i, t in enumerate(scores):
                                                          
                                                          print(i + 1, '> ', t[1].rjust(25), ' : ', t[0],
                                                                " seconde", 's' if t[0] > 1 else '', sep='')
                                                  


                                                  Le must serait de reprendre les données pour en faire des graphiques, mais j'ai la flemme... :-°
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Anonyme
                                                    7 août 2011 à 16:45:22

                                                    Citation

                                                    Que veux tu dire ?



                                                    Le nombre d'éléments générés au hasard, n, start et stop ne sont pas imposés, je trouve ça dommage.

                                                    Je pense même qu'un temps limite aurait pu être imposé, par exemple par rapport à l'algo naïf (ou autres de ton choix) sur des valeurs raisonnables

                                                    Citation

                                                    Ne sois pas fâché, please



                                                    J'y suis pas :)
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      7 août 2011 à 16:57:10

                                                      Citation : fred1599

                                                      Le nombre d'éléments générés au hasard, n, start et stop ne sont pas imposés, je trouve ça dommage.


                                                      Pourquoi les imposer ? A priori, si on n'impose pas, il faut essayer de réfléchir en terme de tous les cas possibles, non ?

                                                      Pour définir N plutôt que 10, tu as raison. Sur le moment, je n'y ai pas pensé. Aussi, je trouve que l'énoncé est plus parlant comme ça ("trouver les 10 plus grands nombre" -> "trouver les n plus grands nombre"). Enfin, si c'est gênant, je peux effectivement le changer.

                                                      Citation : fred1599

                                                      Je pense même qu'un temps limite aurait pu être imposé, par exemple par rapport à l'algo naïf (ou autres de ton choix) sur des valeurs raisonnables


                                                      Difficile pour diverses raisons :
                                                      1. assez subjectif, tout dépens de la machine, etc.
                                                      2. va inutilement faire peur aux participants; bien souvent, on part de l'algo naïf, et ensuite on l'améliore. :)
                                                      3. je n'y ai pas pensé. :p
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Anonyme
                                                        7 août 2011 à 17:04:05

                                                        Citation

                                                        Pourquoi les imposer ? A priori, si on n'impose pas, il faut essayer de réfléchir en terme de tous les cas possibles, non ?



                                                        Tout dépend de comment tu y réfléchis, moi je pars simplement du principe que ça fonctionne, maintenant si tu imposes des valeurs, je m'y tiendrais ou m'abstiendrais. :)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          7 août 2011 à 17:11:28

                                                          Citation : yoch


                                                          Sinon, son code est en soi très intéressant, je ne l'avais effectivement pas remarqué. Une adaptation du tri fusion, en quelque sorte. Je suis toutefois un peu surpris pas les bonnes performances, malgré les multiples recopies. Mais il a clairement une mauvaise complexité mémoire, puisqu'il doit stocker toute la séquence, plus des copies de slices. Le traitement "à la volée" est clairement impossible avec une telle approche.


                                                          Merci, ça reste clairement moins bon que ta solution du tas (puisqu'en plus utiliser sort doit pas mal tricher quand le nombre de maximums recherchés se rapproche du nombre d'éléments).
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            7 août 2011 à 17:21:23

                                                            @ fred1599 :
                                                            J'ai ajouté une phrase dans l'énoncé. Qu'en pense tu ?
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              7 août 2011 à 17:26:03

                                                              désolé oui, en augmentant la taille de N (N plus grands parmis...), les perfs de mac.aque chutent.
                                                              Mal testé. :-°
                                                              Et problème mémoire tout comme moi. :-°

                                                              Mais l'idée était bonne. ;)

                                                              Citation : Fred1599


                                                              Tout dépend de comment tu y réfléchis, moi je pars simplement du principe que ça fonctionne, maintenant si tu imposes des valeurs, je m'y tiendrais ou m'abstiendrais. :)


                                                              C'est dommage de s'abstenir, mais pour un exo de ce type, je trouve que d'emblée le but c'est de produire le code le plus efficace possible(sans être trop laid)
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              Zeste de Savoir, le site qui en a dans le citron !

                                                              [Exercice] trouver les dix plus grands nombres

                                                              × 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