bseb67
Membres-
Compteur de contenus
833 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bseb67
-
Salut ingoenius! Est-ce que t'es blocs ont des noms spécifiques? chez nous les blocs réprésentant un objet commenceent par le_bloc_truc, puis on met les dimensions si c'est du tube ou autre, donc on obtient le_bloc_truc_200_120 le_bloc_truc_180_120 le_bloc_truc_20_120 Mais là, si tu trie par le nom (avec un AutoCAD-strlsort cela n'ira pas, car 180 < 20 en alphabétique. Donc l'astuce je trouvé, c'est de créer une liste du genre: (200 . le_bloc_truc_200_120) (180 . le_bloc_truc_180_120) (20 . le_bloc_truc_20_120) Puis de trier sur le diamètre. Cela pour un type de blocs, ensuite si tu veux l'appliquer sur plusieurs types, tu lance d'abord sur blocs de types chaises, et ainsi de suite.
-
SAlut Patrick_35! Dans le sens (while (while (while ) ) ) contre (foreach (foreach (foreach )))? Benchmark fait déjà de l'itératif, puisqu'il lance un certain nombre de fois. [Edité le 25/10/2007 par bseb67]
-
Salut à tous! Ayant développé une appli pour le boulot, une fois que ca marche, je cherche à améliorer si je suis motivé. Comme je faisais des boucles while, je me suis dit, on passe à foreach. J'ai modifié le code, lancé le nouveau lisp. et là :o :o horreur :o :o le temps de recherche est multiplié par 2! Avec le lisp benchmark (que gile m'a fourni) j'ai fait des essais, comme mon lisp utilise des fonctions récursives: une fonction while simple et une récursive de même pour foreach. Voilà le lisp de test et les résultats (defun fwhile1( lst / cpt lg res) (setq cpt 0 lg (length lst) res nil) (while (< cpt lg) (if (= (nth cpt lst) 2) (setq res t) ) ; if (setq cpt (1+ cpt)) ) ; while res ) ; fwhile1 (defun ffor1( lst / elem res) (setq res nil) (foreach elem lst (if (= elem 2) (setq res t) ) ; if ) ; foreach res ) ; ffor1 (defun fwhile2( lst / cpt lg res) (setq cpt 0 lg (length lst) res nil) (while (< cpt lg) (if (= (nth cpt lst) 2) (setq res t) ) ; if (fwhile2 (cdr lst)) (setq cpt (1+ cpt)) ) ; while res ) ; fwhile2 (defun ffor2( lst / elem res) (setq res nil) (foreach elem lst (if (= elem 2) (setq res t) ) ; if (ffor2 (cdr lst)) ) ; foreach res ) ; ffor2 (setq VAR_LG 1) (defun test1( / lst) (setq cpt 1 lst '(1)) (while (< cpt VAR_LG) (setq lst (append lst (list cpt)) cpt (1+ cpt)) ) ; while (print (strcat "Comparaison avec: " (itoa VAR_LG) " éléments")) (print) ;(benchmark '((fwhile1 lst)(ffor1 lst))) (setq VAR_LG (* 10 VAR_LG)) ) ; test (setq nb 0 nb_f 5) (while (< nb nb_f) (test1) (setq nb (1+ nb)) ) (setq VAR_LG 11) (defun test2( / lst) (setq cpt 1 lst '(1)) (while (< cpt VAR_LG) (setq lst (append lst (list cpt)) cpt (1+ cpt)) ) ; while (print (strcat "Comparaison avec: " (itoa VAR_LG) " éléments")) (print) (benchmark '((fwhile2 lst)(ffor2 lst))) (setq VAR_LG (1+(1+ VAR_LG))) ) ; test (setq nb 0 nb_f 6) (while (< nb nb_f) (test2) (setq nb (1+ nb)) ) "Comparaison avec: 1 éléments" Benchmarking ..................Elapsed milliseconds / relative speed for 32768 iteration(s): (FWHILE1 LST).....1344 / 1.05 (FFOR1 LST).......1406 / 1.00 "Comparaison avec: 10 éléments" Benchmarking ..................Elapsed milliseconds / relative speed for 32768 iteration(s): (FFOR1 LST).......1578 / 1.07 (FWHILE1 LST).....1688 / 1.00 "Comparaison avec: 100 éléments" Benchmarking .................Elapsed milliseconds / relative speed for 16384 iteration(s): (FFOR1 LST).......1656 / 1.79 (FWHILE1 LST).....2969 / 1.00 "Comparaison avec: 1000 éléments" Benchmarking ..............Elapsed milliseconds / relative speed for 2048 iteration(s): (FFOR1 LST).......1297 / 7.38 (FWHILE1 LST).....9578 / 1.00 "Comparaison avec: 10000 éléments" Benchmarking ...........Elapsed milliseconds / relative speed for 256 iteration(s): (FFOR1 LST)........1515 / 62.61 (FWHILE1 LST).....94859 / 1.00 En appel simple, le foreach est bien plus rapide lorsqu'il y a beaucoup de données (en fait pour 4 éléments le foreach et le while sont équivalents) "Comparaison avec: 1 éléments" Benchmarking ..................Elapsed milliseconds / relative speed for 32768 iteration(s): (FWHILE2 LST).....1343 / 1.07 (FFOR2 LST).......1437 / 1.00 "Comparaison avec: 3 éléments" Benchmarking .................Elapsed milliseconds / relative speed for 16384 iteration(s): (FWHILE2 LST).....1204 / 1.18 (FFOR2 LST).......1422 / 1.00 "Comparaison avec: 5 éléments" Benchmarking ..............Elapsed milliseconds / relative speed for 2048 iteration(s): (FWHILE2 LST).....1578 / 1.36 (FFOR2 LST).......2141 / 1.00 "Comparaison avec: 7 éléments" Benchmarking .........Elapsed milliseconds / relative speed for 64 iteration(s): (FWHILE2 LST).....1938 / 1.43 (FFOR2 LST).......2766 / 1.00 "Comparaison avec: 9 éléments" Benchmarking ...Elapsed milliseconds / relative speed for 1 iteration(s): (FWHILE2 LST).....2187 / 1.42 (FFOR2 LST).......3110 / 1.00 "Comparaison avec: 11 éléments" Benchmarking ...Elapsed milliseconds / relative speed for 1 iteration(s): (FWHILE2 LST).....240422 / 1.66 (FFOR2 LST).......400187 / 1.00 Et bien là, c'est plus le cas :o. Bon je sais, la différence est moins flagrante, mais apparement en appel récursif, le foreach perd en efficacité
-
Re, Tu as bien l'autorisation sous autocad d'enregistrer les modifications dans le cui? Bon, c'est vrai que chez nous au bureau on a eu un big dans le même genre, il n'y avait pas d'image du tout :o ! la barre est toujours là, mais elle est vide, en passant sur les boutons l'info bulle apparaissait quand même. Solution partielle => décharger les fichier cui (commande chargmnu) puis les recharger. Sinon, je ne sais. peut-être que quelqu'un d'autre aura une solution.
-
Salut Davi! Le "?" dasn un petit nuage signifie qu'il ne trouve pas les bmp. T'as bien vérifier si tu n'as pas changé les chemins des bmp? Ouvre l'outil de personnalisation de l'interface utilisateur (clic droit sur ta barre d'outils => personnaliser). Il faut que lien "Petite image" ou "Grande image" soit le bon chemin et nom de fichier. AU fait, si tu clic sur un des boutons, ta fonction se lance-t-elle?
-
:o :o :casstet: :P C'est n'importe quoi! Donc je vais quand même devoir changer mon code :( ! Sinon il me reste à faire une fonction de trie. J'ai déjà fait le tri à bulles, mais c'est l'un des plus lent. Sinon, free ca coince encore. j'ai donc mis en partage un fichier zip: http:// http://dl.free.fr/c3gj6Kooc/bd_mots_bseb67_challenge13.zip Le zip est protégé nom:bseb67 mdp: cadxp. C'est un fichier contenant 6 fichiers txt: MOT3L.txt, MOT4L.txt, MOT5L.txt, MOT6L.txt MOT7L.txt, MOT8L.txt et MOT9L.txt. Deuxième partie: 1) il faut charger chaque fichier sous forme d'une liste par fichier. Les mots ne sont pas accentués. => les fichiers contiennent plusieurs lignes. Pour les mots de 3 lettres (MOT3L.txt) les premières lignes sont celles-ci: AAA/ AAB/ AAC/ AAD/ada/ Donc en majuscule on a une suite de lettres triées alphabétiquement. Puis un "/" pour séparer les mots. Ensuite en minuscule la liste des mots possibles pour cette suite. (Voilà le pourquoi de genere et de combi :) ). Pour ce mini exemple on aura alors une variable (MOT3L par exemple) qui vaudra: '(("AAA") ("AAB") ("AAC") ("AAD" "ada")) 2) faire une fonction qui renvoie tous les mots possibles avec la liste créer par genere. exemple: (setq lst (genere 4)) => '("A" "A" "D" "A") (setq lst_combi (combi lst 3)) => '(("A" "A" "A" "D") ("A" "A" "A") ("A" "A" "D")) (tous_les_mots lst_combi) => '("ada") 3) faire un petit main qui demande à l'utilisateur un nombre de lettre (utilisé pour genere) et on lancera combi avec 3 comme deuxième paramètre. Il faudra alors lui demander de taper tous les mots qu'il connait et de donner un score. 4) Il sera possible, vu que je pense avoir oublier des mots, de créer un lisp pour ajouter de nouveau mot et sauvegarder les données dans les fichiers. 5) Une variante possible: le mot le plus long (vu que c'est 9 lettres pour le jeu) 6) Autre variante : le jeu du pendu. 7) Pour finir de faire une extension graphique : dessin dans autocad d'un tableau contenant les mots saisie et s'ils sont validés + ceux non trouvés. Voilà, j'espère enfin voir quelqu'un de plus que Gile, :( , ce n'est pas que je ne t'aimes pas Gile, mais à part nous deux il n'y a personne pour mon challenge. :( :( :( [Edité le 23/10/2007 par bseb67]
-
:o :o :casstet: :P C'est n'importe quoi! Donc je vais quand même devoir changer mon code :( ! Sinon il me reste à faire une fonction de trie. J'ai déjà fait le tri à bulles, mais c'est l'un des plus lent. Sinon, free ca coince encore. j'ai donc mis en partage un fichier zip: http:// http://dl.free.fr/bW9vkmWuu/bd_mots_challenge13.zip Le zip est protégé nom:bseb67 mdp: cadxp. C'est un fichier contenant 6 fichiers txt: MOT3L.txt, MOT4L.txt, MOT5L.txt, MOT6L.txt MOT7L.txt, MOT8L.txt et MOT9L.txt. Deuxième partie: 1) il faut charger chaque fichier sous forme d'une liste par fichier. Les mots ne sont pas accentués. => les fichiers contiennent plusieurs lignes. Pour les mots de 3 lettres (MOT3L.txt) les premières lignes sont celles-ci: AAA/ AAB/ AAC/ AAD/ada/ Donc en majuscule on a une suite de lettres triées alphabétiquement. Puis un "/" pour séparer les mots. Ensuite en minuscule la liste des mots possibles pour cette suite. (Voilà le pourquoi de genere et de combi :) ). Pour ce mini exemple on aura alors une variable (MOT3L par exemple) qui vaudra: '(("AAA") ("AAB") ("AAC") ("AAD" "ada")) 2) faire une fonction qui renvoie tous les mots possibles avec la liste créer par genere. exemple: (setq lst (genere 4)) => '("A" "A" "D" "A") (setq lst_combi (combi lst 3)) => '(("A" "A" "A" "D") ("A" "A" "A") ("A" "A" "D")) (tous_les_mots lst_combi) => '("ada") 3) faire un petit main qui demande à l'utilisateur un nombre de lettre (utilisé pour genere) et on lancera combi avec 3 comme deuxième paramètre. Il faudra alors lui demander de taper tous les mots qu'il connait et de donner un score. 4) Il sera possible, vu que je pense avoir oublier des mots, de créer un lisp pour ajouter de nouveau mot et sauvegarder les données dans les fichiers. 5) Une variante possible: le mot le plus long (vu que c'est 9 lettres pour le jeu) 6) Autre variante : le jeu du pendu. 7) Pour finir de faire une extension graphique : dessin dans autocad d'un tableau contenant les mots saisie et s'ils sont validés + ceux non trouvés. Voilà, j'espère enfin voir quelqu'un de plus que Gile, :( , ce n'est pas que je ne t'aimes pas Gile, mais à part nous deux il n'y a personne pour mon challenge. :( :( :(
-
Vrai d'après la doc: mais tiens c'est bizarre, car moi je l'avais essayé (je ne lis pas toujours la doc entièrement :cool: ) et bien ca marche :o ! Car: (setq test '("A" "B" "A" "C")) (vl-sort test '<) => ("A" "A" "B" "C") et non ("A" "B" "C") comme dit dans la doc Donc je garde mon bout.
-
Resalut! Ok, donc le strcat te sert pour comparer alphabétiquement celles de longueurs différentes. C'est bon alors. C'était justement cela que je cherchais, donc je vais le garder ;). je poste aussi les deux fonctions que j'appelle (retire et retire_doublons) ;---------------------------------; ; nom: retire ; ; role: retire le pos_ième élément; ; de la liste ll ; ; param:pos => indice ; ; liste => liste d'entrée ; ; retour: liste ; ; date: 21/10/2007 ; ; BLAES Sébastien ; ;---------------------------------; (defun retire( pos ll / cpt lg res) (setq cpt 0 lg (length ll) res '()) (while (< cpt lg) (if (/= cpt pos) (setq res (append (list (nth cpt ll)) res)) ) ; if (setq cpt (1+ cpt)) ) ; while (reverse res) ) ; retire ;------------------------------; ; nom: retire_doublons ; ; role: retire les éléments en ; ; double de la liste ll ; ; param:pos => indice ; ; liste => liste d'entrée; ; retour: liste ; ; date: 21/10/2007 ; ; BLAES Sébastien ; ;------------------------------; (defun retire_doublons( ll / cpt lg res) (setq cpt 0 lg (length ll) res '()) (while (< cpt lg) (if (= (member (setq tmp (nth cpt ll)) res) nil) (setq res (append res (list tmp))) ) ; if (setq cpt (1+ cpt)) ) ; while res ) ; retire_doublons Et donc la version complète avec ton aide pour le trie: ;-------------------------------; ; nom: combi ; ; role: retourne un ensemble de ; ; listes de combinaisons ; ; param: liste => liste d'entrée; ; nb => taille mini des ; ; listes résultats ; ; retour: liste de listes ; ; date: 21/10/2007 ; ; BLAES Sébastien ; ;-------------------------------; (defun combi( liste nb / res ) (setq res (append (sous_combi (vl-sort liste '<) nb 0) (list (vl-sort liste '<)))) (setq res (retire_doublons (reverse res))) ; triage donné par (Gile) (vl-sort res '(lambda (l1 l2) (if (= (length l1) (length l2)) (< (apply 'strcat l1) (apply 'strcat l2)) (> (length l1) (length l2)) ) ) ) ) ; combi (defun sous_combi( liste nb nb2 / res lg cpt tmp) (setq res '()) (cond ((or (= (setq lg (length liste)) nb) (= lg nb2)) (if (= (type (car liste)) 'LIST) (setq res (append res liste)) (setq res (append res (list liste))) ) ) ; fin (t (setq cpt 0) (while (< cpt lg) (setq tmp (sous_combi (retire cpt liste) nb (1- lg))) (if (= (type (car tmp)) 'LIST) (setq res (append res tmp)) (setq res (append res (list tmp))) ) (setq tmp (sous_combi (retire cpt liste) nb 0)) (if (= (type (car tmp)) 'LIST) (setq res (append res tmp)) (setq res (append res (list tmp))) ) (setq cpt (1+ cpt)) ) ; while ) ) ; cond res ) ; sous_combi J'ai essayé avec: (setq test '("A" "C" "E" "B")) (combi test 4) => (("A" "B" "C" "E")) (combi test 3) => (("A" "B" "C" "E") ("A" "B" "C") ("A" "B" "E") ("A" "C" "E") ("B" "C" "E")) (combi test 2) => (("A" "B" "C" "E") ("A" "B" "C") ("A" "B" "E") ("A" "C" "E") ("B" "C" "E") ("A" "B") ("A" "C") ("A" "E") ("B" "C") ("B" "E") ("C" "E")) (combi test 1) => (("A" "B" "C" "E") ("A" "B" "C") ("A" "B" "E") ("A" "C" "E") ("B" "C" "E") ("A" "B") ("A" "C") ("A" "E") ("B" "C") ("B" "E") ("C" "E") ("A") ("B") ("C") ("E")) PS: Mes pages perso sont activées :), je vais mettre les fichiers pour la suite et donner les détails ce soir. a+
-
Resalut! Ok, donc le strcat te sert pour comparer alphabétiquement celles de longueurs différentes. C'est bon alors. C'était justement cela que je cherchais, donc je vais le garder ;). je poste aussi les deux fonctions que j'appelle (retire et retire_doublons) ;---------------------------------; ; nom: retire ; ; role: retire le pos_ième élément; ; de la liste ll ; ; param:pos => indice ; ; liste => liste d'entrée ; ; retour: liste ; ; date: 21/10/2007 ; ; BLAES Sébastien ; ;---------------------------------; (defun retire( pos ll / cpt lg res) (setq cpt 0 lg (length ll) res '()) (while (< cpt lg) (if (/= cpt pos) (setq res (append (list (nth cpt ll)) res)) ) ; if (setq cpt (1+ cpt)) ) ; while (reverse res) ) ; retire ;------------------------------; ; nom: retire_doublons ; ; role: retire les éléments en ; ; double de la liste ll ; ; param:pos => indice ; ; liste => liste d'entrée; ; retour: liste ; ; date: 21/10/2007 ; ; BLAES Sébastien ; ;------------------------------; (defun retire_doublons( ll / cpt lg res) (setq cpt 0 lg (length ll) res '()) (while (< cpt lg) (if (= (member (setq tmp (nth cpt ll)) res) nil) (setq res (append res (list tmp))) ) ; if (setq cpt (1+ cpt)) ) ; while res ) ; retire_doublons Et donc la version complète avec ton aide pour le trie: ;-------------------------------; ; nom: combi ; ; role: retourne un ensemble de ; ; listes de combinaisons ; ; param: liste => liste d'entrée; ; nb => taille mini des ; ; listes résultats ; ; retour: liste de listes ; ; date: 21/10/2007 ; ; BLAES Sébastien ; ;-------------------------------; (defun combi( liste nb / res ) (setq res (append (sous_combi (vl-sort liste '<) nb 0) (list (vl-sort liste '<)))) (setq res (retire_doublons (reverse res))) ; triage donné par (Gile) (vl-sort res '(lambda (l1 l2) (if (= (length l1) (length l2)) (< (apply 'strcat l1) (apply 'strcat l2)) (> (length l1) (length l2)) ) ) ) ) ; combi (defun sous_combi( liste nb nb2 / res lg cpt tmp) (setq res '()) (cond ((or (= (setq lg (length liste)) nb) (= lg nb2)) (if (= (type (car liste)) 'LIST) (setq res (append res liste)) (setq res (append res (list liste))) ) ) ; fin (t (setq cpt 0) (while (< cpt lg) (setq tmp (sous_combi (retire cpt liste) nb (1- lg))) (if (= (type (car tmp)) 'LIST) (setq res (append res tmp)) (setq res (append res (list tmp))) ) (setq tmp (sous_combi (retire cpt liste) nb 0)) (if (= (type (car tmp)) 'LIST) (setq res (append res tmp)) (setq res (append res (list tmp))) ) (setq cpt (1+ cpt)) ) ; while ) ) ; cond res ) ; sous_combi J'ai essayé avec: (setq test '("A" "C" "E" "B")) (combi test 4) => (("A" "B" "C" "E")) (combi test 3) => (("A" "B" "C" "E") ("A" "B" "C") ("A" "B" "E") ("A" "C" "E") ("B" "C" "E")) (combi test 2) => (("A" "B" "C" "E") ("A" "B" "C") ("A" "B" "E") ("A" "C" "E") ("B" "C" "E") ("A" "B") ("A" "C") ("A" "E") ("B" "C") ("B" "E") ("C" "E")) (combi test 1) => (("A" "B" "C" "E") ("A" "B" "C") ("A" "B" "E") ("A" "C" "E") ("B" "C" "E") ("A" "B") ("A" "C") ("A" "E") ("B" "C") ("B" "E") ("C" "E") ("A") ("B") ("C") ("E")) PS: Mes pages perso sont activées :), je vais mettre les fichiers pour la suite et donner les détails ce soir. a+
-
Resalut! Ok, donc le strcat te sert pour comparer alphabétiquement celles de longueurs différentes. C'est bon alors. C'était justement cela que je cherchais, donc je vais le garder ;). je poste aussi les deux fonctions que j'appelle (retire et retire_doublons) ;---------------------------------; ; nom: retire ; ; role: retire le pos_ième élément; ; de la liste ll ; ; param:pos => indice ; ; liste => liste d'entrée ; ; retour: liste ; ; date: 21/10/2007 ; ; BLAES Sébastien ; ;---------------------------------; (defun retire( pos ll / cpt lg res) (setq cpt 0 lg (length ll) res '()) (while (< cpt lg) (if (/= cpt pos) (setq res (append (list (nth cpt ll)) res)) ) ; if (setq cpt (1+ cpt)) ) ; while (reverse res) ) ; retire ;------------------------------; ; nom: retire_doublons ; ; role: retire les éléments en ; ; double de la liste ll ; ; param:pos => indice ; ; liste => liste d'entrée; ; retour: liste ; ; date: 21/10/2007 ; ; BLAES Sébastien ; ;------------------------------; (defun retire_doublons( ll / cpt lg res) (setq cpt 0 lg (length ll) res '()) (while (< cpt lg) (if (= (member (setq tmp (nth cpt ll)) res) nil) (setq res (append res (list tmp))) ) ; if (setq cpt (1+ cpt)) ) ; while res ) ; retire_doublons Et donc la version complète avec ton aide pour le trie: ;-------------------------------; ; nom: combi ; ; role: retourne un ensemble de ; ; listes de combinaisons ; ; param: liste => liste d'entrée; ; nb => taille mini des ; ; listes résultats ; ; retour: liste de listes ; ; date: 21/10/2007 ; ; BLAES Sébastien ; ;-------------------------------; (defun combi( liste nb / res ) (setq res (append (sous_combi (vl-sort liste '<) nb 0) (list (vl-sort liste '<)))) (setq res (retire_doublons (reverse res))) ; triage donné par (Gile) (vl-sort res '(lambda (l1 l2) (if (= (length l1) (length l2)) (< (apply 'strcat l1) (apply 'strcat l2)) (> (length l1) (length l2)) ) ) ) ) ; combi (defun sous_combi( liste nb nb2 / res lg cpt tmp) (setq res '()) (cond ((or (= (setq lg (length liste)) nb) (= lg nb2)) (if (= (type (car liste)) 'LIST) (setq res (append res liste)) (setq res (append res (list liste))) ) ) ; fin (t (setq cpt 0) (while (< cpt lg) (setq tmp (sous_combi (retire cpt liste) nb (1- lg))) (if (= (type (car tmp)) 'LIST) (setq res (append res tmp)) (setq res (append res (list tmp))) ) (setq tmp (sous_combi (retire cpt liste) nb 0)) (if (= (type (car tmp)) 'LIST) (setq res (append res tmp)) (setq res (append res (list tmp))) ) (setq cpt (1+ cpt)) ) ; while ) ) ; cond res ) ; sous_combi J'ai essayé avec: (setq test '("A" "C" "E" "B")) (combi test 4) => (("A" "B" "C" "E")) (combi test 3) => (("A" "B" "C" "E") ("A" "B" "C") ("A" "B" "E") ("A" "C" "E") ("B" "C" "E")) (combi test 2) => (("A" "B" "C" "E") ("A" "B" "C") ("A" "B" "E") ("A" "C" "E") ("B" "C" "E") ("A" "B") ("A" "C") ("A" "E") ("B" "C") ("B" "E") ("C" "E")) (combi test 1) => (("A" "B" "C" "E") ("A" "B" "C") ("A" "B" "E") ("A" "C" "E") ("B" "C" "E") ("A" "B") ("A" "C") ("A" "E") ("B" "C") ("B" "E") ("C" "E") ("A") ("B") ("C") ("E")) PS: Mes pages perso sont activées :), je vais mettre les fichiers pour la suite et donner les détails ce soir. a+
-
Re. J'ai encore un peu de mal, j'arrive à créer ma liste de résultats, mais c'est un peu cochon :( . Car, je fais du récursif (pour une fois que tu n'en fais pas Gile), mais l'ajout dans le résultat fait des sous-listes, donc je test le type pour savoir si je l'ajoute simplement, ou s'il je dois l'ajouter en tant que liste: ;-------------------------------; ; nom: combi ; ; role: retourne un ensemble de ; ; listes de combinaisons ; ; param: liste => liste d'entrée; ; nb => taille mini des ; ; listes résultats ; ; retour: liste de listes ; ; date: 21/10/2007 ; ; BLAES Sébastien ; ;-------------------------------; (defun combi( liste nb / res ) (setq res (append (sous_combi (vl-sort liste '<) nb 0) (list (vl-sort liste '<)))) (setq res (retire_doublons (reverse res))) ) ; combi (defun sous_combi( liste nb nb2 / res lg cpt tmp) (setq res '()) (cond ((or (= (setq lg (length liste)) nb) (= lg nb2)) (setq res liste) ) ; fin (t (setq cpt 0) (while (< cpt lg) (setq tmp (sous_combi (retire cpt liste) nb (1- lg))) [surligneur] (if (= (type (car tmp)) 'LIST) [/surligneur] (setq res (append res tmp)) (setq res (append res (list tmp))) ) (setq tmp (sous_combi (retire cpt liste) nb 0)) (if (= (type (car tmp)) 'LIST) (setq res (append res tmp)) (setq res (append res (list tmp))) ) (setq cpt (1+ cpt)) ) ; while ) ) ; cond res ) ; sous_combi L'autre problème, c'est que le résultat n'est pas trié. Un vl-sort ne marche pas, vu que les élément de la liste n'ont pas la même longueur (une chose que je sais :) ). Donc je cherchai comment faire avec un vl-sort appelant une fonction de trie, sauf que là, c'est un des mes points faibles, comme le mapcar où j'ai encore un peu de mal à utiliser sa puissance. Mais j'ai vu que tu avais fait cela, la seule chose c'est que je comprends pas tout :exclam: . Les 3 premières lignes, c'est ok, le if c'est pour tester si les éléments ont même longueur, on trie "alphabétiquement", sinon par taille. Alors "apply 'strcat" il sert à quoi? PS: mes pages persos sous free ne sont tjs pas activées :mad: , pour mettre les fichiers pour la partie 2. A+
-
Salut gile! Et oui, j'ai fait une erreur :cool: : Il faut remplacer (>= (cadr (nth cpt FREQ_LETTRES)) res) par (>= res (cadr (nth cpt FREQ_LETTRES))). Et pour gagner un peu de temps le fait de ne garder que la borne max est plus rapide. Hier aprem, ma femme voulait faire les magasins, donc je m'y mets maintenant pour combi. PS: vive l'afrique du sud :)! je suis content que les anglais aient perdus.
-
Salut (gile). Oui, c'est vrai qu'il n'y a pas grand monde pour mon challenge :( . Pour la suite, j'attends l'activation de mes pages persos chez free pour donner les fichiers nécessaires à la suite. J'ai déjà fait une partie de la seconde partie (et oui je triche ;), vu que je connais le sujet). Je vais me mettre sur la première partie cette aprem. En tout cas merci pour la fonction rng. Au départ je pensais aussi faire simplement un random entre 1 et 26, mais j'ai choisis de mettre la fréquence des lettres en jeu. (setq FREQ_LETTRES '(("A" 00.00 08.12 8.12) ("B" 08.12 08.94 00.82) ("C" 08.94 12.32 3.38) ("D" 12.32 16.61 4.29) ("E" 16.61 34.30 17.69) ("F" 34.30 35.43 1.13) ("G" 35.43 36.62 1.19) ("H" 36.62 37.36 00.74) ("I" 37.36 44.60 7.24) ("J" 44.60 44.78 0.18) ("K" 44.78 44.80 00.02) ("L" 44.80 50.79 5.99) ("M" 50.79 53.08 2.29) ("N" 53.08 60.76 07.68) ("O" 60.76 65.96 5.20) ("P" 65.96 68.89 2.93) ("Q" 68.89 69.73 00.84) ("R" 69.73 76.17 6.44) ("S" 76.17 85.05 8.88) ("T" 85.05 92.50 07.45) ("U" 92.50 97.74 5.24) ("V" 97.74 99.02 1.28) ("W" 99.02 99.08 00.06) ("X" 99.08 99.62 0.54) ("Y" 99.62 99.88 0.26) ("Z" 99.88 100.00 0.12) ) ) Les quadruplets sont: lettre - % départ - % arrivée - fréquence) Et donc j'obtiens alors: ;--------------------------------; ; nom: random_char ; ; role: retourne un caractère ; ; en utilisant la fréquence; ; param: aucun ; ; retour: un caractère ; ; date: 17/10/2007 ; ; BLAES Sébastien ; ;--------------------------------; (defun random_char( / res cpt find) (setq res (* (rng) 100.0) cpt 0 find nil) ; on parcourt les fréquences, pour trouver la lettre (while (= find nil) (if (and (>= (cadr (nth cpt FREQ_LETTRES)) res) (<= res (caddr (nth cpt FREQ_LETTRES)))) (setq res (car (nth cpt FREQ_LETTRES)) find t) ) ; if ; on incrémente cpt (setq cpt (1+ cpt)) ) ; while res ) ; random_char ;-----------------------------; ; nom: genere ; ; role: retourne nb caractères; ; sous forme d'une liste; ; param: nb => entier ; ; retour: entier ; ; date: 17/10/2007 ; ; BLAES Sébastien ; ;-----------------------------; (defun genere( nb / cpt res) (setq cpt 0 res '()) (while (< cpt nb) (setq res (cons (random_char) res) cpt (1+ cpt)) ) ; while res ) ; genere Il me reste plus qu'a faire combi :). A plus!
-
Salut thierry.garré! Le projet était dans le cadre scolaire: j'ai passé mon master professionnel en informatique spécialité imagerie et calcul l'an dernier. Les modèles de routes sont acquis par un système composé d'un laser rotatif couplé à un gps => au niveau fiabilité c'était moyen, l'acquisition était faite par une équipe des ponts et chaussées de paris, ils devraient obtenir un meilleur système d'acquisition. Le résultat est composé de deux fichiers: - un fichier pour la trajectoire du véhicule d'acquisition (suite de points en 3D) - un fichier pour la route (suite de points 3D suivie d'une liste de triangles) Le rapport écrit que j'avais fait n'est pas trop bon, il est un peu mal présenté, mais j'ai malheureusement eu un accident lors de la période de rédaction qui fait que je n'ai pas pu le corriger avant de le rendre. Par contre la soutenance est bien faite, envoye moi par mp ton adresse mail (pour MNT pareil). Je t'enverrai cela ce week-end.
-
Salut MNT! J'aurai pu te le donner l'an dernier! Car j'ai travailler sur un projet au LRPC (laboratoire régional des pont et chaussées) de strasbourg. Implémentation d'un calcul et mesure de distance de visibilité sur routes modélisées en 3D. J'y ai cherché des infos pour mes calculs et simulations. Si tu connais quelqu'un travaillant dans un LRPC ou CETE voir DDE, il devrai pouvoir te le filler. Par contre, je ne sais pas s'il existe une version récente, car celle dont je disposai était de 1984 :o. C'est un peu vieux ;) Si t'as une question précise, avec mes souvenir et notes, je peux peut être retrouver ce que tu cherchais.
-
Re salut, wbloc nettoye ton fichier, sur certains plans, je divise par 2 la taille du fichier. Mon record, avec un purge, wbloc, controle => un peu plus de 90% de gain :o . fichier d'origine 21Mo fichier final 2Mo. Mais attention, le wbloc te supprime les groupes, les filtres de calques et les macros.
-
Salut Jo974! Le dvd 2008 contient un répertoire 32 et 64bits. Donc lors de l'installation, il devrai choisir la bonne version en fonction de ton OS. Le 64bits devrai apporter du gain de temps pour le traitement de données, mais c'est la chose que je cherche à savoir. :casstet: A l'époque je voulais essayer la 64bits d'XP, car je travaillais sur un projet informatique où l'utilisation théorique du 64bits aurai augmenter les performances, mais avec tous les bugs et souci de compatibilité des drivers et du matériel, j'ai pas fait l'essai. :( Pour les autres, je sais pas.
-
Salut Circus! J'utilise MEP 2008, et bien j'ai souvent le même problème. L'astuce réside à faire un wbloc de ton dessin (je sais pas si dispo sous AA) puis de faire un controle du fichier. Voilà, si cela ne donne rien, et bien :o, je sais pas :(
-
Euh...... :o Oui, sinon tu risques de ne pas donner envie aux autres. Pour la génération des lettres, comme le tendre random n'existe pas en lisp, t'as pu en faire un? On pourrai utiliser aussi la fréquence des lettres dans la langue française. Et il faut que je prépare la suite ;). en mettant en ligne les données pour le jeu. J'ai bosser pas mal pour la "base de données" du jeu, mais elle pourra être compléter. Il faut bien un peu jouer avec autocad, pas que travailler :cool: , non? Pour le nom de ce jeu, on pourra l'appeler:
-
Petite précision ou explication: (combi '("b" "a" "c" "a") 2) => '(("a" "a" "b" "c") ("a" "a" "b") ("a" "a" "c") ("a" "b" "c") ("a" "a") ("a" "b") ("a" "c") ("b" "c")) et donc (combi '("b" "a" "c" "a") 3) => '(("a" "a" "b" "c") ("a" "a" "b") ("a" "a" "c") ("a" "b" "c"))
-
Re salut! Tu t'ennuies vraiment le soir? ;). Oui, on supprime les doublons.
-
Salut Gile, Non, on peut avoir plusieurs fois la même, mais ce serai mieux d'avoir nb/2 lettres différentes. Sinon le jeu risque d'être balaise. [Edité le 16/10/2007 par bseb67]
-
Et voilà, Mon premier challenge :)! En plus c'était mon numéro de maillot dans mon club de foot. Le but de ce challenge est de faire un petit jeu, on fera 2 parties. La première sera une préparation du terrain. Je vois déjà des :casstet: :o :exclam: . La première est je pense plus difficile que la seconde. Voilà le sujet de la première partie, qui est en fait deux fonctions: 1° (defun genere( nb)) => on doit renvoyé une liste de nb lettres de l'alphabet ex: (genere 3) => '("a" "d" "p") 2° (defun combi( lst min)) => lst est une liste de nb lettres de l'alphabet, et on doit renvoyé toutes les listes possibles de sorte que les éléments de lst soient triés alphabétiquement et que l'on prenne de nb à min lettres. (Je sais pas trop si cela va être clair, alors voici la suite de l'exemple) ex: (combi '("a" "d" "p") 1) => '(("a" "d" "p") ("a" "d") ("a" "p") ("d" "p") ("a") ("d") ("p") ) VOilà. On va attendre ce week-end pour donner des premiers jets. Bonne soirée.
-
Salut Stephan35! C'est vrai que c'est un peu bizarre. Je viens d'essayer chez moi, sur une MEP 2008, ca marche. J'ai remplacé: (if (not (= (substr (ver) 1 11) "Visual LISP")) (load "acad2008doc.lsp")) par cela: (if (not (= (substr (ver) 1 11) "Visual LISP")) (load "acad2008doc.lsp")) (LOAD "T:/Dossiers Personnels/Seb/LISP/utils.lsp") Et mes fonctions d'utils.lsp sont accessibles. Par contre c'est vrai que j'ai eu des souci avec le pgp qui sautai à chaque redémarrage machine (on utilise des profils itinérants pour les sessions windows et donc paramètres perso d'autocad) les premières semaines :casstet:, mais maintenant ca marche. Bonne chance ;)
