Partage
  • Partager sur Facebook
  • Partager sur Twitter

Code pour mesurer l'indentation

exercice

    15 février 2011 à 0:00:52

    Citation : LeYan'tibus


    fred1599 -> 0.889432490889
    josmiley -> 0.924458221595
    Candide -> 0.992681852884
    Maxibolt -> 1.29193627114
    cerium50 -> 6.70945351691




    Excellente leçon, comme quoi ! c'est avec les recettes les plus simples qu'on fait les meilleurs plats.


    Moi, je n'ai pas exactement les mêmes perf :

    ('josmiley', '->', 0.34641385078430176)
    ('Candide', '->', 0.37905406951904297)
    ('fred1599', '->', 0.4109489917755127)
    ('Maxibolt', '->', 0.74248290061950684)
    ('cerium50', '->', 2.9706361293792725)


    mais le code de fred1599 tient bien la route au regard de sa simplicité.


    Par contre, les performances des regexp sont vraiment effrayantes.

    EDIT ah oui au fait, merci d'avoir pris la peine de préparer tous ces tests !
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      15 février 2011 à 0:08:28

      Mais je remarque aussi que seul le code de cerium50 prend en compte le dernier saut à la ligne :

      cerium50(text)
      [4, 0, 4, 8, 8, 4, 4, 8, 8, 0, 4, 4, 0]
      
      • Partager sur Facebook
      • Partager sur Twitter
        15 février 2011 à 0:39:30

        Citation

        mais le code de fred1599 tient bien la route au regard de sa simplicité.


        Dans le fond c'est super logique, il ne fait que le strict nécessaire, à la différence des regexs qui font des choses beaucoup plus compliquées (et inutiles dans ce cas).

        Citation

        Par contre, les performances des regexp sont vraiment effrayantes.

        EDIT ah oui au fait, merci d'avoir pris la peine de préparer tous ces tests !


        +1 pour les deux :)

        Citation

        Mais je remarque aussi que seul le code de cerium50 prend en compte le dernier saut à la ligne :


        Je ne suis pas sûr que ça justifie les 5secondes de retard ^^ (mais je le répète mon code n'était pas destiné à être rapide).

        ---

        Ceci dit on peut optimiser les regex avec une variable globale...

        regex = re.compile('^ *', re.MULTILINE)
        def cerium50_v2(text):
            return [ len(m)  for m in regex.findall(text) ]
        


        Du coup on obtient :

        fred1599 -> 0.546782016754
        Candide -> 0.591556072235
        josmiley -> 1.21440386772
        Maxibolt -> 1.72638607025
        cerium50_v2 -> 3.03172492981
        cerium50 -> 5.72369098663


        Bon c'est toujours très lent, mais c'est mieux.
        • Partager sur Facebook
        • Partager sur Twitter
          15 février 2011 à 6:58:08

          Citation : cerium50

          Citation

          mais le code de fred1599 tient bien la route au regard de sa simplicité.


          Dans le fond c'est super logique, il ne fait que le strict nécessaire,



          Disons que c'est assez surprenant, j'ai remarqué qu'en Python, il était souvent plus efficace d'utiliser les fonctions/méthodes proposées par la lib standard que de réécrire le code soi-même.

          Dans l'absolu, la recherche linéaire qu'effectue la boucle for est moins rapide qu'une recherche dichotomique mais, en pratique, comme les lignes ne sont pas très longues, ça ne vaudrait pas la peine.
          • Partager sur Facebook
          • Partager sur Twitter
            15 février 2011 à 7:38:47

            J'obtiens ~0,001s pour le code de josmiley... étrange.
            • Partager sur Facebook
            • Partager sur Twitter
              15 février 2011 à 7:49:55

              Citation : Yohan88

              J'obtiens ~0,001s pour le code de josmiley... étrange.



              Donne la totalité du code Python que tu as exécuté.
              • Partager sur Facebook
              • Partager sur Twitter
                15 février 2011 à 13:56:35

                Citation

                Disons que c'est assez surprenant, j'ai remarqué qu'en Python, il était souvent plus efficace d'utiliser les fonctions/méthodes proposées par la lib standard que de réécrire le code soi-même.


                Normal, elles sont précompilées.
                Cela dit, faire ce genre de benchmark sur des codes en Python est... ridicule. C'est vrai qu'il vaut mieux utiliser des solutions performantes, mais quand on en arrive là, on ne fait plus de Python. Surtout que l'exemple est mal choisi : il y a très peu de lignes, et de toute façon les différences sont négligeables. Quand on veut savoir quel code est le plus performant, on le fait sur des tests où les différences sont vraiment significatives (sinon, on arriverait par exemple à la conclusion que le tri par insertion est bien meilleur qu'un tri par tas).
                En plus, faire du Python avec l'interpréteur standard est de toute façon incompatible avec des codes à haute performance. Quand on en arrive à mesurer des durées aussi précises, c'est que Python n'est pas adapté.

                Notez que je ne critique pas l'évaluation qui est faite ici par leyantibus, dont le travail est à saluer, mais que je signale juste que dans un cas pratique, il est totalement inadapté.
                • Partager sur Facebook
                • Partager sur Twitter
                  15 février 2011 à 17:53:20

                  Citation : candide

                  Citation : Yohan88

                  J'obtiens ~0,001s pour le code de josmiley... étrange.



                  Donne la totalité du code Python que tu as exécuté.



                  Copié-collé pur et simple du code de LeYan'Tibus. Et pourtant, mon ordinateur n'est pas une bête de course
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    15 février 2011 à 18:53:08

                    Citation

                    il y a très peu de lignes, et de toute façon les différences sont négligeables



                    5 secondes c'est pas négligeable tout de même.

                    Citation

                    En plus, faire du Python avec l'interpréteur standard est de toute façon incompatible avec des codes à haute performance. Quand on en arrive à mesurer des durées aussi précises, c'est que Python n'est pas adapté.



                    Python peut être rapide aussi, et pourquoi tester sur d'autres langages, ce n'est pas vraiment l'intérêt sur ce genre d'exercice.

                    Citation

                    C'est vrai qu'il vaut mieux utiliser des solutions performantes, mais quand on en arrive là, on ne fait plus de Python



                    Je suis pas d'accord! A quoi sert de faire du python dans ce cas, on fait tous du C et tout le monde sera content.

                    Dans les entreprises et Nohar en est un exemple, on commence à utiliser python. Il y a performance et besoin de performance.

                    Python est performant pour du script, autant que le C, cependant lorsqu'on arrive à un niveau de performance (jeux, 3D, ...) demandant une grosse consommation, d'autres langages sont conseillés.

                    Mais pour ce genre d'exercice, python est très approprié, c'est mon avis, hein... ;)

                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 février 2011 à 18:56:06

                      J'ai pas dit que python n'était pas approprié, j'ai dit que quand on avait besoin de faire ce genre de benchmarks, c'est qu'il ne l'était plus.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        15 février 2011 à 22:05:16

                        De retour sur mon XP :D

                        Alors mon script mettait bien l'algo de Maxibolt en tête. Mais, comme il a été dit, le texte en exemple n'était pas très bien choisi; avec le texte original (les fruits ^^ ) le résultat était complètement différent.

                        Du coup, pour le fun, je l'ai changé et j'aimerai bien savoir si d'un ordinateur à un autre les différences sont toujours aussi grande ?

                        # Tester les perf des algo suivant :
                        #
                        # [imports]
                        # def author(str) -> list:
                        #     algo
                        
                        
                        from itertools import takewhile
                        def maxibolt(text):
                            return [ len(list(takewhile(lambda c: c == ' ', line)))
                                     for line in text.splitlines() ]
                        
                        
                        import re
                        def cerium50(text):
                            return [ len(m)  for m in re.findall('^ *', text, re.MULTILINE) ]
                        
                        
                        def josmiley(text):
                            return [ len(line) - len(line.lstrip(' '))  for line in text.splitlines() ]
                        
                        
                        def candide(text):
                            ls = []
                            for line in text.splitlines():
                                s = line.lstrip(' ')
                                ls.append(line.find(s[0]) if s else len(line))
                            return ls
                        
                        
                        def fred1599(text):
                            ls = []
                            for line in text.splitlines():
                                nb = 0
                                for c in line:
                                    if c != ' ':
                                        break
                                    nb += 1
                                ls.append(nb)
                            return ls
                        
                        
                        
                        # TEST DES PERF
                        if __name__ == '__main__':
                            from timeit import Timer
                        
                            text = '''
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                                    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                                    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet
                        
                        
                        foo is foo
                            foo is foo
                        foo is foo
                            foo is foo
                            foo is foo
                            foo is foo
                                foo is foo
                                foo is foo
                            foo is foo
                            foo is foo
                                foo is foo
                                    foo is foo
                                    foo is foo
                                    foo is foo
                                    foo is foo
                                    foo is foo
                                        foo is foo
                                        foo is foo
                                        foo is foo
                                    foo is foo
                                        foo is foo
                                        foo is foo
                            foo is foo
                            foo is foo
                        foo is foo
                            foo is foo
                                foo is foo
                        '''
                        
                            text *= 100  # taille (ou longueur) du texte
                            numb = 1000  # nombre de répétitions
                        
                            # names = (auteur ou (auteur, modules) [, ...])
                            names = ('candide', ('cerium50', 're'), 'fred1599', 'josmiley',
                                     ('maxibolt', 'takewhile'))
                            
                            ls = []
                            for name in names:
                                if isinstance(name, str):
                                    setup = 'from __main__ import text, ' + name
                                else:
                                    setup = 'from __main__ import text, ' + name[0] + ', ' + name[1]
                                    name = name[0]
                                time = Timer(name + '(text)', setup).timeit(numb)
                                print(name, '->', time)
                                ls.append((time, name))
                            ls.sort()
                        
                            print('\nClassement :')
                            for time, name in ls:
                                ts = str(time).split('.')
                                s = '{} -> {}.{} seconde'
                                s = s.format(name.center(13), ts[0].zfill(3), ts[1].ljust(13))
                                print(s, 's'  if time >= 1 else '', sep='')
                        


                        Voilà ce que ça donne sur mon acer 5220 :
                        Xp SP3; intel celeron 550 2GHz (x86); 2Go RAM. [Python 3.1.2]

                        Classement :
                           fred1599   -> 028.4630703064    secondes
                           josmiley   -> 030.0603624204    secondes
                           candide    -> 031.1130635318    secondes
                           maxibolt   -> 043.7555348515    secondes
                           cerium50   -> 100.684055934     secondes

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          15 février 2011 à 22:20:16

                          Voyant le mal que tu te donnes je t'envoie mes résultats.

                          Classement :
                             josmiley   -> 016.6451239586    secondes
                             fred1599   -> 018.0281760693    secondes
                             candide    -> 018.1268339157    secondes
                             maxibolt   -> 027.2546830177    secondes
                             cerium50   -> 066.7679400444    secondes


                          Ubuntu(x64) core i3 2x2.13 GHz RAM(4Go) [python 3.1.2]
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            15 février 2011 à 22:39:58

                            Merci pour mes pauvres petits doigts ! :D

                            Je suppose que tu es sous Python 2.x ? Je pense que les versions de python (CPython) doivent beaucoup jouer sur ces différences de classement...

                            Rectification : [sous SEVEN]

                            Classement :
                               josmiley   -> 022.9095922066    secondes
                               fred1599   -> 024.3536183256    secondes
                               candide    -> 024.8136132511    secondes
                               maxibolt   -> 040.4902935598    secondes
                               cerium50   -> 111.636789013     secondes
                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 février 2011 à 14:47:39

                              Petite originalité : j'ai lancé les tests avec PyPy.
                              J'ai repris le même test, ajouté au début un from __future__ import print_function pour le rendre compatible avec PyPy-trunk (qui exécute la version 2.7 avec le JIT), et j'ai lancé les tests.

                              Les résultats sont franchement surprenants (j'ai quand même refait les tests plusieurs fois pour écarter le risque de malédiction sur les codes censés être rapides):

                              Classement :
                                 cerium50   -> 021.0399651527    secondes
                                 fred1599   -> 021.3584549427    secondes
                                 josmiley   -> 023.0565030575    secondes
                                 candide    -> 023.121391058     secondes
                                 maxibolt   -> 054.8098049164    secondes


                              (Ordinateur : processeur Athlon64 x2 2.2 GHz sous Arch Linux, 2 GO de RAM)

                              On dirait qu'avec PyPy et le JIT (compilation à la volée, inlining), les regexp sont indécemment rapides par rapport à la version CPython, si bien que le code de cerium50 est aussi rapide que celui de fred1599.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 février 2011 à 18:57:48

                                ordiclic tu as fais les tests avec ma première version ou la seconde http://www.siteduzero.com/forum-83-613 [...] html#r5921208 (qui est normalement plus rapide) ? Mine de rien ces résultats sont impressionnants :o
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 février 2011 à 20:38:52

                                  En refaisant les tests avec la regexp précompilée, on gagne en effet grosso modo une seconde, mais je ne poste pas les tests pour l'instant, vu que je recompile PyPy pour tester quelques options et que donc ce sera un peu biaisé.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    12 mai 2014 à 13:56:20

                                    Ma version:

                                    indentation_ligne = list()
                                    
                                    with open("indentation.txt", "r") as fichier:
                                        for ligne in fichier:
                                            if ligne == "\n":
                                                indentation_ligne.append("retour")
                                            else:
                                                indentation_ligne.append(ligne.count(" "))  #MAUVAISE PROG
                                    
                                    print(indentation_ligne)

                                    Edit: MAUVAISE PROGRAMMATION. Je me suis borné à l'exemple de Candide sans considérer qu'il pouvait y avoir des "espaces" après les mots. Je vais revenir avec un autre code.

                                    PS: J'ai interrompu l'exécution du temps de calcul car c'était extrêmement long (facile 5 min).

                                    PS2: Bon, au final j'ai pas réussi à trouver une solution différente des autres. Les deux solutions que j'ai trouvées sont semblables à celle de josmiley et de fred. En tout cas cet exercice a été beaucoup plus dur que je le pensais. J'ai pas mal galéré dans les boucles à cause d'une mauvaise compréhension entre break/pass/continue.

                                    Bref, un bon exercice. 

                                    -
                                    Edité par Olygrim 13 mai 2014 à 17:10:45

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Précepte: Le mieux est l'ennemi du bien
                                    Anonyme
                                      12 mai 2014 à 15:29:55

                                      @Olygrim,

                                      Fait le test de performance indiqué par psycopy, quelques posts plus haut et montre les résultats

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        21 septembre 2015 à 0:52:13

                                        j'ai donnez un code pour mesurer tout les mots non pas seulement ce qu'il dans le texte voila:

                                        arg1=str(input("donnez le mot:"))
                                        t=[]
                                        for i in range(len(arg1)):
                                            t.append(arg1[i])
                                        s=0    
                                        for j in range(len(t)):
                                            if(t[j] == " "):
                                                s+=1
                                            else:
                                                continue;   
                                        if(s==0):
                                            print("pas de l'indentation:",s)
                                        else:
                                            print(s)                 

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          12 juin 2016 à 19:34:00

                                          Aaaaaaaaaaaaah ZUT, j'ai un soucis avec cet exercice ^_^

                                          (Je précise que j'ai tenté de procéder de manière différente de ce qui a été proposé jusqu'ici)

                                          J'ai enregistré les pommes, les poires et les fraises dans un fichier texte, en respectant l'indentation comme indiqué dans l'énoncé puis j'ai tenté de le lire ligne par ligne puis lettre par lettre et capturer les espacements dans une variable.... Mais je ne parviens pas à ce que je veux:

                                          #/usr/bin/python
                                          #*-*coding:utf-8*-*
                                          
                                          # Excercice Python sdz no1 par JeroomuSama
                                          
                                          nombre_indentation = int(0)
                                          liste = []
                                          
                                          for line in open('fichier_lignes.txt','r').readlines():
                                          	liste.append(line)
                                          
                                          for i in xrange(0,len(liste)):
                                          	for j in liste[i]:
                                          		if j == ' ':
                                          			nombre_indentation += 1
                                          		else:
                                          			nombre_indentation = 0
                                          		print nombre_indentation


                                          Je vous donne un screenshot pour que vous vous fassiez plus facilement une idée du problème:

                                          (J'ai mis le terminal en transparence pour qu'on voit à la fois le code et le résulta ... Qui est noté verticalement et c'est bien là le soucis (tout à gauche de l'écran))

                                          J'ai tenté la même procédure avec un "import sys" suivi d'un "if sys.stdout.write(j)" à la place du simple "if j ==" en espérant que la boucle soit lue de gauche à droite et non de haut en bas mais évidemment ça n'a pas eu l'effet escompté.

                                          Je me retrouve donc avec un code qui tombe juste concernant le nombre d'indentation mais qui comptabilise et affiche le résulta à chaque caractère au lieu de le faire qu'une fois par mot :(

                                          ps: Bien entendu, je sais que mon Print n'est pas au bon endroit, mais si je le place à la base de la première condition, le résulta affiché sera incorrect, il affichera "0,0,0,0,0....". Ici c'est la manière la plus "juste" que j'ai trouvé pour l'instant. On voit que le résulta est bon puisqu'il affiche d'abord "0" (le premier mot ne contenait pas d'indentation, le deuxième mot contient bel et bien 4 indentations puis de nouveau 0 puis 8 ...)

                                          -
                                          Edité par jeroomusama 12 juin 2016 à 19:45:33

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            12 juin 2016 à 20:32:21

                                            @jeroo: ton print est à l'intérieur de ta seconde boucle for (celle où tu parcours chaque caractère) donc à chaque itération tu affiches la valeur du compteur. Il suffit de la mettre au niveau de la première boucle ;).

                                            J'ai retenté l'exercice, et mon code fait 11s selon le test de psycopy (sur mon mac: celui de fred et candide font à 8s, celui de josmiley 7s, et celui de cerium 50s):

                                            import re
                                            def counter_indentation(text):
                                                pattern = " +"
                                                counters = []
                                                for line in text.splitlines():
                                                    indent = re.match(pattern, line)
                                                    if indent:
                                                        counters.append(indent.end())
                                                    else:
                                                        counters.append(0)
                                                return counters


                                            Par contre j'ai testé sans le splitlines et mon programme a tourné facilement pendant 10 minutes sans résultat. J'ai dû le stopper manuellement o_O.

                                            EDIT: Ah mais que je suis bête >_<. Si je ne mets pas le splitlines() il ne considère pas les lignes mais les lettres :lol:. Bon pour ma défense, au départ j'avais pensé le code pour qu'il lise un fichier et non une chaîne :-°.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Précepte: Le mieux est l'ennemi du bien
                                              12 juin 2016 à 20:36:38

                                              @jeroo: Ok, je viens de voir la modification de ton message. Donc il faut bien mettre le print dans la première boucle ET il faut également retirer les lignes (16 et 17) car c'est elles qui causent ton problème. En effet, la réinitialisation du compteur ne doit pas se faire dans la seconde boucle mais dans la première (juste après l'affichage) ;)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Précepte: Le mieux est l'ennemi du bien
                                                12 juin 2016 à 22:42:36

                                                Super, merci beaucoup Olygrim! :)

                                                Mais si on retire les lignes 16 et 17, la variable continuera à s'incrémenter à partir de la dernière valeur enregistrée... Merci pour ton aide en tout cas, je vais tester tout ça demain (là je suis un peu crevé, je vais aller dormir), je posterai le résulta demain :)

                                                -
                                                Edité par jeroomusama 12 juin 2016 à 22:43:23

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  21 juillet 2016 à 15:31:15

                                                  Bonjour,

                                                  Voici la solution que j'ai trouvée. Elle doit être loin d'être optimale, m'enfin elle fait le job :)

                                                  from sys import argv
                                                  
                                                  script, filename = argv
                                                  i=0
                                                  target = open(filename, 'r')
                                                  for line in target.readlines():
                                                  	print line
                                                  	i+=1
                                                  	tab = line.count("\t")
                                                  	print "There are %d tabulations in line number %d" %(tab, i)

                                                  Je veux bine un petit commentaire !

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Avide de connaissances en électronique/dév/admin sys/db/réseau !
                                                    21 juillet 2016 à 23:07:55

                                                    Quand tu souhaites itérer sur un ensemble de valeurs en connaissant l'index, il est préférable d'utiliser enumerate que d'incrémenter une variable manuellement.

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      22 juillet 2016 à 10:23:33

                                                      Ok, du coup ce serait quelque chose du genre

                                                      from sys import argv
                                                       
                                                      script, filename = argv
                                                      i = 0
                                                      target = open(filename, 'r')
                                                      for i, line in enumerate(target.readlines()):
                                                          print line
                                                          tab = line.count("\t")
                                                          print "There are %d tabulations in line number %d" %(tab, i)

                                                      ?

                                                      Je prends sûrement un peu d'avance, mais j'ai lu qu'il fallait éviter d'utiliser readlines(). Qu'en penses-tu ?

                                                      Merci pour ton retour !

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Avide de connaissances en électronique/dév/admin sys/db/réseau !
                                                        22 juillet 2016 à 10:42:27

                                                        Il y a encore plus simple, readlines n'est pas nécessaire ici.

                                                        Une remarque que j'avais oubliée : toujours ouvrir un fichier dans un with, ça permet de gérer automatiquement la fermeture (que tu ne gères pas du tout dans ton code).

                                                        from sys import argv
                                                          
                                                        script, filename = argv
                                                        with open(filename, 'r') as target:
                                                            for i, line in enumerate(target):
                                                                print line
                                                                tab = line.count("\t")
                                                                print "There are %d tabulations in line number %d" % (tab, i)
                                                        
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          27 mars 2019 à 13:22:55

                                                          bonjour,

                                                          Voilà le code que je propose:

                                                          def compte_espace(fichier):
                                                          
                                                              f=open(fichier,'r')
                                                              res=0
                                                              while f.readline()!="": #en sachant qu'a la fin du fichier, il y a une ligne vide ''
                                                                  lire=f.readline() #lit une ligne puis passe à la suivante quand while effectue une nouvelle iteration
                                                                  i=0
                                                                  while lire[i]==" ":
                                                                      res+=1
                                                                  print(res)



                                                          Je ne peux malheureusement pas savoir s'il fonctionne : je n'ai pas d'ordinateur possédant python pour le moment.

                                                          Merci d'avance pour toute réponse !

                                                          -
                                                          Edité par McAfferty 27 mars 2019 à 13:26:59

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            28 mars 2019 à 9:25:21

                                                            À première vue il ne peut pas fonctionner : f.readline renvoyant une nouvelle ligne à chaque appel, seulement une ligne sur deux sera traitée.

                                                            De plus la seconde boucle whileest infinie.

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              29 février 2020 à 10:30:00

                                                              Merci beaucoup pour ces exercices !

                                                              Le sujet est ancien mais je propose ma solution :

                                                              ''' Mesurer l indentaton dans le fichier indentation.txt '''
                                                              
                                                              results = ''
                                                              
                                                              for ligne in open('indentation.txt', 'r').read().split("\n"):
                                                                  i = 0
                                                                  for char in ligne:
                                                                      if char == ' ':
                                                                          i += 1
                                                                  results += f'{str(i)} '
                                                              
                                                              print(results)

                                                              N'hesitez pas à me le dire si ce n'est pas élégant ou si ce n'est pas la bonne facon de faire !

                                                              -
                                                              Edité par arkanzay 29 février 2020 à 10:30:42

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Code pour mesurer l'indentation

                                                              × 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