Aller au contenu

Messages recommandés

Posté(e)

Bonsoir à toutes et tous,

 

Super ElpanovEvgeniy mais, heu, ça te dérangerai un ch'ti commentaire, car j'y comprend rien et j'aimerai bien, ne serais-ce que suivre un peu ce qui s'passe. Juste dans le domaine du test car je débute ( j'sais même pas si j'peux dire ça!!!) en Lisp.

 

Merci d'avance et bravo à tous pour ces petits (hum, façon de parler,...!) challenge.

 

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)
Bonsoir à toutes et tous,

 

Super ElpanovEvgeniy mais, heu, ça te dérangerai un ch'ti commentaire, car j'y comprend rien et j'aimerai bien, ne serais-ce que suivre un peu ce qui s'passe. Juste dans le domaine du test car je débute ( j'sais même pas si j'peux dire ça!!!) en Lisp.

 

Merci d'avance et bravo à tous pour ces petits (hum, façon de parler,...!) challenge.

 

Je ne connais pas du tout la langue française...

Mes commentaires seront ridicules!

Je demande gile d'aider.

Evgeniy

Posté(e)

Salut Evgeniy,

 

Bravo, encore une merveille !

 

mais nos routines ne retournent pas la même chose :

 

$ (CHALLENGE10GILE3 "point.25.4cm.")
("point." 25.4 "cm.")
_$ (TEST-FOR-BENCH "point.25.4cm.")
("point" 0.25 "cm" 0.0) 

 

Les règles de ce challenge ne sont pas assez précises, on ne sait pas bien ce qu'il faut faire dans des cas comme ça.

 

Lili2006,

 

Je ne veux ni te décourager, ni te désobliger, mais je pense que ce n'est pas vraiment le bon endroit pour débuter.

Ces challenges sont des sortes de joutes ou se comparent des routines qui doivent avoir la même fonction. Chacun y va de sa (ou de ses) routine et les critères (tacites) sont la concision, l'éfficacité, l'élégance, la réactivité...

Donc pas ou peu de commentaire (à part bseb67).

On a un peu essayé des challenges pour débutants, mais ça n'a pas de succès.

 

De plus, en ce qui concerne celui_ci, comme je disais, il n'est pas établi clairement ce que doivent retourner les routines dans les cas particuliers.

En gros le but challenge est de retourner à partir d'une chaine de caractères, une liste dans laquelle les nombres (entiers ou réels) apparaissent comme tels et le reste en tronçons de chaine :

"qvf12qsdf125 5sf 56dfv2" doit être transformée en ("qvf" 12 "qsdf" 125 " " 5 "sf " 56 "dfv" 2)

 

La grosse difficulté vient du traitement des points parfois séparateur décimal parfois caractère alphabétique et l'ambiguité de ceux qui sont entre un caractère numérique et un caractère alphbétique.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Re,

 

ElpanovEvgeniy

Je ne connais pas du tout la langue française...

 

Oups! désolé. Merci alors de participer à ce forum malgrés ce "handicap".

 

(gile)

Je ne veux ni te décourager, ni te désobliger, mais je pense que ce n'est pas vraiment le bon endroit pour débuter.

 

Pas de risque de quoi que ce soit avec moi, je suis surtout trés curieux de tout .

J'ai compris ce que tu as voulu dire !

Effectivement, je sais que ce n'est pas l'endroit pour découvrir le langage Lisp, N'empêche que :

La grosse difficulté vient du traitement des points parfois séparateur décimal parfois caractère alphabétique et l'ambiguité de ceux qui sont entre un caractère numérique et un caractère alphbétique.
ce commentaire m'interesse et pas forcément au sens pur informatique mais aussi en logique mathématique ou autres. J'avoue que je suis assez fan de ce genre de défi, même, et tu le sais, si je ne comprend pas le langage de programmation.

 

En tous les cas, ne changez rien pour le plus grand plaisir de tous le fans de ce forum,...

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Re,

 

C'est cool à lui de venir participer à ce forum.

 

Au passage, Patrick_35, j'ai encore utiliser XLS, XL=>Att, etc... aujourd'hui et vraiment j'hallucine. C'est un super programme, vraiment !

 

Bien sûr, il en est de même pour tous les autres programmes que proposent ici avec une générosité impressionante (et je mesure mes mots!) les différentes personnes qui se reconnaitrons,...

 

ElpanovEvgeniy est un grand maitre du lisp et il est russe.
.

 

Plus on esd'fou, moins y'a d'riz, comme on dis en chine;...

 

Au plaisir de vous lire et relire.

 

 

 

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)
Salut Evgeniy,

 

Bravo, encore une merveille !

 

mais nos routines ne retournent pas la même chose :

 

$ (CHALLENGE10GILE3 "point.25.4cm.")
("point." 25.4 "cm.")
_$ (TEST-FOR-BENCH "point.25.4cm.")
("point" 0.25 "cm" 0.0) 

 

Les règles de ce challenge ne sont pas assez précises, on ne sait pas bien ce qu'il faut faire dans des cas comme ça.

 

Oui, je ne contrôle pas tels cas...

"point.25.4cm."

"25,4cm."

"3/8cm"

 

Evgeniy

Posté(e)

:)

(defun test-for-bench (s)
(defun test1 (a b f)
 (cond
  ((null b)
   (list (if f
          (cond ((vl-position 46 a) (atof (vl-list->string (reverse a))))
                ((vl-position 47 a) (distof (vl-list->string (reverse a))))
                ((vl-position 44 a) (atof (vl-list->string (subst 46 44 (reverse a)))))
                (t (atoi (vl-list->string (reverse a))))
          ) ;_  cond
          (vl-list->string (reverse a))
         ) ;_ if
   ) ;_ list
  )
  (f
   (if (or (= (car b) 44) (< 45 (car b) 58))
    (test1 (cons (car b) a) (cdr b) f)
    (cons (cond ((vl-position 46 a) (atof (vl-list->string (reverse a))))
                ((vl-position 47 a) (distof (vl-list->string (reverse a))))
                ((vl-position 44 a) (atof (vl-list->string (subst 46 44 (reverse a)))))
                (t (atoi (vl-list->string (reverse a))))
          ) ;_  cond
          (test1 (list (car b)) (cdr b) nil)
    ) ;_ cons
   ) ;_ if
  )
  (t
   (if (< 47 (car b) 58)
    (cons (vl-list->string (reverse a)) (test1 (list (car b)) (cdr b) t))
    (test1 (cons (car b) a) (cdr b) nil)
   ) ;_ if
  )
 ) ;_ cond
) ;_ defun
(setq s (vl-string->list s))
(test1 (list (car s))
       (cdr s)
       (if (or (= (car s) 44) (< 45 (car s) 58))
        t
       ) ;_ if
) ;_ test1
)

:)

(TEST-FOR-BENCH "point.25.4cm.") ; => ("point." 25.4 "cm.")
(TEST-FOR-BENCH "point.25,4cm.") ; => ("point." 25.4 "cm.")
(TEST-FOR-BENCH "point.3/8cm.") ; => ("point." 0.375 "cm.") 

 


(challenge10gile4 "qvf12qsdf125 5sf 56dfv2")
               ; => ("qvf" 12 "qsdf" 125 " " 5 "sf " 56 "dfv" 2)
(test-for-bench "qvf12qsdf125 5sf 56dfv2")
               ; => ("qvf" 12 "qsdf" 125 " " 5 "sf " 56 "dfv" 2)
(BenchMark '((challenge10gile4 "qvf12qsdf125 5sf 56dfv2")
            (test-for-bench "qvf12qsdf125 5sf 56dfv2")
           )
) ;_  BenchMark
Benchmarking ...............Elapsed milliseconds / relative speed for 4096 iteration(s):

   (TEST-FOR-BENCH "qvf12qsdf125 5sf 56...).....1984 / 1.11 
   (CHALLENGE10GILE4 "qvf12qsdf125 5sf ...).....2203 / 1 


(challenge10gile4 "point.25.4cm.") ; => ("point." 25.4 "cm.")
(test-for-bench "point.25.4cm.") ; => ("point." 25.4 "cm.")
(BenchMark '((challenge10gile4 "point.25.4cm.") (test-for-bench "point.25.4cm.")))
Benchmarking ...............Elapsed milliseconds / relative speed for 4096 iteration(s):

   (TEST-FOR-BENCH "point.25.4cm.").......1235 / 1.16 
   (CHALLENGE10GILE4 "point.25.4cm.").....1438 / 1 


(challenge10gile4 "point.25,4cm.") ; => ("point." 25 "," 4 "cm.")
(test-for-bench   "point.25,4cm.") ; => ("point." 25.4 "cm.")
(BenchMark '((challenge10gile4 "point.25,4cm.")(test-for-bench   "point.25,4cm.")))
Benchmarking ...............Elapsed milliseconds / relative speed for 4096 iteration(s):

   (TEST-FOR-BENCH "point.25,4cm.").......1266 / 1.1 
   (CHALLENGE10GILE4 "point.25,4cm.").....1391 / 1 




(challenge10gile4 "point.3/8cm.") ; => ("point." 3 "/" 8 "cm.")
(test-for-bench "point.3/8cm.")   ; => ("point." 0.375 "cm.")
(BenchMark '((challenge10gile4 "point.3/8cm.")(test-for-bench "point.3/8cm.")))
Benchmarking ...............Elapsed milliseconds / relative speed for 4096 iteration(s):

   (TEST-FOR-BENCH "point.3/8cm.").......1187 / 1.12 
   (CHALLENGE10GILE4 "point.3/8cm.").....1328 / 1 

 

edit = fix bag...

 

[Edité le 14/10/2007 par ElpanovEvgeniy]

Evgeniy

Posté(e)

Excellent, Evgeniy !!!

You are a real MASTER !

 

Concis, élégant, efficace et exhaustif (même les fractions sont traitées) je suis plein d'admiration.

 

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

C'est vrai que c'est impressionnant !!

 

Bravo à vous tous pour ces routines, ya du boulot de compréhension :D

 

par contre je crois qu'aucune de ces routines ne gère les chaînes de chiffres avec un 0 au début...

Genre "0123"...

 

Mais bon ce n'est pas trop compliqué, normalement !!

 

A bientot !

Matt.

 

PS : Et encore bravo, c'est vraiment très intéressant ces challenges..

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)
C'est vrai que c'est impressionnant !!

 

Bravo à vous tous pour ces routines, ya du boulot de compréhension :D

 

par contre je crois qu'aucune de ces routines ne gère les chaînes de chiffres avec un 0 au début...

Genre "0123"...

 

Mais bon ce n'est pas trop compliqué, normalement !!

 

A bientot !

Matt.

 

PS : Et encore bravo, c'est vraiment très intéressant ces challenges..

 

(read "0123")  ; => 123
(atoi "0123")  ; => 123
(atof "0123")  ; => 123.0
(distof "0123"); => 123.0
(princ 0123)   ; => 123
(print 0123)   ; => 123 

Evgeniy

Posté(e)

Hello ElpanovEvgeniy !

Thank you for your quick answer !

 

The problem is we loose the first zero...

if we have "0123", the program must return (0 123)... No ?

 

A bientot..

Matt. ;)

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Un exemple d'utilisation du challenge !!

 

;;;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
;;; Crée des copies Incrémentées du texte sélectionné
(defun c:cpi ( / ent ntxt inc pt val lst ntxt)
    (setq
         cmdecho (getvar "cmdecho")
         m:err *error*
         *error* erreur
    )
    (setvar "cmdecho" 0)
    (command "_undo" "D")
    (if (eq (ssget "i") nil)
         (setq ent (car (entsel "\nSélectionner texte à incrémenter :")))
         (if (> (sslength (ssget "i")) 1)
              (setq ent (car (entsel "\nSélectionner texte à incrémenter :")))
              (setq ent (ssname (ssget "i") 0))
         )
    )
    (cond
         ((and 
                   ent
                   (member (cdr (assoc 0 (entget ent))) '("TEXT" "MTEXT"))
                   (setq inc (read2 (getstring "\nIncrément : ")))
                   (setq pdst (getpoint (cdr (assoc 10 (entget ent)))"\nPoint d'insertion :"))
              )
              (while pdst
                   (if (or (eq pdst "I") (eq pdst "i"))
                        (progn
                             (while (not (setq inc (read2 (getstring "\nNouvel incrément : ")))))
                             (setq pdst (getpoint (cdr (assoc 10 (entget ent)))"\nNouveau point d'insertion :"))
                        )
                   )
                   (setq val (cdr (assoc 1 (entget ent))))
                   (if (and  (eq (substr val 1 1) "0")
                             (> (strlen val) 2)
                        )
                        (setq lst (cons 0 (sep val)))
                        (setq lst (sep val))
                   )
                   (cond
                        ((and     (eq 1 (length lst))
                                  (or  (eq (type (car lst)) 'REAL)
                                       (eq (type (car lst)) 'INT)
                                  )
                             )
                             (setq ntxt (+ inc (car lst)))
                             (if (and  (eq (substr val 1 1) "0")
                                       (< ntxt 10)
                                       (eq (type (car lst)) 'INT)
                                       (/= (substr (princ-to-string ntxt) 1 1) "0")
                                  )
                                  (setq ntxt (strcat "0" (princ-to-string ntxt)))
                                  (setq ntxt (princ-to-string ntxt))
                             )
                        )
                        ((< 1 (length lst))
                             (setq ntxt "")
                             (foreach pt lst
                                  (if (/= 0.00 pt)
                                       (if (or 
                                                 (eq (type pt) 'INT)
                                                 (eq (type pt) 'REAL)
                                            )
                                            (setq ntxt (strcat ntxt (princ-to-string (+ inc pt)) ))
                                            (setq ntxt (strcat ntxt pt))
                                            
                                       )
                                       (if (or 
                                                 (eq (type pt) 'INT)
                                                 (eq (type pt) 'REAL)
                                            )
                                            (setq ntxt (strcat ntxt "0"))
                                       )
                                  ) 
                             )
                        )
                   )
                   (if ntxt
                        (entmake (list
                                  (cons 0  (cdr (assoc 0 (entget ent))))
                                  (cons 10 pdst)
                                  (cons 1  ntxt)
                                  (cons 8  (cdr (assoc 8 (entget ent))))
                                  (cons 6  (cdr (assoc 6 (entget ent))))
                                  (cons 62 (cdr (assoc 62 (entget ent))))
                                  (cons 71 (cdr (assoc 71 (entget ent))))
                                  (cons 72 (cdr (assoc 72 (entget ent))))
                                  (cons 7  (cdr (assoc 7 (entget ent))))
                                  (cons 40 (cdr (assoc 40 (entget ent))))
                        ))
                        (princ "\nTexte créé.")
                        
                   )
                   (initget "I")
                   (setq 
                        ent (entlast)
                        pdst (getpoint (cdr (assoc 10 (entget ent)))"\nNouveau point d'insertion [incrément] :")
                   )
                   
              )
         )
    )
    (command "_undo" "F")
    (setq *error* m:err  m:err nil)
    (setvar "cmdecho" cmdecho)
    (princ)
)

 

Avec sep = routine de ElpanovEvgeniy ou de gile

Et read2 c'est ça

;;; Read en prenant en compte le point
(defun read2 (str)
    (if (/= str ".")
         (read str)
         str
    )
)

 

Voilà !

A bientot.

matt

 

EDIT : PS Faut pas oublier les VL avant princ-to-string, et tout le bazaar... J'ai pas testé sur autoCAD !

EDIT2 : Bout de code en trop déclé par ElpanovEvgeniy

[Edité le 19/10/2007 par Matt666]

 

 

[Edité le 19/10/2007 par Matt666]

"Chacun compte pour un, et nul ne compte pour plus d'un."

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité