Rechercher dans la communauté
Affichage des résultats pour « challenge » dans sujets.
502 résultats trouvés
-
En me connectant je suis tombé sur ça : Du coup je n'ai pas pus résister à ceci : ;) La scene:* un poulet au bord d'une route. Il la traverse. La question: * Pourquoi le poulet a-t-il traverse la route ? :casstet: RENE DESCARTES : Pour aller de l'autre cote. PLATON : Pour son bien. De l'autre cote est le Vrai. ARISTOTE : C'est la nature du poulet de traverser les routes. KARL MARX : C'etait historiquement inevitable. CAPITAINE JAMES T. KIRK : Pour aller la ou aucun autre poulet n'etait alle auparavant. HIPPOCRATE : En raison d'un exces de secretion de son pancreas. MARTIN LUTHER KING JR. : J'ai la vision d'un monde ou tous les poulets seraient libres de traverser la route sans avoir a justifier leur acte. MOISE : Et Dieu descendit du paradis et Il dit au poulet : " Tu dois traverser La route " . Et le poulet traversa la route et Dieu vit que cela etait bon. RICHARD M. NIXON : Le poulet n'a pas traverse la route, je repete, le poulet n'a JAMAIS traverse la route. NICOLAS MACHIAVEL : L'evenement important c'est que le poulet ait traverse la route. Qui se fiche de savoir pourquoi? La fin en soi de traverser la route justifie tout motif quel qu'il soit. SIGMUND FREUD : Le fait que vous vous preoccupiez du fait que le poulet ait traverse la route revele votre fort sentiment d'insecurite sexuelle latente. BILL GATES : Nous venons justement de mettre au point le nouveau Poulet Office 2003 ", qui ne se contentera pas seulement de traverser les routes, mais couvera aussi des oeufs, classera vos dossiers importants, etc... BOUDDHA : Poser cette question renie votre propre nature de poulet. GALILEE : Et pourtant, il traverse. CANTONA : Le poulet, il est libre le poulet. Les routes, quand il veut, il les traverse. CHARLES DE GAULLE : Le poulet a peut-etre traverse la route, mais il n'a pas encore traverse l'autoroute ! JACQUES CHIRAC : Parce que je n'ai pas encore dissous la route. L'EGLISE DE SCIENTOLOGIE : La raison est en vous, mais vous ne le savez pas encore. Moyennant la modique somme de 10 000F par seance, plus la location d'un detecteur de mensonges, une analyse psychologique nous permettra de la decouvrir. BILL CLINTON : Je jure sur la constitution qu'il ne s'est rien passe entre ce poulet et moi. EINSTEIN : Le fait que ce soit le poulet qui traverse la route ou que ce soit la route qui se meuve sous le> poulet depend uniquement de votre referentiel. ANDERSEN CONSULTING : La deregulation du cote de la route ou se trouvait le poulet menacait sa position dominante sur le marche. Le poulet etait donc confronte au challenge significatif de creer et developper les competences requises pour ce nouveau marche competitif. Andersen Consulting, en partenariat avec le client, a aide le poulet a repenser sa strategie de distribution physique et ses processus d'implantation. En utilisant le nouveau Poultry Integration Model (PIM), Andersen a aide le poulet a mettre a profit ses talents, methodologies, connaissances, fonds et experiences de maniere a aligner le personnel, les processus et la technologie du poulet avec sa strategie globale au sein d'un Program Management Framework. Andersen Consulting a reuni pendant un tour de conference de deux jours un large panel constitue d'analyse des routes et des meilleurs poulets avec des consultants Andersen possedant de grandes connaissances dans l'industrie du transport afin de profiter au maximum de leur capital de connaissances personnelles, implicitement et explicitement, et de leur permettre d'entrer en synergie les uns avec les autres de maniere a parvenir au but implicite de sortir, d'architecturer et d'implanter avec succes un framework d'entreprise au travers du continuum des processus de trans-mediane de la gent gallinace. La reunion a eu lieu dans un endroit ressemblant a un parc, ce qui a permis de creer un environnement plein de sens, en ce qu'il vehiculait un message strategique pour l'industrie, construit sur une vision coherente et claire du marche, et qu'il etait en adequation avec les valeurs fondamentales, la mission et la vision du poulet. Cela nous a guide tout au long de la solution d'integration de l'entreprise. Andersen Consulting a participe a la reussite de la migration du poulet. Merci pour votre attention. ZEN : Le poulet peut vainement traverser la route, seul le Maitre connait le bruit de son ombre derriere le mur. PREMIER MINISTRE : Le poulet n'a pas encore traverse la route, mais le gouvernement y travaille. JEAN ALESI : Je ne comprends pas, theoriquement, le poulet il avait le temps de passer. NELSON MONTFORT : J'ai a cote de moi l'extraordinaire poulet qui a reussi le formidable exploit de traverser cette superbe route : " Why did you cross the road?"; " Cot cot ! "; " Eh bien il dit qu'il est extremement fier d'avoir reussi ce challenge, ce defi, cet exploit. C'etait une traversee tres dure, mais il s'est accroche, et... " RICHARD VIRENQUE : C'etait pas un lapin ? ORANGINA ROUGE : PASKEEEEEEUUUUUHHHH JEAN-CLAUDE VAN DAM : Le poulet la road il la traverse parce qu'il sait qu'il la traverse, tu vois la route c'est sa vie et sa mort, la route c'est Dieu c'est tout le potentiel de sa vie, et moi Jean Claude Super Star quand je me couche dans Timecop quand le truck arrive je pense a la poule et a Dieu et je fusionne avec tout le potentiel de la life de la road ! Et ca c'est beau !
-
CHALLENGE AUTOCAD/COVADIS/PROGRAMMATION
La Lozère a répondu à un(e) sujet de lili2006 dans AutoCAD 2013
Salut Lilian, Ta méthode est pas mal, mais tu as un décalage, car tu fais le calcul pour chaque ligne. Pour calculer la distance il faut utiliser 2 coordonnées, soit 2 lignes. Du coup, ta formule doit sauter une ligne sur deux. Pour fair ceci, sélectionne tes cellules F6 et F7, et après tu tires vers le bas. Du coup ton calcul sera bien aligné, une ligne sur deux. Dans ton cas ça calcul en biai une fois sur deux.... Et on ne sais pas dans quel sens. Pour simplifier la chose, il faudrait faire commencer les polylignes exactement au même X, ainsi pas de décalage au départ, soit moins de sources d'erreurs, et tri plus lisible. Chose à faire attention quand même, si tu es en courbe, au bout d'un moment il pourrait y avoir un décalage supérieur à tes 6m de la commande "diviser". Mais bon pour la demande, avec 20 voir 50m, le risque est quasiment nul sur une autoroute. Du coup.... A voir si il y a pas une simplification de la feuille excel en utilisant 2 blocs différents pour chaque polyligne. Sympa le challenge... Affaire à suivre. A plus. -
CHALLENGE AUTOCAD/COVADIS/PROGRAMMATION
lovecraft a répondu à un(e) sujet de lili2006 dans AutoCAD 2013
Bonsoir Lilian, C'est un petit challenge. Pour moi la solution la plus rapide pour ce genre de projet (il ne faut pas oublier que nous sommes sur une autoroute et ce qui intéressant dans ce genre de projet ce de connaitre la largeur de BAU aux Pk (point kilométrique précis). Voici ma solution: 1 - Créer un axe sur la bande blanche (39-13) ou au milieu du TPC (prise en charge du PK) 2 - Le profil en long peut etre fictif ou on prends le TN 3- Profil type avec des point codés 4- Listing des points codés 5- Exploitation sous excel avec largeur de BAU au droit de chaque PK C'est la même technique avec Mensura C'est aussi la technique qu'on utilise en BE Merci de vos remarque Cordialement, Laurent -
Salut, A cette occasion j’ai également découvert que la règle soustractive IV, IX etc… N’a pas toujours été la norme, cela c’est (entre autre) également noté IIII, VIIII etc… D’ailleurs Cet usage fut repris en horlogerie, où le chiffre 4 s'écrit IIII, essentiellement pour des raisons de lisibilité sur un cadran rond, surtout quand les bières (gravures chiffrées) y sont inclinées. Cela m’a beaucoup amusé de porter un autre regard sur le quadrant de mon horloge :(rires forts): , dire qu’il m’a fallu 40 ans et ce challenge pour observer et réfléchir à ce détail… :blink: Amicalement (Ps : Patrick_35 bien vu pour ta ligne de code, je dois avouer que je n’avais pas poussé plus loin la généralisation de l’usage de vl-string->list, merci car explodestr est une routine appelé dans d’autres fonctions bibliothèques).
-
Bonsoir, En tombant sur ce challenge un peu par hasard, l’idée m’a plu, et je mis suis attelé dans la soirée histoire de voir si il restait encore de la place pour d’autres propositions : Pour les fonctions de conversions : Décimal en Romain : Je n’ai rien pondu de neuf qui puisse détrôner les codes proposés précédemment. Romain en Décimal: une variante qui devrait avoir sa place parmi celles de Patrick_35 et de (gile) ;; Conversion de chiffre Romain en Décimal ;; Exemple: (roman2arabic "MMXII") -> 2012 (defun roman2arabic (str / lst) (cond ((setq lst (assoc (substr str 1 2) '(("IV" . 4) ("IX" . 9) ("XL" . 40) ("XC" . 90) ("CD" . 400) ("CM" . 900)))) (+ (cdr lst) (roman2arabic (substr str 3))) ) ((setq lst (assoc (substr str 1 1) '(("I" . 1) ("V" . 5) ("X" . 10) ("L" . 50) ("C" . 100) ("D" . 500) ("M" . 1000)))) (+ (cdr lst) (roman2arabic (substr str 2))) ) ((= str "") 0) ) ) (Ps : Au passage sur cette version si on sort de la plage de caractère la fonction renvoie une erreur, plutôt qu'un résultat erroné) Pour la fonction d'incrémentation : Ma solution premiere ;; VDH-Bruno Explose un string (fonction symétrique à strcat) ;; Exemple: (explodestr "string") -> ("s" "t" "r" "i" "n" "g") (defun explodestr (str) (if (/= str "") (cons (substr str 1 1) (explodestr (substr str 2))))) (defun I+ (s / foo) (defun foo (n l r) (cond ((and r (= n (car l) (cadr l) (caddr l))) (if (= (cadddr l) (car r)) (cons (cadr r) (cons n (cddddr l))) (cons (car r) (cddr l)) ) ) ((and (/= (car l) (cadr l)) (= n (cadr l))) (foo (car l) (cddr l) (cddr r)) ) (T (cons n l)) ) ) (apply 'strcat (reverse (foo "I" (reverse (explodestr s)) '("V" "X" "L" "C" "D" "M") ) ) ) ) Puis une seconde version sur le même algorithme, mais cette fois reprenant l’idée qui consiste à transformer la chaine en liste de caractère codé. (defun I+ (s / foo) (defun foo (n l r) (cond ((and r (= n (car l) (cadr l) (caddr l))) (if (= (cadddr l) (car r)) (cons (cadr r) (cons n (cddddr l))) (cons (car r) (cddr l)) ) ) ((and (/= (car l) (cadr l)) (= n (cadr l))) (foo (car l) (cddr l) (cddr r)) ) (T (cons n l)) ) ) (vl-list->string (reverse (foo 73 (reverse (vl-string->list s)) '(86 88 76 67 68 77)) ) ) ) A+
-
Bonjour à tous et merci de vos nombreuses contributions qui m'aident souvent dans mon utilisation quotidienne d'Autocad, moi qui suis un autodidacte. Je vous écris aujourd'hui pour vous soumettre ce qui me semble un challenge, si toutefois c'est possible à faire... Alors, 1°)- je voudrais savoir s'il est possible de créer une macro (VBA, ou LISP) qui permette de ne pas se "taper" les huit pages de préparation du tableau lors d'une extraction de données. En effet,j'ai environ 4500 blocs, représentant des tentes (montants, pattes de fixation, boulons, écous, toilage, porte, bloc secours, etc., etc.), toutes comportant d'autres blocs représentant des éléments communs mais aussi des éléments distincs, dont je dois faire le décompte. En utilisant l'extraction de données j'y arrive mais je dois tout refaire [je parle là des 8 pages de préparation même avec un modèle .dxe pré-enregistré] à chaque fois; et en plus je dois sélectionner mes tentes une par une. En effet: 2°)- Sur chaque plan j'ai plusieurs tentes différentes et je ne peux pas les sélectionner une par une ce serait trop long, or lorsque je fais une sélection globale, l'extracteur réunis tous les éléments identiques sans les regrouper tente par tente. Ya t'il selon vous un moyen de regrouper les extractions d'éléments de composition des tentes, tente par tente; sachant que ces dernières sont elles aussi des blocs ?... Si toutefois ma question vous appaissait par trop absconse, voici mon adresse mail pour plus ample informé, le cas échéant... cremieux.henry@gmail.com
-
Evolution dans le metier de dessinateur/concepteur mecanique ?
Guillaume MASSART a répondu à un(e) sujet de CAD-xp dans Emploi, monde du travail
Eh oui , la stagnation... Ce qui être intéressant c'est de tabler sur des entreprises à l'internationale, comme ça même si l'aspect technique n'est pas évolué, tu auras l'aspect international et là par contre tu ouvres des portes supplémentaires (c'est mon cas aujourd'hui, la technicité n'est pas exceptionnelle mais la gestion de projet avec des clients de tout horizon est un réel challenge parfois) N'hésite pas à t'autoformer, rencontrer des fabricants, des ateliers d'usinage de tôlerie etc. pour apprendre des gens qui maitrisent l'oeuvre et non la conception, c'est comme ça qu'on progresse. L'utilisation d'un logiciel c'est du vent, si tu ne sais pas concevoir, tu auras beau être un dieu d'inventor ou Solidworks, tu feras des conceptions mauvaises. -
Création de lien word vers Autocad et vis versa
didier a répondu à un(e) sujet de dacar dans AutoCAD LT 95, 97, 98
coucou challenge, j'ai bien entendu chat lange, qu'est ce que tu veux dire par : faire clignoter du texte dans AutoCad ? là on parle de challenge :( -
Bonjour, Suite à une demande sur le forum Autodesk, je me suis amusé à essayé d'écrire une fonction pour réaliser cela. Si celle-ci fonctionne bien (quelque soit le SCU) sur des textes simples, j'aurais trouvé intéressant de l'étendre aux textes multi-lignes. Mais je ne vois pas comment appréhender ceux-ci..., un challenge ? Voici déjà le code pour les textes simples (vl-load-com) (defun transpts (apt matrix / ) (list (+ (* (car (nth 0 matrix)) (car apt)) (* (car (nth 1 matrix)) (cadr apt)) (* (car (nth 2 matrix)) (caddr apt)) (cadddr (nth 0 matrix)) ) (+ (* (cadr (nth 0 matrix)) (car apt)) (* (cadr (nth 1 matrix)) (cadr apt)) (* (cadr (nth 2 matrix)) (caddr apt)) (cadddr (nth 1 matrix)) ) (+ (* (caddr (nth 0 matrix)) (car apt)) (* (caddr (nth 1 matrix)) (cadr apt)) (* (caddr (nth 2 matrix)) (caddr apt)) (cadddr (nth 2 matrix)) ) ) ) (defun c:stabilo ( / js dxf_ent dxf_210 dxf_10 dxf_50 txt_box mat entline PathObj EndDist StartPoint EndPoint tmp tmp0 e_last dxf_last) (setq js (ssget "_+.:E:S" '((0 . "TEXT")))) (cond (js (setq dxf_ent (entget (ssname js 0)) dxf_210 (cdr (assoc 210 dxf_ent)) dxf_10 (trans (cdr (assoc 10 dxf_ent)) dxf_210 0) dxf_50 (cdr (assoc 50 dxf_ent)) txt_box (textbox dxf_ent) mat (mapcar '(lambda (n x d / ) (append n (list x) (list d)) ) (mapcar '(lambda (v) (trans v dxf_210 0)) '((1 0 0) (0 1 0) (0 0 1))) dxf_10 '(0 0 0 1) ) ) (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") (assoc 67 dxf_ent) (assoc 410 dxf_ent) (assoc 8 dxf_ent) '(100 . "AcDbLine") (cons 10 (transpts (car txt_box) mat)) (cons 11 (transpts (polar (car txt_box) dxf_50 (- (caadr txt_box) (caar txt_box))) mat)) '(39 . 0) '(60 . 1) (assoc 210 dxf_ent) ) ) (setq entline (entlast) PathObj (vlax-ename->vla-object entline) EndDist (vlax-curve-getDistAtParam PathObj (vlax-curve-getEndParam PathObj)) StartPoint nil EndPoint nil ) (princ "\nDonnez le debut du surlignage du texte") (while (= 5 (car (setq tmp (grread t 5 1)))) (cond ((= 5 (car tmp)) (if StartPoint (grdraw (trans StartPoint 0 1) (trans tmp0 0 1) -1)) (setq StartPoint (vlax-curve-getClosestPointTo PathObj (trans (cadr tmp) 1 0)) tmp0 (polar (trans StartPoint 0 dxf_210) (+ (* 0.5 pi) dxf_50) (- (cadadr txt_box) (cadar txt_box))) ) (grdraw (trans StartPoint 0 1) (trans tmp0 dxf_210 1) -1) ) (T (princ "\nArrêt anormal de la commande ")) ) ) (entmake (list '(0 . "SOLID") '(100 . "AcDbEntity") (assoc 67 dxf_ent) (assoc 410 dxf_ent) (assoc 8 dxf_ent) '(62 . 2) '(100 . "AcDbTrace") (cons 10 (trans StartPoint 0 dxf_210)) (cons 11 (trans StartPoint 0 dxf_210)) (cons 12 tmp0) (cons 13 tmp0) '(39 . 0) (assoc 210 dxf_ent) ) ) (setq e_last (entlast) dxf_last (entget e_last) ) (princ "\nDonnez la fin du sulignage du texte") (while (= 5 (car (setq tmp (grread t 5 1)))) (cond ((= 5 (car tmp)) (setq EndPoint (vlax-curve-getClosestPointTo PathObj (trans (cadr tmp) 1 0)) tmp0 (polar (trans EndPoint 0 dxf_210) (+ (* 0.5 pi) dxf_50) (- (cadadr txt_box) (cadar txt_box))) ) (setq dxf_last (subst (cons 11 (trans EndPoint 0 dxf_210)) (assoc 11 dxf_last) dxf_last) dxf_last (subst (cons 13 tmp0) (assoc 13 dxf_last) dxf_last) ) (entmod dxf_last) ) (T (princ "\nArrêt anormal de la commande ")) ) ) (entdel entline) (sssetfirst nil js) (ai_draworder "_front") ) ) (prin1) )
-
Bonjour Mister Lecrabe, Tu remarqueras que ma réponse vidéo est tout de même différentes de ta réponse texte (toi tu passes par la connexion FDO puis un enregistrement DWG) et moi directement par le gabarit d'annotation. Donc deux approche différentes. Autrement le challenge... on dira que c'est ma façon de participer à la vie du forum. ;) C'est aussi pour te montrer mes compétences dans ce domaine ;) qui sait... j'ai vu que vous cherchiez du monde chez Géomap ;) Sinon pour la communauté , tu peux diffuser les vidéos sur géorézo ( il est vrai que je n'y participe pas vraiment) Cordialement, Laurent
-
Hello Laurent Alors chaque fois que je fais une reponse "TEXTE", tu fais une reponse "VIDEO" c un challenge interessant ! Et la prochaine fois, si je fais une reponse video ? Merci pour la communaute, Le Decapode (lecrabe)
-
Tutoriel boite de dialogue
Invité a répondu à un(e) sujet de (gile) dans ObjectARX/DBX, C++, .NET, RealDWG
C'est vrai que d'être célibataire ça aide! (pour le .NET j'veux dire) Mais bon, cette boutade reflète quand même une réalité. Apprendre le .NET demande beaucoup de temps. Combien de temps? Je vous le dirais si un jour j'arrive au bout, sous réserve qu'il y ait un bout... :huh: Alors voilà, je fais partie du club de "Ceux qui veulent apprendre le .NET", à moitié par obligation (merci Microsoft) et à moitié parce que c'est très intéressant et que c'est un challenge! Après la phase initiale très décourageante, je suis dans la phase où je m'y suis mis en suivant des tutoriaux, dont celui auquel on fait référence dans cette discussion. Mon sentiment est celui-ci: certes apprendre le .NET (et les langages qui vont avec, moi c'est le C#) est une tâche immense, ne croyez pas ceux qui vont diront le contraire, il faut voir ça comme un gigantesque puzzle, vous ne verrez pas au début l’intégralité du puzzle, vous assemblerez les choses pièces par pièces et tant que vous n'aurez pas une vision globale de la chose vous serez déçu. En gros, vous êtes le mec qui fabrique les différentes pièces de la tour Eiffel, vous n'êtes ni l'architecte ni le touriste qui s'émerveille devant le résultat. Mais soyez assurez qu'il y a bien une tour Eiffel au bout du chemin. Au bout de deux semaines, vous aurez l'impression de n'être pas arrivé à grand chose, mais aurez aussi la sensation que certaines pièces du puzzle se mettent en place et ceci devrait vous encourager à persévérer. Le .NET pour moi est difficile à cause de l'environnement, pas à cause des langages, comme dit Gilles, les langages, c'est juste une question de syntaxe. (du moins il me semble bien qu'il a dit ça...) -
INFORMATIONS UTILES A RENSEIGNER
Olivier Eckmann a répondu à un(e) sujet de lili2006 dans Autodesk Map
Bonjour, la saisie des données graphiques sous AutoCAD est une bonne solution, par contre les requêtes et la stylisation des cartes sous AutoCAD MAP à partir d'objets DWG (polyligne ou polygone) n'est pas super intuitive et l'interface date d'AutoCAD 14 alors c'est difficile à mettre entre toutes les mains. Par conséquent il serait intéressant de passer le plus tôt possible à un export en SHP, SDF ou SQLite pour utiliser la connexion FDO à cette source de données. La stylisation est très visuelle et les requêtes sont simples et disposent d'un outil très bien fait. En plus tout le travail de stylisation peut être exporté/repris sous Mapguide si on envisage d'externaliser le SIG avec des postes de consultation distant. Après si on a des licences AutoCAD MAP 3D2012, on peut envisager ça sous l'angle des modules métiers de MAP (ex topobase). La partie requête / recherche / publication semble très importante dans ce genre d'appli. Et avec les outils métiers de MAP on a tout ce qu'il faut pour concevoir des écrans de saisie, recherche et rapport très détaillé (très proche de ce que l'on fait avec un MsAccess). De plus on peut créer/développer des règles et process précis pour le type de saisie de l'utilisateur. L'inconvénient c'est que c'est pas simple à mettre en oeuvre et dans le cadre de PFE de BTS ça nécessite un investissement important du prof pour créer tout ce qui est nécessaire (gabarit, table, champ, règles...) afin que les étudiants ne se perdent pas dans les méandres de la config et se concentrent sur les données et les requêtes. Mais c'est un super challenge avec cette techno. Olivier -
fichier index.mnu et instance de famille
hoppla a répondu à un(e) sujet de Projeteur08 dans Creo (ex. Pro/Engineer)
L'utilitaire pour la création des fichiers .mnu ne propose pas cette option mais c'est vrai que ce serait pratique. Voilà un super challenge pour fhugues, s'il s'ennuie pendant ses vacances de Noël ;-) -
Salut, Oui cet article parle du LISP en général. Ce qui m'a beaucoup amusé, c'est la dérision basée sur ce qu'a de génial le LISP (sa simplicité et sa puissance), ce qui permet d'en faire les louanges tout en en montrant les travers "narcissiques". AutoLISP n'est certainement pas le dialecte LISP le plus puissant, c'est juste un langage basé sur le LISP qui est spécialement dédié à AutoCAD (ssget en est un exemple parmi tant d'autres). Mais en conservant la simplicité et la souplesse des langages LISP, il permet (assez) facilement d'implémenter des fonctions qui n'existe pas nativement. Voir ce challenge, sur TheSwamp où des solutions pour porter la fonction let dans AutoLISP sont proposées.
-
Salut Cela me rappel ce Challenge @+
-
Challenge 33 (liste <-> arbre)
VDH-Bruno a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Bonjour, Je revisite ce challenge étant bien incapable à l’époque d’écrire la fonction réciproque bv:lst2tree ( même si j’avais l’intuition qu’une autre voie bien plus simple était possible…) Je publie donc aujourd’hui ma solution, elle utilise deux fonctions mutuellement récursives afin d’économiser des allers et retours inutiles dans le traitement de la liste fourni en argument ( au benchmark le traitement est 2 fois plus rapide). (defun bv:lst2tree (lst / tree etete) (defun tree (lst) (cond ((null lst) nil) ((= (caar lst) (caadr lst)) ((lambda (x) (cons (cons (caar lst) (tree (car x))) (cdr x))) (etete lst) ) ) (T (cons (car lst) (tree (cdr lst)))) ) ) (defun etete (lst) (if (= (caar lst) (caadr lst)) ((lambda (acc) (cons (cons (cdar lst) (car acc)) (cdr acc))) (etete (cdr lst)) ) (cons (list (cdar lst)) (tree (cdr lst))) ) ) (tree lst) ) Pour le fun, je donne également une version plus «fonctionnelle» de bv:tree2lst que celle donné précédemment ( au passage j’ai corrigé cette version), contrairement à la version précédent la liste lst ne se construit plus à la descente mais à la remonté des appels.. (defun bv:tree2lst (tree) (cond ((null tree) nil) ((atom tree) tree) (T ((lambda (a d) (cond ((and (atom a) d)(mapcar '(lambda (x) (cons a x)) d)) ((or (atom a) (atom (car a))) (cons a d)) (T (append a d)) ) ) (bv:tree2lst (car tree)) (bv:tree2lst (cdr tree)) ) ) ) ) -
Programmation fonctionnelle (valeur du prédicat)
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Débuter en LISP
Bonsoir, Tout d’abord, je n’ai pas pris assez de recul avec mon teste au benchmark, tel qu’il était formulé j’effectuais la comparaison entre une fonction lambda et une fonction member à chaque répétion et pas l’évaluation de l’optimisation réalisé dans mon code. Le bon teste ressemblerai plus à une comparaison de ce type, désolé pour l’étourderie. Oui (gile), on pouvait faire différemment, d’ailleurs j’avais déjà la structure de base dans une fonction quasi similaire bv:l=npe (il ne restait qu’à la retoucher un peu). ;; --------------------------------------------------------------- ;; (bv:l=npe n lst) ;; --------------------------------------------------------------- ;; Renvoie une Liste égal aux N Premiers Eléments. ;; Exemple : ;; (bv:l=npe 0 '(a b c d e)) renvoie nil ;; (bv:l=npe 2 '(a b c d e)) renvoie (A B) ;; (bv:l=npe 8 '(a b c d e)) renvoie (A B C D E) (defun bv:l=npe (n lst / fun) (defun fun (n lst) (if (< 0 n) (cons (car lst) (bv:l=npe (1- n) (cdr lst))) ) ;_ Fin de if ) ;_ Fin de defun (if (< n (length lst)) (fun n lst) lst ) ;_ Fin de if ) ;_ Fin de defun Que j’avais écrit en même temps que la fonction bv:l-npe. ;; --------------------------------------------------------------- ;; (bv:l-npe n lst) ;; --------------------------------------------------------------- ;; Renvoie une Liste des privés de ses N Premiers Eléments, ;; Exemple : ;; (bv:l-npe 0 '(a b c d e)) renvoie (A B C D E) ;; (bv:l-npe 2 '(a b c d e)) renvoie (C D E) ;; (bv:l-npe 8 '(a b c d e)) renvoie nil (defun bv:l-npe (n lst) (cond ((< 3 n) (bv:l-npe (- n 4) (cddddr lst))) ((< 2 n) (bv:l-npe (- n 3) (cdddr lst))) ((< 1 n) (bv:l-npe (- n 2) (cddr lst))) ((< 0 n) (bv:l-npe (- n 1) (cdr lst))) (T lst) ) ;_ Fin de cond ) ;_ Fin de defun Pour écrire une fonction sublist qui travaille directement sur la tête de liste et non sur l’indice (ou position) des élèments comme tu l’a fait dans la tienne. Mais pour en revenir à c-member, j’ai voulu tenter une approche différente surtout depuis hier lorsque je me suis aperçu que ces fonctions avaient déjà été évoqué dans le challenge n° 22 ( Au passage dure dure de passer après vous mais cela doit être un peu normal, je n’ai que 10 ans de retard à rattraper). Mais j’avoue que ta fonction trunc à l’avantage d’être linéaire dans sa performance contrairement à la mienne qui dépend de l’âge du capitaine (c.a.d. du nombre d’éléments identique constituant lst). Merci pour le retour, convaincu par ta reflexion sur la lisibilité. Patrick_35, non pas forcément d’ailleurs en général en tant qu’apprenant, je m’efforce de coder les deux histoires de ne pas m’enfermer complément dans un style plus que dans un autre. Mais j’avoue avoir un gros penchant pour le côté fonctionnelle que je privilégie toujours en première approche et effectivement comme l’a dit (gile) des qu’il est question de prédicat dans un processus répétitif difficile en programmation fonctionnelle d’éviter de faire une récursive. Au passage je trouve ce type de fonctions beaucoup plus souple pour le traitement et le travail sur les listes (qui sont d’ailleurs elles-mêmes des structures récursives), prenons en exemple la fonction pa:c-member et la fonction gc:trunc pour moi c’est le même traitement à la différence prés qu’avec une boucle while tu ne peux conser ta liste que dans un sens ce qui t’oblige à un reverse. Alors qu’en récursif tu peux conser en descendant dans tes appels (avec un argument suplémentaire en guise d’accumulateur) cas de la recursion terminal et la tu devrais également employer un reverse, ou alors tu peux conser en remontant tes appels récursif (ce que fait la fonction trunc) cas de la recursion enveloppante et la plus besoin de reverse. Il est également très difficile d’explorer avec while des listes de profondeur inconnue, alors qu’avec la récursion multiple rien de plus facile : ;; --------------------------------------------------------------- ;; (bv:profondeur lst) ;; --------------------------------------------------------------- ;; Renvoie la profondeur maxi d'une liste. ;; Exemples : ;; (bv:profondeur '(a b c d e)) renvoie 1 ;; (bv:profondeur '((a b) c (((d e))))) renvoie 4 ;; (bv:profondeur '()) renvoie 0 (defun bv:profondeur (lst) (if (atom lst) 0 (max (1+ (bv:profondeur (car lst))) (bv:profondeur (cdr lst)) ) ;_ Fin de max ) ;_ Fin de if ) ;_ Fin de defun De plus les fonctions de boucle tel que repeat while me semble limiter aux imbriquations de répétition, alors que la récursion permet de les croiser voir ici pour la dernière publication en date de ce type de boucle. Pour finir j’ai jamais réussie à me servir correctement des outils de débogage de Visual Lisp, alors que en récursif il y a la fonction trace. Je crois que l’on reste fortement influencé par le style de ses débuts et quant j’ai commencé l’aventure Lisp, je me suis très vite intéressé à cette aspect de la programmation (le côté fonctionnelle), au début par défit, maintenant c’est plus par « jeux ». A+ VDH -
Purge de bloc : je cherche mon erreur
Tramber a répondu à un(e) sujet de Tramber dans Pour aller plus loin en LISP
Pour les boucles et tout le reste, j'ai bien compris. C'est pas un problème. C'est tout simplement (vl-some 'entget (massoc 331 (entget b))) et ce code 331 qui m'échappait totalement, A lire la référence DXF, je croyais qu'on parlait d'attributs dont je pense savoir qu'ils sont juste dérrière le BlockBegin. Je vais me repencher sur ces 330 et 331. C'est vraiment ce 331 que j'interprétais maL En tous cas le résultat est excellent :) J'ai vu le Challenge 30. Je me souviens maintenant... j'avais oublié que je l'avais lu et y avais fait une intervention fort importante sur les moteurs à plat (notre musée déménage, j'ai passé toute la journée d'aujourd'hui à déplacer des épaves de 2CV, c'était marrant je suis impliqué dans mon assoc et fustige ceux qui veulent comparer cette merveille avec des Porshce et des Ferrari). Quand je vois la qualité des interventions, je préfère me servir de vos travaux (et les comprendre, question pas de fierté mais disons d'honneur) que de m'essayer à des solutions bancales. Chapeau pour tout. Et mystère intriguant voire fascinant sur la routine de la réponse n°1 compatible uniquement 2011... -
Purge de bloc : je cherche mon erreur
(gile) a répondu à un(e) sujet de Tramber dans Pour aller plus loin en LISP
Salut, Il y avait eu ce challenge sur CADxp et ce sujet sur exmateria. Mais c'est vrai que tout ce que j'ai pu lire utilise toujours la méthode consistant à faire n purges successives, n étant arbitrairement choisi dans l'espoir d'être suffisant pour purger tous les éléments imbriqués sans faire trop de purges inutiles... De mon côté, avec .NET j'avais trouvé un moyen fiable utilisant la méthode Database.Purge qui supprime d'une collection d'ObjectId tous ceux qui correspondent à des objets non purgeables (référencés). J'ai implémenté cette méthode pour définir une fonction LISP (voir ici). Tu parles de la routine réponse #1 ? Celle qui semble ne fonctionner que sur 2011 ? Effectivement, tu n'as pas tout compris (voire pas compris du tout) mais après une bonne nuit, tu as peut-être, aujourd'hui, les idées plus claires. ;) En complément des explications données réponse #14, je vais essayer d'expliquer avec un exemple simple. Soit un bloc A0 inséré dans un bloc A1 lui même inséré dans un bloc A2. Les espaces objet et papier du dessin ne contienent aucune référence des blocs A1 et A2, pour A0 on envisagera les deux cas. Je lance (gc:purgeblock "A#") : (while (setq blk (tblnext "BLOCK" (not blk))) (if (wcmatch (strcase (setq name (cdr (assoc 2 blk)))) (strcase pat)) (setq blst (cons (cdr (assoc 330 (entget (tblobjname "BLOCK" name)))) blst)) ) ) Cette boucle while parcourt la table des blocs, et pour chaque définition de bloc dont le nom correspond au modèle (A + un chiffre), le BLOCK_RECORD est ajouté à la liste blst. Pour notre exemple, elle contient donc les BLOCK_RECORD de A0, A1 et A2. La seconde boucle while traite cette liste avec comme condition d'arrêt que la liste soit vide ou que le "drapeau" loop soit nil. On assigne T à loop avant de lancer la boucle et au début de chaque itération on remettra loop à nil. Chaque itération parcourt la liste blst (foreach ...) et pour chaque BLOCK_RECORD on fait le test qui nous dit le bloc est référencé : (or (vl-some 'entget (massoc 331 (entget B))) ...) (massoc 331 (entget B)) retourne la liste des ENAMEs de toutes les références du bloc insérées dans le dessin (espace ou définition de bloc). Mais comme explique réponse #14, certaines de ces références peuvent avoir été effacées et être toujours présentes dans la base de donnée. Dans ce cas, entget retourne nil. Donc, (vl-some 'entget (massoc 331 (entget B)) retourne T s'il existe au moins une référence non effacée du bloc b. Dans notre exemple, cette expression retourne T pour A0 (inséré dans A1) et A1 (inséré dans A2) et nil pour A2. A2 est donc traité : (progn (setq blk (vlax-ename->vla-object B)) (vlax-for o blk (if (= (vla-get-ObjectName o) "AcDbBlockReference") (vla-Delete o) ) ) (vla-delete blk) (setq blst (vl-remove b blst)) (setq loop T) ) On supprime toutes les références de bloc insérées dans A2 (référence à A1). On supprime la définition de bloc (BLOCK_RECORD) de A2 de la table On supprime A2 de blst On remet loop à T pour relancer une boucle. Lors de la seconde boucle, il n'y a plus que A1 et A0 dans la liste blst. A1 est non référencé => la référence à A0 dans A1 est supprimée => A1 est supprimé de la table et de la liste => loop = T Troisième boucle A0 est traité : - s'il n'est pas référencé (dans un espace) il est supprimé => loop = T mais blst est vide => la boucle s'arrête. - s'il est référencé, il n'est pas supprimé => loop = nil => la boucle s'arrête. -
Bonjour, à toutes et à tous. Je suis dessinateur en BE. J'utilise pas mal de logiciel tel que catia, solidworks, autocad, I-deas, etc.... parmi ces logiciels, il y a Inventor. Actuellement ,je suis en prestation chez un client sur le logiciel Autocad (2D), pour une implantation complète d'usine. Mais arrivant à terme sur le 2D, voici que l'on me demande de réaliser l'implantation en 3D sous Inventor. Hors j'ai eu une mini formation sur Inventor... j'arrive à modéliser tout ce que je veux sans problème par rapport à ma maitrise de Catia V5 et Solidworks qui ont la même philosophie de conception. Cependant il y a une fonction que je n'arrive pas à reproduire sur Inventor. J'ai cherché pendant 1h cette après midi en vain.... Cette fonction est de permettre de modéliser une course utile de mon Ensemble. Exemple si je prends un vérin sous Solidworks, je l'insère dans mon mécanisme, je mets toutes les contraintes qui vont bien pour le positionné, mais je peux aussi définir à la tige du vérin une butée (contrainte).Quand le vérin est en position rentrée au max ( la tige 3D du vérin ne passant pas au travers tout l'ensemble ,quand je la fait bouger avec la main). mais aussi lui donner une course de 200mm par exemple une fois la tige sortie, faisant au final des va et vient avec la tige sans qu'elle ne parte n'importe ou dans mon ensemble. Le problème que je rencontre aujourd'hui pour mon implantation, est de savoir ou trouver cette fonction similaire sur Inventor. Car contrairement, je n'implante pas un vérin, mais je voudrais donner une butée, ainsi qu'une course à un pont roulant présent dans le bâtiment. Je pense pas que cela soit sorcier, ni même impossible, mais je fait appelle à vous, car mon temps pour réaliser le 3D (complet de l'usine) est un véritable challenge que j'ai accepter de faire pour le client..... alors mon temps est plus que compter ;) merci d'avance Hudson59640
-
Bonsoir à toutes et tous, Allez, pour changer, un p'tit challenge mathématique appliqué aux raccordements routiers. C'est un des 5 exercices du concours d'entrée à l'ESGT (Ecole Supérieur des Géomètres Topographe) de la dernière session (Juin 2010). En proportion, moins de 25 minutes à accorder à ce problème avec la rédaction. 800x900http://img.ahst.fr/data/images/extraitesg.jpg[/img] Le fichier Amusez-vous bien, :D
-
Fonction récursive (Triangle de Pascal)
(gile) a répondu à un(e) sujet de VDH-Bruno dans Débuter en LISP
Salut, On peut utiliser un autre algorithme pour calculer la rangée suivant, ce qui va permettre un code plus concis. Si, pour une rangée (liste), on crée deux nouvelles listes, la première en lui ajoutant un 0 au début et la seconde en lui ajoutant un 0 à la fin, la somme de ces deux listes est la rangée suivante, exemple : (mapcar '+ '(0 1 1) '(1 1 0)) retourne (1 2 1) (defun nthPascal (n / f) (defun f (l) (mapcar '+ (cons 0 l) (append l '(0)))) (if (< 0 n) (f (nthPascal (1- n))) '(1) ) ) J'ai lancé un challenge sur TheSwamp, même si tu ne lis pas l'anglais tu y trouveras des codes brillants -
Challenge 33 (liste <-> arbre)
(gile) a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Je l'accorde, ce challenge n'est pas facile. Peut-être est un peu moins compliqué dans l'autre sens (tree -> lst), je ne saurais dire... En tout cas je suis content que certains participent, j'attends encore pour poster mes réponses. -
Challenge 33 (liste <-> arbre)
bonuscad a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Bon pour une fois, j'essaye de participer au challenge. Puiff ! pas facile. Je suis bien arrivé a quelque chose, mais mon arbre est imbriqué à l'envers. Je livre quand même mon bout de code bien qu'il ne réponde pas à la demande, je me suis bien grillé les neurones... (defun lst2tree (lst / tmp_l lx l_t) (while (setq lx (mapcar 'car lst)) (while (car lx) (setq l_t (cons (car lx) (vl-remove nil l_t)) lx (vl-remove (car lx) lx) ) ) (if (setq lst (vl-remove nil (mapcar 'cdr lst))) (setq l_t (cons (list l_t) (lst2tree lx))) (setq lst nil) ) ) (vl-remove nil l_t) )
