IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Défi


Sujet :

C

  1. #101
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Oui il cartonne. Erreur de compil "attention : array subscript has type `char'"
    Mais ça marche avec -Wno-char-subscripts, une question de char signé je crois.

    Tiens essayes celui-là
    Fichiers attachés Fichiers attachés

  2. #102
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Erreur de compil "attention : array subscript has type `char'"
    Bizarre aucun warning sous devcpp.....

    Mais je pense que cela doit venir de
    Oui c'est pas très propre

  3. #103
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Sympa ton code Lunixinclar, mais mettre les lettres en hexa, cela ne permet pas d'aller plus vite, et cela peut se révéler non portable.

    En tout cas, c'est super court comme code

  4. #104
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Lunixinclar
    Tiens essayes celui-là
    L'hexa c'est vraiment obligatoire ou c'est pour faire joli ?

    Si j'ai bien vu, quitte à comparer comme tu le fais, tu gagnerais probablement en rapidité en faisant une comparaison avec un uint64_t ou 2 uint32_t (une ou deux comparaisons au lieu de 7 ou 8 + comparaison d'entiers de 32 ou 64 bits au lieu de comparaisons, plus lentes, sur des char)...Enfin, c'est juste une idée...
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  5. #105
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Ti-R
    Bizarre aucun warning sous devcpp.....

    Mais je pense que cela doit venir de
    Oui c'est pas très propre
    devcpp ne doit pas compiler avec -Wall. De toute façon c'est vraiment acceptable comme construction à mon avis : ce n'est pas comme si utiliser un char comme indice risquait de provoquer des débordements en soi...
    D'ailleurs ce n'est qu'un warning, pas une erreur.

    Par ailleurs utiliser les valeurs hexa pour les lettres c'est presque de l'obfuscation... Le code est ultra-court, mais il faut dire qu'il s'en tient au minimum demandé ! En tout cas dans mes benchmark il est légèrement plus lent que celui de Ti-R (c'est infime).

    --
    Jedaï

  6. #106
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par David.Schris
    L'hexa c'est vraiment obligatoire ou c'est pour faire joli ?

    Si j'ai bien vu, quitte à comparer comme tu le fais, tu gagnerais probablement en rapidité en faisant une comparaison avec un uint64_t ou 2 uint32_t (une ou deux comparaisons au lieu de 7 ou 8 + comparaison d'entiers de 32 ou 64 bits au lieu de comparaisons, plus lentes, sur des char)...Enfin, c'est juste une idée...
    Je viens d'essayer en modifiant son code pour que ça utilise deux uint32_t, mais ça l'a plutôt ralenti... Peut-être m'y suis-je mal pris.

    --
    Jedaï
    Fichiers attachés Fichiers attachés

  7. #107
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Jedai
    Je viens d'essayer en modifiant son code pour que ça utilise deux uint32_t, mais ça l'a plutôt ralenti... Peut-être m'y suis-je mal pris.

    --
    Jedaï
    J'avoue, l'idée m'est venue et je l'ai partagée sans vraiment y réfléchir avant, donc...ça vaut ce que ça vaut...
    Hypothèse : le ralentissement (ou le non-gain) est peut-être dû au fait que les données ne sont pas alignées...?...
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  8. #108
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Bonsoir,

    Voilà, j'ai fait mon parser. Il supporte pas mal de cas de figures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <html>
    <head>
    <title>Test Html</title>
    </head>
    <body>
    0:Monsieur Durant s'en allait au marché <a href="http://www.marche.com(1)">
    le marché</a>
    1:Monsieur Durant s'en allait au marché <A href="http://www.marche.com(2)">
    le marché</a>
    2:Monsieur Durant s'en allait au marché <A HREF="http://www.marche.com(3)">
    le marché</a>
     
    3:Monsieur Durant s'en allait au marché <a href='http://www.marche.com(4)'>
    le marché</a>
    4:Monsieur Durant s'en allait au marché <A href='http://www.marche.com(5)'>
    le marché</a>
    5:Monsieur Durant s'en allait au marché <A HREF='http://www.marche.com(6)'>
    le marché</a>
    6:Monsieur Durant s'en allait au marché <a
    href='http://www.marche.com(7)'>
    le marché</a>
    7:Monsieur Durant s'en allait au marché <A
    href='http://www.marche.com(8)'>
     
    le marché</a>
    8:Monsieur Durant s'en allait au marché <A
    HREF='http://www.marche.com(9)'>
    le marché</a>
    9:Monsieur Durant s'en allait au marché <a
    href="http://www.marche.com(10)">
    le marché</a>
    10:Monsieur Durant s'en allait au marché <A
    href="http://www.marche.com(11)">
    le marché</a>
    11:Monsieur Durant s'en allait au marché <A
    HREF="http://www.marche.com(12)">
    le marché</a>
     
    12:Monsieur Durant s'en allait au marché <A
    href=http://www.marche.com(13)>
    le marché</a>
    13:Monsieur Durant s'en allait au marché <A
    HREF=http://www.marche.com(14)>
    le marché</a>
    14:Monsieur Durant se cassa la jambe au marché <img onclick="alert('<a href="creak"'>crack</a>')" src="img_blabla/img.gif(15)" />
    15:Monsieur Durant s'en allait au marché <a HrEf=
    "http://www.marche.com(16)">marche</a>
    16:Monsieur Durant s'en allait au marché <a class="blob" HrEf=
    "http://www.marche.com(17)">marche</a>
    17:Monsieur Durant s'en allait au marché <a hreflang="fr" 
    href="http://www.marche.com(18)">marche</a>
     
    <img src="img_bla/bli.png(19)" href="blablab">
    <iMg SrC="imags/blabi.png(20)">
    <img
    Src=imgage/blibli(21) />
    <img
    src=/img/bili(22) />
    <img src=/img/nlib(23) />
    <img class="blab" src="/img/lib(24)">
    <a href="/http.com(25)"></a>
    </body>
    </html
    À part ça le code est assez laid, je prendrais le temps de le rendre plus lisible et de le fractionner un peu ...
    Fichiers attachés Fichiers attachés
    Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/

  9. #109
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Pour le fun j'ai fait une version de mon code en UINT32
    Suivant l'idée de David.Schris

    Bon l'inconvénient de la méthode, c'est que maintenant hReF ne passe plus, juste href et HREF et IMG= et img=

    C'est juste pour le fun et il y a plein de jolie warning car c'est pas très propre

    Et j'ai mis une "contest_html_v0.2.c", qui empêche un buffer overflow si l'url fait plus de 1024, c'est juste le premier code corrigé, avec un changement de la taille du buffer pour le chargement des données.

    [EDIT]
    Dans la version fun, modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "IMG=" en " IMG"
    "img=" en " img"
    Sinon les images ne seront pas prise en compte... oups
    [/EDIT]
    Fichiers attachés Fichiers attachés

  10. #110
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Il y a des failles dans ton code Lunixinclar

    Si le dernier caractère des 8ko du début de la page est '=', que tu recharges le reste de ta page via fread et que tu tests ensuite avec n=0 -> buf[n-1] donc buf[-1] donc -> problème

    Si b supérieur à 1023 -> problème aussi

    Je dois avoir aussi des erreurs et j’ai eu exactement les mêmes problèmes.

  11. #111
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Bonjour,

    J'ai modifié mon code pour supporté plus de cas et gagné quelques nanos par-ci, par-là.
    Fichiers attachés Fichiers attachés
    Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/

  12. #112
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Bon je poste une version speed... qui a les mêmes limitation que Lunixinclar

    Pour le fun
    Fichiers attachés Fichiers attachés

  13. #113
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Salut, ça compile plus
    Ti-R-3.c:31: error: erreur de syntaxe before "uint32_t"
    Ti-R-3.c: Dans la fonction « ParseLink »:
    Ti-R-3.c:35: error: `_s' undeclared (first use in this function)
    Ti-R-3.c:35: error: (Each undeclared identifier is reported only once
    Ti-R-3.c:35: error: for each function it appears in.)
    Ti-R-3.c:49: error: `_low_case_name' undeclared (first use in this function)
    Ti-R-3.c:49: error: `uint32_t' undeclared (first use in this function)
    Ti-R-3.c:49: error: erreur de syntaxe before ')' token
    Ti-R-3.c:49: error: `_up_case_name' undeclared (first use in this function)


    Tchetch oki http://2007.perso.orange.fr/resultats.htm

  14. #114
    Membre confirmé Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Points : 477
    Points
    477
    Par défaut
    Ben il va falloir optimiser encore un peu tout ça ... (si jamais il compile sur Win32 si tu enlèves les redéfinitions de getc et putc (mais il sera plus lent))

    Sinon ne serait-il pas intéressant de faire aussi un petit test sur les cas qui peuvent être traités par ces parsers ?
    On fait une liste de liens des plus simples aux plus complexes et on compte combien le parser en trouve à la fin ...
    Mon wiki (on y parle Debian principalement) : http://www.tchetch.net/

  15. #115
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Si si Lunixinclar met le minimum en option de compil
    Sans passer les warning en errors.

    Enlève -Wall

    ps: J'ai remis à jour le fichier "contest_html_v0.3_speed.c" pour enlever des warnings et corriger 2 trucs.

  16. #116
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Ta page HTML est super Tchetch. Pour un webbot.

    - Et sinon t'as fait quoi cet été?
    - Bah j'ai fait la course aux micro-secondes c'est super excitant!

    Avec ou sans Wall veut pas comp
    (fausse joie sur le 13ms joie désolé mon algo était foireux c'est corrigé)
    Allez Ti-R faut que ça compile faut que tu repasses devant

  17. #117
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Moi je compil le truc...
    Je run cela fonctionne...

    Sous DevCpp
    Compiler: Default compiler
    Building Makefile: "C:\Dev\C-Cpp\DevCpp\projet\Makefile.win"
    Executing make clean
    rm -f main.o test_html.exe

    gcc.exe -c main.c -o main.o -I"C:/Dev/C-Cpp/DevCpp/include" -fexpensive-optimizations -O3

    gcc.exe main.o -o "test_html.exe" -L"C:/Dev/C-Cpp/DevCpp/lib" -s

    Execution terminated
    Compilation successful

  18. #118
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    essaye avec un tit batch pour voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @echo off
    @gcc -o Ti-R-3.exe TiR-3.c
    @pause
    Si ça marche pas bienvenue dans les joies de la portabilité

  19. #119
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Le problème vient plutôt du fait que uint32_t n'est pas dans la même librairie sous Windows(Mingw) et sous Linux... Il suffit de remplacer uint32_t par unsigned int sur la plupart des plateformes (et nous ne cherchons pas à faire un parser pour l'embarqué, donc...). Un petit coup de sed et il n'y paraîtra plus.

    (NB : dans mes benchs il n'est pas plus rapide que ton premier essai)
    --
    Jedaï

  20. #120
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    La v0.3 semble buggué, sur wblnks.html elle trouve plus de 10000 liens...
    Donc faut laisser tomber...

Discussions similaires

  1. Défi Septembre 2004
    Par grishka dans le forum XSL/XSLT/XPATH
    Réponses: 30
    Dernier message: 26/12/2005, 17h37
  2. [défi n°1] limite de javascript en calcul?
    Par javatwister dans le forum Général JavaScript
    Réponses: 30
    Dernier message: 20/08/2005, 15h02
  3. Somme totale... Défi !
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 04/08/2005, 21h03
  4. Défi
    Par ti-ben dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 03/02/2005, 06h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo