Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour « challenge » dans sujets.

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Fonctionnement de ce site
    • Nouvelle règle pour les invités : plus d'écriture possible sans inscription
    • CADxp, comment ça marche?
    • CADxp, vos souhaits
    • Forum test
  • Emploi
    • Emploi, monde du travail
  • AutoCAD
    • AutoCAD 3D
    • AutoCAD 2020-2024
    • AutoCAD LT 2024
    • AutoCAD LT 2020-2023
    • AutoCAD 2019
    • AutoCAD LT 2019
    • AutoCAD 2018
    • AutoCAD LT 2018
    • AutoCAD 2017
    • AutoCAD LT 2017
    • AutoCAD avant 2017
    • AutoCAD LT avant 2017
    • Tutoriaux AutoCAD
    • AutoCAD, liste de souhaits
  • Autres logiciels de CAO
    • Microstation
    • IntelliPlus, IntelliCAD, CadIdesk
    • ZWCAD
  • Architecture, Bâtiment
    • Revit
    • AutoCAD Architecture
    • AutoCAD MEP
    • BIM
  • Mécanique
    • Inventor
    • SolidWorks
    • Creo (ex. Pro/Engineer)
    • Catia
  • SIG, Génie civil, Cartographie, VRD
    • Autodesk Map
    • VRD
    • Covadis
    • Infraworks 360
    • Mensura
    • AutoCAD Civil
    • Autopiste
    • SIG internet
  • Imagerie, animation, PAO, modélisation 3D
    • 3DSMAX
    • Création et retouche d'images
    • Sketchup
    • Autres logiciels d'infographie
    • Lumion 3D
  • Programmation
    • LISP et Visual LISP
    • VBA et VB
    • Personnalisation, macros, DIESEL
    • ObjectARX/DBX, C++, .NET, RealDWG
    • Programmer en s'amusant
    • Suggestions de développements
  • Trucs et astuces
    • AutoCAD trucs et astuces
    • Windows trucs et astuces
  • Matériel CAO
    • Ordinateurs
    • Périphériques d'entrée
    • Périphériques de sortie, impression
  • Divers
    • CAO, généralités
    • Echanges de fichiers
    • Organisation du travail
    • Visualisateurs, annotation
    • Pause café
    • Bibliothèques de composants
    • Formation
  • Logiciels connexes
    • Devis, métré, estimation, quantitatif
    • Calculs et simulation
  • Forums métier
    • Bâtiment
    • Infrastructures

Calendriers

Il n’y a aucun résultat à afficher.

Blogs

Il n’y a aucun résultat à afficher.


Rechercher les résultats dans…

Rechercher les résultats qui contiennent…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


Location


Interests

  1. (gile)

    Challenge 16

    Il me semble qu'on peut maintenant passer au niveau supérieur en reprenant ce que proposait _Zebulon. Pour ne pas trop s'éparpiller, je propose de cadrer le challenge à un exercice pour l'instant, quitte à en faire d'autre ensuite. Toujours à partir d'une liste telle que celle retournée par entget sur une lwpolyline, écrire une fonction qui retourne une liste contenant les longueurs de chaque segment de la polyligne (ces segments pouvant être courbes bien sur). PS : les fonctions trouvées plus haut peuvent être rendues plus polyvalentes. En ajoutant un argument (le code de groupe DXF), elles peuvent servir à retourner les listes de tous les groupes DXF à entrées multiples (10 40 41 42 pour les polylignes par exemple). (defun dxf-grpe (elst code / ret) (foreach p elst (if (= (car p) code) (setq ret (cons (cdr p) ret)) ) ) (reverse ret) ) (dxf-grpe (entget (car (enstel))) 42) retournera la liste des bulges de la polyligne. [Edité le 11/12/2007 par (gile)]
  2. Bonjour, Voici ma p'tit contrubution. J'espere qu'elle réponds à la demande du challenge. Merci d'avance de vos commentaires. (defun c:test () (setq ent (entget(car(entsel)))) (setq i 0) (repeat (length ent) (setq entit (nth i ent)) (setq codeentit (car entit)) (if (= codeentit 10) (setq lst_pt (cons (cdr entit) lst_pt)) ) (setq i (+ i 1)) ) (reverse lst_pt) ) @plus
  3. bseb67

    Challenge 16

    Salut Matt666! Et bien ca lance en challenge :D ! Pour le 14 et 15, je n'ai pas eu trop de temps, mais pour celui-là, j'ai déjà une solution. JE vais tenter une version différente et voir la meilleure. a+.
  4. Salut Quand c'est trop facile, personne ne répond ou presque :( Des idées de challenge pour évoluer, ce n'est pas ce qui manque, se sont les volontaires Allez, juste une pour voir et ne trichez pas ;) Il s"agit de retrouver toutes les cordonnées d'une polyligne dans une liste @+
  5. C'est sympa ce que tu fais gile, Merci pour l'encouragement ;) Oui vivement un autre challenge...avant Noel faites que je puisse y participé comme celui-ci. Merci @plus
  6. Merci... :red: C'est marrant pourtant l'utilise un append... Je croyais que c'était plus lent... Vivement un autre challenge (un peu moins balaise que le 15 !!) :o A bientot.. Matt.
  7. Bah voilà ! Bravo !!! :D Vu que je ne connais pas bien ta maitrise du lisp, je vais (si je peux me permettre) préciser les remarques constructives de (gile)... Dans ta routine, tu utilises plusieurs variables (setq). Pour éviter de les mettre à nil au début de la routine, tu peux les déclarer. Comment déclarer des variales, et où ?? la première ligne de ton code est (en général) la fonction defun (DEfine FUNction). (defun nom_de_la_fonction (arguments / variables_locales)) Voilà où tu dois mettre tes variables locales. Pour ton premier programme, ce serait ça : (defun c:test (/ lst nbrelts p_dep nbr_supp i lst2 lst1 lst_final) ...) Déclarer tes variables signifie en quelque sorte lister toutes les variables qui servent au programme, mais qui ne servent pas en dehors. Lorsque ton programme est fini, toutes les variables inscrites ici seront mises à nil. Si tu ne déclares pas tes variables, et ça tu l'as compris puisque tu as mis certaines variables à nil avant de les utiliser, elles peuvent encore avoir une information lorsque tu démarres ton programme. En plus déclarer ses variables est très pratique pour utiliser les mêmes variables dans tous tes programmes ! par exemple toutes mes listes se nomment lst, mes chaînes de caractères str, etc... Rappel de la définition de la fonction defun (defun nom_de_la_fonction (arguments / variables_locales)) Un argument est un paramètre de la fonction. Presque toutes les fonctions interne utilisées en lisp utilisent des arguments ! Exemple : (setq nom1 definition_de_la_variable1 [nom2 definition_de_la_variable1]) où nom = nom de la variable definition_de_la_variable = Ce que tu mets sous cette variable. Autre exemple : (defun carre (nb) (* nb nb)) Donc pour trouver le carré de 5, tu fais (carre 5), et ça te retourne 25... Pour notre challenge, Gile te propose ceci : (defun delist (lst dep nb / nbrelts ...) ...) Avec lst = liste à modifier dep = Numéro de départ nb = nombre d'éléments à enlever.. Nota : juste un truc, on ne peut pas faire d'arguments optionnels pour des fonctions persos. Par exemple la fonction (substr) : (substr chaîne début [longueur]) Tu vois que la longueur est entre crochet... Eh bien cet argument n'est pas obligatoire. Voilà. Voilà !! A toi de jouer maintenant !! Bon courage.. A bientot. Matt.
  8. Attention substr ne fonctionne que pour les chaînes de caractère... Pas pour les listes... Ceci dit, ce que tu demandes est exactement la réponse de ce challenge, mais à l'envers !! Un équivalent à la fonction substr pour les listes... Donc pour ta gouverne, nan !! :) Courage lili !! Petite piste : Au lieu de chercher à supprimer, pourquoi ne pas recréer une liste sans les éléments que l'on souhaite enlever ? ;) [Edité le 5/12/2007 par Matt666] [Edité le 6/12/2007 par Matt666]
  9. Bonsoir à toutes et tous, Matt666, merci de ta pensée, mais entre le manque de temps pour s'y pencher vraiment et la marche que j'ai "peur" de franchir, je crains de ne pouvoir rien sortir,... Mais, je suis ce challenge de prés et avec le même intérêt que les autres,.... Je me contente encore d'essayer d'assimiler tout ce que je vois, mais je reste convaincu qu'il faut (comme me dis (gile)) commencer par le bon bout et je compte sur vous pour savoir ou il est ??!!! Désolé de ne pas encore être apte à te suivre . Vivement du temps car ces challenges sont trés utiles pour la recherche et la compréhension. N'y connaissant pas grand chose, je pense cependant qu'il faut te laisser libre dans la pédagogie et la vision que tu as de ce que tu recherches à faire faire (ouh là, même moi j'comprend pas c'que j'veux dire !!??) Enfin si, quand même. NON, c'est ta vision ! Justement, c'est ce que tu cherches, et les questions vont arriver dans ce sens. Promis, j'essaye quelque chose mais attendez-vous au pire,... Bonne nuit.
  10. Bred, Oui ma routine est récursive, elle ressemble à remove_ind (ici) et à celle d'Evgeniy (qui, par ailleurs, ne répond pas précisément à l'énnoncé tel que je le donnais réponse 8 mais à ce que je pensais avoir compris réponse 4). Evegeniy, There's a new challenge here, ann you can see this thread [Edité le 5/12/2007 par (gile)]
  11. Salut Patrick_35! Ton challenge fait référence à un arbre binaire de données. Ton idée est intéressante. On peut la pousser en faisant la fonction de création de la liste, je sais qu'il existe vl-sort et AutoCAD-strl-sort, mais en se basant sur ce principe on peut faire la fonction qui ajoute un élément dans une liste en le plaçant au bon endroit.
  12. Donc il s'agit de supprimer, dans une liste (argument 1), à partir de l'indice spécifié (argument 2), le nombre d'éléments successifs (argument 3). Exemple : (setq lst '(1 2 3 4 5 6 7 8 9)) (delst lst 1 2) -> (1 4 5 6 7 8 9) ; supprimé 2 éléments à partir de l'indice 1 (2ème élément) (delst lst 0 3) -> (4 5 6 7 8 9) ; supprimé 3 éléments à partir de l'indice 0 (1er élément) (delst lst 3 2) - > (1 2 3 6 7 8 9) ; supprimé 2 éléments à partir de l'indice 3 (4ème élément) (delst lst 3 12) - > (1 2 3) ; supprimé tous les éléments à partir de l'indice 3 (4ème élément) (delst lst 3 0) -> (1 2 3 4 5 6 7 8 9) ; supprimé aucun élément J'avais déjà une routine pour supprimer les éléments de l'indice n à l'indice m, donc pratiquement rien à changer pour l'adapter ua challenge. Je laisse jouer les autres avant de poster. Please Evgeniy, let some newbies try to answer before posting a reply, it's too easy for you !
  13. Ah afin je peux me reconnecter sur cadxp (des petits soucis de server de proxy). Merci de penser à nous Matt. Je vais voir ce que je peux faire de ton challenge, j'aurais certainement quelques questions.... @plus
  14. Bon, j'entame ce challenge ;) Le code qui suit ne fonctionnera que sur une polyligne 3D. Il vous sera demandé un interval en Z qui devra être répété pour placer les points en Z correspondants (exemple tout les 1 mètres, ou 25 mètre (centimètre,...) (defun round_number (xr n / ) (* (fix (atof (rtos (* xr n) 2 0))) (/ 1.0 n)) ) (defun c:z_interval ( / js dxf_ent vla_obj n pt_lst z_value z_min z_max pt_int) (vl-load-com) (princ "\nSélectionnez une polyligne 3D.") (while (null (setq js (ssget "_+.:E:S" (list '(0 . "POLYLINE") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) '(-4 . "[b]<[/b]NOT") '(-4 . "&") '(70 . 112) '(-4 . "NOT>") ) ) ) ) (princ "\nCe n'est pas une polyligne 3D!") ) (setq dxf_ent (entget (ssname js 0)) vla_obj (vlax-ename->vla-object (cdar dxf_ent)) n -1 pt_lst nil ) (if (zerop (getvar "USERR1")) (setvar "USERR1" 1.0)) (initget 6) (setq z_value (getreal (strcat "\nEntrez l'interval en Z [b]<[/b]" (rtos (getvar "USERR1")) ">: "))) (if (not z_value) (setq z_value (abs (getvar "USERR1")))) (setvar "USERR1" z_value) (repeat (fix (vlax-curve-getEndParam vla_obj)) (setq pt_lst (cons (vlax-curve-getPointAtParam vla_obj (setq n (1+ n))) pt_lst)) ) (if (zerop (boole 1 1 (cdr (assoc 70 dxf_ent)))) (setq pt_lst (cons (vlax-curve-getEndPoint vla_obj) pt_lst)) (setq pt_lst (cons (vlax-curve-getStartPoint vla_obj) pt_lst)) ) (while (cdr pt_lst) (setq z_min (round_number (min (caddar pt_lst) (car (cddadr pt_lst))) (/ 1 z_value)) z_max (max (caddar pt_lst) (car (cddadr pt_lst))) ) (while ([b]<[/b] z_min z_max) (setq pt_int (inters (car pt_lst) (cadr pt_lst) (list (caar pt_lst) (cadar pt_lst) z_min) (list (caadr pt_lst) (cadadr pt_lst) z_min) T ) ) (if pt_int (entmake (list (cons 0 "POINT") (cons 100 "AcDbPoint") (cons 10 pt_int) (list 210 0.0 0.0 1.0) ) ) ) (setq z_min (+ z_min z_value)) ) (setq pt_lst (cdr pt_lst)) ) (prin1) ) NB: Le calcul des Z et les points sont traités dans tous les cas dans le SCG. Le code a été testé rapidement.
  15. Par contre il peut y avoir plusieurs points sur cette polyligne... Si elle n'est pas linéaire en Z... C'est vrai que c'est un bon challenge !
  16. Bonjour, Dans un premier temps ce n'est pas possible avec un polyligne "uniquement un elevation" mais avec une ligne ou une polyligne3D. Je vais voir si je peux faire qques chose. Autrement c'est un bon challenge . @plus
  17. J'avais fait un LISP, Clean_poly, qui supprimait tout les sommets superposés dans tout type de polyligne. Celui-ci ne traite que les polyligne 'optimisées' (lwpolyline) mais supprime aussi tous les sommets alignés (ou sur le même arc) à condition qu'ils ne marquent pas une rupture de largeur (voir image). C'est un peu une application concrète du Challenge 12 http://img50.imageshack.us/img50/4734/clean2ir7.png Nouvelle version : 2 commandes Cpl et Ppl (voir plus bas) ;; CPL Fonction d'appel (defun c:cpl (/ ss n) (vl-load-com) (princ "\nSélectionnez les polylignes à traiter ou [b]: " ) (or (setq ss (ssget '((0 . "LWPOLYLINE")))) (setq ss (ssget "_X" '((0 . "LWPOLYLINE")))) ) (if ss (progn (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) (setq n -1) (while (setq pl (ssname ss (setq n (1+ n)))) (CleanPline pl nil) ) (princ (strcat "\n\t" (itoa n) " polylignes traitées.")) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) ) (princ "\nAucune polyligne sélectionnée.") ) (princ) ) ;; PPL Fonction d'appel (defun c:ppl (/ ss n) (vl-load-com) (princ "\nSélectionnez les polylignes à traiter ou [b]: " ) (or (setq ss (ssget '((0 . "LWPOLYLINE")))) (setq ss (ssget "_X" '((0 . "LWPOLYLINE")))) ) (if ss (progn (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) (setq n -1) (while (setq pl (ssname ss (setq n (1+ n)))) (CleanPline pl T) ) (princ (strcat "\n\t" (itoa n) " polylignes traitées.")) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) ) (princ "\nAucune polyligne sélectionnée.") ) (princ) ) ;; CleanPline (gile) 13/11/2007 ;; Supprime tous les sommets superflus (alignés ou superposés) d'une polyligne ;; Conserve les arcs et largeurs. ;; ;; Arguments ;; pl : la polyligne à traiter (ename) ;; tt : T ou nil ;; - T supprime tous les points alignés ou sur le même arc ;; - nil conserve les sommets qui reviennent sur le trajet de la polyligne (defun CleanPline (pl tt / regular-width elst closed old-p old-b old-sw old-ew new-p new-b new-sw new-ew b1 b2 ) (defun regular-width (p1 p2 p3 ws1 we1 ws2 we2 / delta norm) (setq delta (- we2 ws1) ) (and (= we1 ws2) (equal (/ (- (vlax-curve-getDistAtPoint pl (trans p2 pl 0)) (vlax-curve-getDistAtPoint pl (trans p1 pl 0)) ) (- (vlax-curve-getDistAtPoint pl (trans p3 pl 0)) (vlax-curve-getDistAtPoint pl (trans p1 pl 0)) ) ) (/ (- we1 (- we2 delta)) delta) 0.01 ) ) ) (setq elst (entget pl)) (and (= 1 (logand 1 (cdr (assoc 70 elst)))) (setq closed T)) (setq old-p (vl-remove-if-not (function (lambda (x) (= (car x) 10))) elst ) old-sw (vl-remove-if-not (function (lambda (x) (= (car x) 40))) elst ) old-ew (vl-remove-if-not (function (lambda (x) (= (car x) 41))) elst ) old-b (vl-remove-if-not (function (lambda (x) (= (car x) 42))) elst ) elst (vl-remove-if (function (lambda (x) (member (car x) '(10 40 41 42)))) elst ) ) (and closed (setq old-p (append old-p (list (car old-p))))) (while (cddr old-p) (if (or (= (cdar old-sw) (cdar old-ew) (cdadr old-sw) (cdadr old-sw) ) (regular-width (cdar old-p) (cdadr old-p) (cdaddr old-p) (cdar old-sw) (cdar old-ew) (cdadr old-sw) (cdadr old-ew) ) ) (if (and (zerop (cdar old-b)) (zerop (cdadr old-b)) ) (if (if tt (null (inters (cdar old-p) (cdaddr old-p) (cdar old-p) (cdadr old-p) ) ) (betweenp (cdar old-p) (cdaddr old-p) (cdadr old-p)) ) (setq old-p (cons (car old-p) (cddr old-p)) old-b (cons (car old-b) (cddr old-b)) old-sw (cons (car old-sw) (cddr old-sw)) old-ew (cons (cadr old-ew) (cddr old-ew)) ) (setq new-p (cons (car old-p) new-p) new-b (cons (car old-b) new-b) new-sw (cons (car old-sw) new-sw) new-ew (cons (car old-ew) new-ew) old-p (cdr old-p) old-b (cdr old-b) old-sw (cdr old-sw) old-ew (cdr old-ew) ) ) (if (and (/= 0.0 (cdar old-b)) (/= 0.0 (cdadr old-b)) (equal (caddr (setq b1 (BulgeData (cdar old-b) (cdar old-p) (cdadr old-p)) ) ) (caddr (setq b2 (BulgeData (cdadr old-b) (cdadr old-p) (cdaddr old-p)) ) ) 1e-4 ) (or tt (or (and ( (and ( ) ) ) (setq old-p (cons (car old-p) (cddr old-p)) old-b (cons (cons 42 (tan (/ (+ (car b1) (car b2)) 4.0))) (cddr old-b) ) old-sw (cons (car old-sw) (cddr old-sw)) old-ew (cons (cadr old-ew) (cddr old-ew)) ) (setq new-p (cons (car old-p) new-p) new-b (cons (car old-b) new-b) new-sw (cons (car old-sw) new-sw) new-ew (cons (car old-ew) new-ew) old-p (cdr old-p) old-b (cdr old-b) old-sw (cdr old-sw) old-ew (cdr old-ew) ) ) ) (setq new-p (cons (car old-p) new-p) new-b (cons (car old-b) new-b) new-sw (cons (car old-sw) new-sw) new-ew (cons (car old-ew) new-ew) old-p (cdr old-p) old-b (cdr old-b) old-sw (cdr old-sw) old-ew (cdr old-ew) ) ) ) (if closed (setq new-p (reverse (append (cdr (reverse old-p)) new-p))) (setq new-p (append (reverse new-p) old-p)) ) (setq new-b (append (reverse new-b) old-b) new-sw (append (reverse new-sw) old-sw) new-ew (append (reverse new-ew) old-ew) ) (entmod (append elst (apply 'append (apply 'mapcar (cons 'list (list new-p new-sw new-ew new-b)) ) ) ) ) ) ;;; VEC1 Retourne le vecteur normé (une unité) de direction p1 p2 (defun vec1 (p1 p2 / d) (if (not (zerop (setq d (distance p1 p2)))) (mapcar '(lambda (x1 x2) (/ (- x2 x1) d)) p1 p2) ) ) ;; BETWEENP Evalue si pt est entre p1 et p2 (defun betweenp (p1 p2 pt) (or (equal p1 pt 1e-9) (equal p2 pt 1e-9) (equal (vec1 p1 pt) (vec1 pt p2) 1e-9) ) ) ;; BulgeData Retourne les données d'un polyarc (angle rayon centre) (defun BulgeData (bu p1 p2 / ang rad) (setq ang (* 2 (atan bu)) rad (/ (distance p1 p2) (* 2 (sin ang)) ) cen (polar p1 (+ (angle p1 p2) (- (/ pi 2) ang)) rad ) ) (list (* ang 2.0) rad cen) ) ;; TAN Retourne la tangente de l'angle (defun tan (ang) (/ (sin ang) (cos ang)) ) [Edité le 12/11/2007 par (gile)] [Edité le 13/11/2007 par (gile)]
  18. (gile)

    Nettoyer les polylignes

    Je pense que l'immense majorité des utilisateurs (moi compris) préfèreront Ppl, je m'étais laissé obnubilé par les problèmes soulevés dans ce challenge...
  19. (gile)

    Nettoyer les polylignes

    Salut lecrabe, C'est voulu, la question s'était posée dans le challenge 12. Supprimer des sommets alignés mais non interposés peut changer l'allure de la polyligne : http://img141.imageshack.us/img141/9606/clean3fw1.png Salut Matt666, Je pense que c'est la même logique, tu utilises aussi betweenp (dans remove-align), mais ta routine ne tient pas compte des épaisseurs et ne traite pas les points situés sur un même arc (cas certainement extrèmement rare).
  20. AH je viens de trouver une nouveau challenge par rapport a ce sujet. Le but serait de mettre tous les elements 3D à Zéro. (ligne 3D, Face3D, ligne, elevation de polyligne etc....). Mais afin de garder les elements d'origine du dessin. c'est de copier cette 2D dans un nouveau calque. Exemple: les faces 3D du calque MNT_PROJET deviendront des face3D à Zéro dans le calque MNT_PROJET_2D. Voilà bon devellopement à tous. Moi je commence de suite ;)
  21. Re, Depuis le début du challenge 13 j'avais le sentiment qu'on pouvait trouver un algorythme plus efficace que celui duquel je n'arrivais pas à me sortir. Je pense avoir trouver quelque chose de beaucoup mieux : la liste des combinaisons est constituée directement en évitant les doublons. Ça prend environ 5 secondes pour (combinaisons '(a b c d e f g h i j k l m n)) sur mon poste (16383 éléments). (defun combinaisons (lst / subr first tmp1 tmp2 tmp3 ret) (defun subr (l1 l2) (if l2 (cons (append l1 (list (car l2))) (subr l1 (cdr l2)) ) ) ) (while lst (setq first (list (car lst)) tmp1 (subr first (cdr lst)) tmp2 (cons first tmp1) ) (while tmp1 (setq tmp3 (subr (car tmp1) (cdr (member (last (car tmp1)) lst))) tmp1 (cdr (append tmp1 tmp3)) tmp2 (append tmp2 tmp3) ) ) (setq ret (append ret tmp2) lst (cdr lst) ) ) ret ) (combinaisons '(A B C D)) ((A) (A B) (A C) (A D) (A B C) (A B D) (A C D) (A B C D) (B) (B C) (B D) (B C D) © (C D) (D) ) [Edité le 2/11/2007 par (gile)]
  22. Bred

    Toutes les possibilités....

    Merci encore, (gile) ! (je n'avais plus fait attention au challenge que tu cites, désolé)
  23. Re, le challenge demandait de trier les combinaisons possibles de listes de lettres, si on veut quelque chose de plus général et sans tri : ;; REMOVE_IND ;; Retourne la liste privée de l'élément à l'indice spécifié ;; (premier élément = 0) (defun remove_ind (lst ind / tmp) (if (or (zerop ind) (null lst)) (cdr lst) (cons (car lst) (remove_ind (cdr lst) (1- ind))) ) ) ;; COMBI-1 ;; Retourne toutes les combinaisons possibles avec 1 élément en moins ;; (combi-1 '("a" "b" "c")) -> (("a" "b") ("a" "c") ("b" "c")) (defun combi-1 (lst / n ret) (setq n -1) (repeat (length lst) (setq ret (cons (remove_ind lst (setq n (1+ n))) ret)) ) ) ;; COMBINAISONS ;; retourne la liste de toutes les combinaisons possibles (defun combinaisons (lst / first ret) (setq lst (list lst)) (while ( (if (member first ret) (setq lst (cdr lst)) (if (= 1 (length first)) (setq ret (cons first ret) lst (cdr lst) ) (setq ret (cons first ret) lst (append (cdr lst) (combi-1 first)) ) ) ) ) ret ) [Edité le 29/10/2007 par (gile)]
  24. Salut, Regarde la routine combi dans ce challenge
  25. Salut Ce n'est pas la mauvaise volonté, mais en ce moment, je n'ai absolument pas le temps pour me plonger dans ce type de challenge Quand ce sera plus calme ;) @+
×
×
  • 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é