lili2006 Posté(e) le 12 octobre 2007 Posté(e) le 12 octobre 2007 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/
ElpanovEvgeniy Posté(e) le 12 octobre 2007 Posté(e) le 12 octobre 2007 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
(gile) Posté(e) le 12 octobre 2007 Posté(e) le 12 octobre 2007 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
lili2006 Posté(e) le 12 octobre 2007 Posté(e) le 12 octobre 2007 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/
Patrick_35 Posté(e) le 12 octobre 2007 Posté(e) le 12 octobre 2007 Salut lili ElpanovEvgeniy est un grand maitre du lisp et il est russe. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lili2006 Posté(e) le 12 octobre 2007 Posté(e) le 12 octobre 2007 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/
ElpanovEvgeniy Posté(e) le 12 octobre 2007 Posté(e) le 12 octobre 2007 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
ElpanovEvgeniy Posté(e) le 13 octobre 2007 Posté(e) le 13 octobre 2007 :) (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
(gile) Posté(e) le 14 octobre 2007 Posté(e) le 14 octobre 2007 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
Matt666 Posté(e) le 19 octobre 2007 Auteur Posté(e) le 19 octobre 2007 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."
ElpanovEvgeniy Posté(e) le 19 octobre 2007 Posté(e) le 19 octobre 2007 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
Matt666 Posté(e) le 19 octobre 2007 Auteur Posté(e) le 19 octobre 2007 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."
Matt666 Posté(e) le 19 octobre 2007 Auteur Posté(e) le 19 octobre 2007 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 gileEt 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."
ElpanovEvgeniy Posté(e) le 19 octobre 2007 Posté(e) le 19 octobre 2007 bag in line 72-74 (if (eq (type pt) 'STR) ;if ;?? ) Evgeniy
Matt666 Posté(e) le 19 octobre 2007 Auteur Posté(e) le 19 octobre 2007 Oups !! I have forgotten that code !!Thank you I change it... "Chacun compte pour un, et nul ne compte pour plus d'un."
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant