Rechercher dans la communauté
Affichage des résultats pour « challenge » dans sujets.
502 résultats trouvés
-
Salut, Il avait écrit ce code lors d'un "challenge" sur le forum C++ du site TheSwamp (je ne peux pas donner lien, le site est en dérangement) Je me souviens que son code, bien que plus lent que les codes C++ (normal), avait vraiment impressionné les autres "challengers".
-
Polylignes 2D/3D \"presque\" fermees ?
lecrabe a répondu à un(e) sujet de lecrabe dans Routines LISP
Hello Merci les Super Lispeurs ! :) :D :cool: Je vais tester tout ça MAIS petite précision pour Patrick_35 : je ne veux pas les FERMER mais simplement les DETECTER donc une simple sélection des polylignes en sortie est parfaite pour moi ! Ca ressemble à un petit challenge ... :P Le Decapode "détecteur de polylignes presques closes/fermées" -
Salut, Ça pourrait effectivement faire l'objet d'un challenge qui ferait suite au Challenge 12
-
Fusionner des lignes identiques
barbichette a répondu à un(e) sujet de barbichette dans AutoCAD 2008
Pour être tout à fait honnête.... Je pensait que le ralentissement des opération de copier/coller sur ce fichier étaient dus à ces lignes multiples en partie inutiles... en fait il semblerait que ce soit plutôt un problème avec une multitude d'échelle.... j'ai appliqué la procédure indiquée dans un autre message, et cela marche. J'ai aussi récupéré une utilisation "aisée" du fichier. Tout ça pour dire qu'il n'est pas nécessaire que vous passiez plus de temps à essayer de solutionner mon problème, à moins que vous ne preniez cela comme un challenge perso.... Merci -
Vu ta demande, je ne pense pas que OVERKILL convienne: Il ne supprime que les doublons parfaitement exact et non partiellement superposés comme tu le décrit. J'avais bien vu dans le temps une telle demande sur un forum US avec une proposition en lisp mais de là à remettre la main dessus.... :( De plus je ne sais pas s'il était performant. Quitte à le réécrire je pense qu'il faudrait s'orienter vers un algorithme vectoriel pour tester les segments partiellement superposés/confondus. La demande n'est pas simple. :casstet: Peut être un challenge utile.
-
GRANDE ;-) ça fonctionne a merveille merci Gile encore un fois c'est simple et bien fait ..... il faut que j'etudie ça pour comprendre comme tu a fait ! pour te remercier j'ai plein de script Python pour blender si ca t'interesse ;-) (car j'utilisr autocad pour les plans et blender pour les rendu 3d) merci ancore pour tou ca ;-) PS le vrai challenge impossible le rêve inavoué par contre mais ça mémé toi je ne pense pas qui puisse le faire c'est d'indiquer un volume de projection quelconque, solide cylindre etc et récupérer la grille déformée , mais in faudrait que autocad detecte chaque face du volume et que envoi les rayon seulement ou il le faut [Edité le 29/9/2008 par ingoenius]
-
Salut, Voilà 6 jours que Evgeniy a proposé un challenge et toujours pas de réponse (à part mes 2 premières tentatives)... Eut égard à la qualité des routines qu'il a pu donner dans d'autres challenges et aux efforts qu'il fait pour participer à un forum francophone, le pense qu'on devrait faire un effort pour essayer de répondre à ce challenge, d'autant que l'exercice est intéressant et très "ouvert" (beaucoup d'algorithmes et de solutions possible). Je n'ai pas beaucoup de temps ces jours ci, mais voici quand même une troisième méthode. les listes de paires sont "décompilées" (transformées en une liste unique) avant traitement puis "recompilées" ensuite. ;; "décompile" une liste de paires pointées en un liste unique ;; (pairs2lst '((1 . 5) (8 . 10) (16 . 16))) -> (1 2 3 4 5 8 9 10 16) (defun pairs2lst (l / a b r) (foreach p l (setq a (car p) b (cdr p) ) (while ( (setq r (cons a r) a (1+ a) ) ) ) (reverse r) ) ;; "compile" une liste en liste de paires pointées ;;; (lst2pairs '(1 2 3 4 5 8 9 10 16)) -> ((1 . 5) (8 . 10) (16 . 16)) (defun lst2pairs (l / a b r) (setq a (car l) b a l (cdr l) ) (while a (if (= (car l) (1+ b)) (setq b (car l)) (setq r (cons (cons a b) r) a (car l) b a ) ) (setq l (cdr l)) ) (reverse r) ) (defun union (l1 l2) (lst2pairs (vl-sort (append (pairs2lst l1) (pairs2lst l2) ) ' ) ) ) (defun intersection (l1 l2) (lst2pairs (vl-remove-if-not (function (lambda (x) (member x (pairs2lst l2)) ) ) (pairs2lst l1) ) ) ) (defun subtraction (l1 l2) (lst2pairs (vl-remove-if (function (lambda (x) (member x (pairs2lst l2)) ) ) (pairs2lst l1) ) ) )
-
Salut, Je crois qu'en fait ce n'est pas une option d'overkill, et ca me parait tout à fait normal, car les blocs pour être sûr que les deux blocs soient identiques, il faut vérifier le point d'insertion, l'angle de rotation, le sens, les échelles, mais aussi tout ce qui le compose (attributs en particulier). Ca me parait très chaud pour faire ca, déjà que mon gros challenge en lisp serai de créer des blocs en vérifiant que si des entités du dessin peuvent former un bloc qui existe, serai justement de les remplacer par le bloc.
-
Ah ok, je commence à comprendre. Reste à prendre le temps pour répondre au challenge @+
-
Personnellement j'avais compris la même chose d'après les exemples, en tout cas pour l'union. Tes graphiques m'ont aidé pour l'intersection et la soustraction, à la lecture je n'avais pas vraiment saisi ceux-ci. En aparté: Ces challenge bien qu'intéressant ne me motive pas trop car je ne vois jamais une application concrète à mes problèmes que je peux rencontrer lors d'un développement. En plus ceux-ci gravitent toujours sur les fonctions récursives ou les boucles conditionnelles. C'est peut être parce que je ne suis pas très doué avec ses fonctions récursives... :calim:
-
Bonjour Génial, un challenge d'ElpanovEvgeniy :D Le seul problème est de le comprendre :( Hello Great, a challenge of ElpanovEvgeniy :D The only problem is to understand :( @+
-
Je propose d'écrire trois différents programmes, mais ils sont semblables. C'est une tâche très intéressante - on peut la décider par la quantité immense de moyens. 1. (Union lst1 lst2) 2. (Intersection lst1 lst2) 3. (Subtraction lst1 lst2) L'exemple (setq lst1 '((1 . 5) (8 . 10) (20 . 20)) lst2 '((2 . 2) (4 . 6) (9 . 30)) ) ;_ setq (Union lst1 lst2) => '((1 . 6) (8 . 30)) (Intersection lst1 lst2) => '((2 . 2) (4 . 5) (9 . 10) (20 . 20)) (Subtraction lst1 lst2) => '((1 . 1) (3 . 3) (8 . 8))
-
Bonjour, Une fois qu'on a compris comment ça marche, on trouve cela forcément élégant. De plus, dans le cas qui nous intéresse, je vois mal comment on pourrait répondre à la question simplement sans utiliser la récursivité ? Je reprends à mon compte les mots des Patrick_35, au sujet du challenge 24 Amicalement Vincent
-
Il y a aussi la bibliothèque doslib que j'utilise souvent, mais surtout pour la recherche de fichiers dans des répertoires ou faire de copies, c'est plus rapide que des enregistrer sous. J'attaque le challenge à midi, (et ca me fait penser que je n'ai pas encore attaqué mon super) a+
-
Bonjour Un nouveau challenge :D Le but est de retrouver tous les sous-répertoires à partir d'une branche de l'arborescence. Si on indique la racine, on aura donc tous les répertoires du disque. Ceux qui ont déjà la solution pourront patienter jusqu'à demain ;) @+
-
Bonjour, un petit indice : c'est un challenge où on peut (où on doit...) s'intéresser à la récursivité. Autre indice : dans la condition d'arrêt j'ai utilisé la fonction (atom article). Mais on peut aussi avoir une préférence pour (listp article). J'avais omis de préciser qu'il s'agissait d'une liste de nombres, ce qui permet l'utilisation de la fonction (min nombre nombre ...) Amicalement Vincent
-
On suppose que la liste et les sous listes ne sont composées que de nombres. (defun min-list (lst) (apply 'min (mapcar (function (lambda (x) (if (listp x) (min-list x) x ) ) ) lst ) ) )
-
Super, un challenge !!! EDIT : hier soir, dans l'enthousiasme provoqué chez moi par un nouveau challenge intéressant, j'avais posté une réponse. Je déplace momentanément cette réponse (quelque part sur le site...) len attendant qu'il y ait d'autres réponses. [Edité le 28/8/2008 par (gile)]
-
Bonjour, on s'est déjà pris la tête avec des tris sur des listes. C'est un sujet similaire, car je souhaite obtenir le minimum d'une liste avec une fonction qu'on va appeler min-list. Quand on a : (setq L '(5 3 2 8 10 5 0 -3 8 -3)) on obtient : (min-list L) -3 Là, c'est facile, puisqu'il suffit de faire un tri et de prendre le premier de la liste. Là ou je voudrais corser la chose c'est en demandant la même chose sur une liste de listes, comme sur cet exemple : (setq L '(1 (2 4 6 0) (3 -1 (2 -5)) 4 5 6)) où (min-list L) doit donner -5 Amicalement Vincent [Edité le 27/8/2008 par zebulon_]
-
Devant l'enthousiasme suscité par ce challenge, je donne ma réponse. (defun paire (op cl str pos / opened closed start tmp cnt) (and (setq opened (vl-string-search op str pos)) (setq start (1+ opened) closed T cnt 1 ) (while (and closed ( (setq tmp (vl-string-search op str start) closed (vl-string-search cl str start) ) (if closed (if (and tmp ( (setq cnt (1+ cnt) start (1+ tmp) ) (setq cnt (1- cnt) start (1+ closed) ) ) ) ) ) (if (= 0 cnt) (list opened closed) ) )
-
Salut (gile) Une permière version, mais qui triche un peu ;) (defun paire(1er 2em str pos); / asc lst pos1 pos2 tot1 tot2) (setq lst (vl-list->string (reverse (setq asc (vl-string->list str))))) (if (and (/= 1er 2em) (setq pos1 (vl-string-search 1er str pos)) (setq pos2 (vl-string-search 2em lst pos)) (setq tot1 (length asc) asc (vl-remove (ascii 1er) asc) tot1 (- tot1 (setq tot2 (length asc))) asc (vl-remove (ascii 2em) asc) tot2 (- tot2 (length asc)) ) (eq tot1 tot2) ) (list pos1 (1- (- (strlen str) pos2))) nil ) ) Une seconde qui correspond beaucoup mieux et qui répond aussi aux conditions suivantes (paire "(" ")" "(* (+ 2 3) 6" 1) retourne (3 9) (paire "(" ")" "(* (+ 2 3) 6" 4) retourne nil (paire "(" ")" "* (+ 2 3) 6)" 0) retourne (2 8) (defun paire(1er 2em str whe / loc lst1 lst2 pos pos1 pos2 tbl) (setq loc 0 tbl 0 ) (while (setq pos (vl-string-search 1er str loc)) (and (< pos whe) (setq tbl (1+ tbl)) ) (setq lst1 (cons pos lst1) loc (1+ pos) ) ) (setq loc 0) (while (setq pos (vl-string-search 2em str loc)) (setq lst2 (cons pos lst2) loc (1+ pos) ) ) (if (and (/= 1er 2em) lst1 lst2 (> (length lst1) tbl) (> (- (length lst1) tbl) 0) (setq pos1 (nth tbl (reverse lst1))) (setq pos2 (nth (1- (- (length lst1) tbl)) (reverse lst2))) ) (list pos1 pos2) ) ) ps : c'est plutôt le challenge 23 ;) @+
-
Salut, Un petit challenge pour jouer avec l'appariement de caractères. Les parenthèses du LISP, les accolades du DCL ou des formatages de mtextes fonctionnent par paires et peuvent être profondément imbriquées. Il s'agirait donc de faire une routine "générique" qui retournerait une liste composée de la position d'un caractère ouvrant et de son correspondant fermant dans une chaîne. Les arguments pourraient être : - le caractère (ou suite de caractère) "ouvrant" ex : "(", "{", "% - son correspondant fermant, ex : ")", "}", ">%"... - la chaîne - la position du départ de la recherche dans la chaîne exemples : (paire "(" ")" "(* (+ 2 3) 6)" 0) retourne (0 12) (paire "(" ")" "(* (+ 2 3) 6)" 1) retourne (3 9) (paire "(" ")" "(* (+ 2 3) 6" 0) retourne nil [Edité le 18/8/2008 par (gile)]
-
Salut à tous! Pour les besoins d'un lisp, j'ai développé quelques fonctions utilisant les réacteurs, mais uniquement sur les variables système d'autocad. Ayant des petits problème de santé et physique, je n'ai pas pu attaquer mon super challenge :( . Voici le code en complet bien-sûr: ;| CONSEILS D'UTILISATION Les réacteurs créés et testés, ne sont que ceux sur les variables système d'autocad fonctions à utiliser: - force_sysvar (2 arguments) - stop_force_sysvar (1 argument) - stop_all_force_sysvar (0 argument) - liste_force_sysvar (0 argument) Appeler force_sysvar avec le nom de la variable système et la valeur voulue en forcage exemple (setq rr (force_sysvar "osmode" 15039)) Si vous tentez de créer un réacteur sur une variable ayant déjà un réacteur, l'existant sera détruit pour être remplacer par le nouveau. Pour stopper un réacteur (stop_force_sysvar rr) Pour stopper tous les réacteurs (stop_all_force_sysvar) La fonction liste_force_sysvar renvoie le nombre de réacteurs et donc de variables systèmes qui sont forcées sous la forme d'une liste: ((var_name1 var_valeur1) (var_name2 var_valeur2)...) BLAES Sébastien 07/08/2008 |; ;---------------------------------------; ; nom: modif_sysvar ; ; role: callback des réacteurs sur les ; ; variables systèmes ; ; FONCTION A NE PAS MODIFIER ; ; param: a1 => réacteur appelant ; ; a2 => variable système modifiée; ; sous cette forme: : ; (nom bool) => nom = nom de; ; la variable, bool = si la ; ; modification a réussie ; ; retour: aucun ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;---------------------------------------; (defun modif_sysvar( a1 a2) (cond ; on test si la variable modifiée est celle gérer par ce réacteur ; mais aussi si la valeur de cette variable n'est pas celle voulue au forcage ((and (= (car a2) (car (vlr-data a1))) (/= (getvar (car (vlr-data a1))) (cadr (vlr-data a1)))) ; on force la variable à la valeur voulue (setvar (car (vlr-data a1)) (cadr (vlr-data a1))) ) ) ; cond (print) ) ; modif_var ;-------------------------------------; ; nom: force_sysvar_existe ; ; role: test si un réacteur de forcage; ; sur la variable système sysvar; ; existe ou non ; ; param: sysvar => nom de la variable ; ; système forcée ; ; retour: un réacteur ; ; nil sinon ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;-------------------------------------; (defun force_sysvar_existe( sysvar / res) (setq res nil) (cond ; on test s'il y a encore des réacteurs sur des sysvar ((= (setq vlr_sysvar (vlr-reactors :VLR-SysVar-Reactor)) nil) ) (t ; on récupère la liste des réacteurs sur des sysvar (setq vlr_sysvar_liste (car vlr_sysvar) vlr_sysvar_liste (cdr vlr_sysvar_liste)) ; on boucle sur la liste afin de tous les arrêter (foreach elem vlr_sysvar_liste (if (= (car (vlr-data elem)) sysvar) (setq res elem) ) ; if ) ; foreach ) ) ; cond res ) ; force_sysvar_existe ;--------------------------------------; ; nom: force_sysvar ; ; role: créer et renvoi un réacteur qui; ; permet de forcer la variable ; ; système de nom var_name à la ; ; valeur var_value ; ; param: var_name => nom de la variable; ; var_value => valeur voulue ; ; retour: un réacteur ; ; nil si erreur ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;--------------------------------------; (defun force_sysvar( var_name var_value / res) (setq res nil) (cond ((/= (type var_name) 'STR) ) ((= var_value nil) ) ((= (setq var_name (strcase var_name)) nil) ) ; on test si var_name est bien une variable système ((= (getvar var_name) nil) ) ; on test si le type de var_name et bien le même que var_value ((/= (type var_value) (type (getvar var_name))) ) ; on test si un réacteur sur cette variable existe déjà ((/= (setq rr (force_sysvar_existe var_name)) nil) ; on désactive l'ancien réacteur (stop_force_sysvar rr) ; on initialise la variable système (setvar var_name var_value) ; on créer le nouveau réacteur (setq res (vlr-sysvar-reactor (list var_name var_value) '((:vlr-sysvarchanged . modif_sysvar)))) ) (t ; on initialise la variable système (setvar var_name var_value) ; on créer le nouveau réacteur (setq res (vlr-sysvar-reactor (list var_name var_value) '((:vlr-sysvarchanged . modif_sysvar)))) ) ) ; cond res ) ; force_sysvar ;------------------------------; ; nom: stop_force_sysvar ; ; role: stop le réacteur rea ; ; param: rea => réacteur ; ; retour: t si tout c'est passé; ; nil si erreur ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;------------------------------; (defun stop_force_sysvar( rea / res) (setq res nil) (cond ; si rea vaut nil ((= rea nil) ) ; si rea est un réacteur de sysvar ((= (type rea) 'VLR-SysVar-Reactor) (vlr-remove rea) (setq res t) ) ) ; cond res ) ; stop_force_sysvar ;--------------------------------------; ; nom: stop_all_force_sysvar ; ; role: stop tous les réacteurs sur des; ; variables système ; ; param: aucun ; ; retour: t si tout c'est bien passé ; ; nil sinon ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;--------------------------------------; (defun stop_all_force_sysvar( / res vlr_sysvar vlr_sysvar_liste) (setq res t) (cond ; on test s'il y a encore des réacteurs sur des sysvar ((= (setq vlr_sysvar (vlr-reactors :VLR-SysVar-Reactor)) nil) ) (t ; on récupère la liste des réacteurs sur des sysvar (setq vlr_sysvar_liste (car vlr_sysvar) vlr_sysvar_liste (cdr vlr_sysvar_liste)) ; on boucle sur la liste afin de tous les arrêter (foreach elem vlr_sysvar_liste (setq res (and res (stop_force_sysvar elem))) ) ; foreach ) ) ; cond res ) ; stop_all_force_sysvar ;--------------------------------------; ; nom: liste_force_sysvar ; ; role: renvoie le nombre de réacteurs; ; sous la forme d'une liste: ; ; ((var_name1 var_valeur1) ; ; (var_name2 var_valeur2)...) ; ; param: aucun ; ; retour: une liste ; ; nil si aucun réacteur ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;--------------------------------------; (defun liste_force_sysvar( / res) (setq res nil) (cond ; on test s'il y a encore des réacteurs sur des sysvar ((= (setq vlr_sysvar (vlr-reactors :VLR-SysVar-Reactor)) nil) ) (t ; on récupère la liste des réacteurs sur des sysvar (setq vlr_sysvar_liste (car vlr_sysvar) vlr_sysvar_liste (cdr vlr_sysvar_liste)) ; on boucle sur la liste afin de tous les arrêter (foreach elem vlr_sysvar_liste (setq res (cons (list (car (vlr-data elem)) (cadr (vlr-data elem))) res)) ) ; foreach ) ) ; cond res ) ; liste_force_sysvar [Edité le 7/8/2008 par bseb67] [Edité le 7/8/2008 par bseb67]
-
Chez free ils sont super ch.... Ils ont coupés mes pages persos :mad: :mad: J'ai fait une demande de réactivation pour pouvoir déposer un plan. Le plan n'est pas un super plan, mais devrai aller pour ce que le challenge cherche à faire. Pages persos réactivées: http:// http://bseb67.free.fr/cadxp/challenge/super_challenge/test_bloc.dwg Il me reste plus qu'à réinstaller autocad à la maison et commencer le code. [Edité le 29/7/2008 par bseb67]
-
Super challenge !!! Pas irréalisable, mais sans moi ! :casstet: PS : Je n'ai jamais rencontré de cas de figure ou cet outils serait utile ...
