Patrick_35 Posté(e) le 17 mai 2007 Posté(e) le 17 mai 2007 BonjourJe reprends une idée que je trouve sympa sur un site AnglaisC'est de trouver une astuce de programmation pour résoudre un problème et qui nous aidera dans nos futurs lispsDonc je commence le premier en esperant que d'autres suivront ;) J'ai une liste qui se compose de cette manière(setq lst '(("a" "c") ("b" "b") ("b" "a") ("a" "a") ("d" "c") ("d" "e") ("c" "c") ("b" "e") ("b" "e"))) Je souhaite tout simplement la mettre dans l'ordre(("a" "a") ("a" "c") ("b" "a") ("b" "b") ("b" "e") ("b" "e") ("c" "c") ("d" "c") ("d" "e")) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 17 mai 2007 Posté(e) le 17 mai 2007 Super initiaive, J'aime beaucoup ces "challenges" sur TheSwamp. Je donne une première réponse, j'en ai une autre, peut-être moins élégante, mais qui semble plus rapide. Je laisse un peu de temps à d'autres pour chercher... (vl-sort lst '(lambda (s1 s2) ( ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 17 mai 2007 Posté(e) le 17 mai 2007 (gile)....arrête de me faire du mal !!!... http://gifs.toutimages.com/images/personnages/person_028.gif Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Didier-AD Posté(e) le 17 mai 2007 Posté(e) le 17 mai 2007 Comme on disait avant dans le jeu des chiffres et des lettres : "Pas mieux" bonne idée, ce challenge ; mon problème c'est que je me connecte tard et que les bonnes idées auront déjà été émises.
Patrick_35 Posté(e) le 17 mai 2007 Auteur Posté(e) le 17 mai 2007 eh eh, malin le (gile). bonnes idées auront déjà été émises. Par forcement, je pense que l'on peut faire plus rapide et une routine qui fonctionne aussi avec des nombres Maintenant un peu plus compliqué (setq lst '((1 "a" "c") (2 "b" "b") (5 "b" "a") (1 "a" "a") (4 "d" "c") (2 "d" "e") (10 "c" "c") (12 "b" "e") (2 "b" "e")))Je souhaite trier ma liste à partir du 2em élement ((1 "a" "a") (1 "a" "c") (5 "b" "a") (2 "b" "b") (12 "b" "e") (2 "b" "e") (10 "c" "c") (4 "d" "c") (2 "d" "e")) ps : (gile) n'appuie pas trop vite sur le "buzzer" ;) Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 17 mai 2007 Posté(e) le 17 mai 2007 Pas beau...et le plus difficile étant été déjà fait par (gile) ... (defun test (lst / LST-F LST1 X) (setq lst1 (vl-sort (mapcar 'cdr lst) '(lambda (s1 s2) (< (apply 'strcat s1) (apply 'strcat s2)))) lst-F nil x 0) (repeat (length lst) (foreach n lst (if (equal (cdr n) (nth x lst1)) (setq lst-F (append lst-F (list n))) ) ) (setq x (+ x 1)) ) lst-F ) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 17 mai 2007 Posté(e) le 17 mai 2007 ps : (gile) n'appuie pas trop vite sur le "buzzer" J'ai laissé Bred répondre ;) Une qui fonctionne avec des listes de longueur inégales, et aussi bien avec des chiffres ou des lettres" (les éléments de même rang doivent être de même nature). (setq lst '((1 "a" "c") (2 "b" "b") (5 "b" "a") (1 "a" "a" "a") (4 "d" "c") (2 "d" "e") (10 "c" "c") (12 "b" "e" "a") (2 "b" "e" "c") (5 "a" "a" "b") )) ;;Arguments ;; lst : la liste à trier ;; pos : la position de l'élément à partir duquel commence le tri (premier élément = 0) (defun test (lst pos / n) (setq n (apply 'max (mapcar 'length lst))) (repeat (- n pos) (setq n (1- n) lst (vl-sort lst '(lambda (e1 e2) ( ) ) ) ) (test lst 1) -> ((1 "a" "a" "a") (5 "a" "a" "b") (1 "a" "c") (5 "b" "a") (2 "b" "b") (12 "b" "e" "a") (2 "b" "e" "c") (10 "c" "c") (4 "d" "c") (2 "d" "e")) (test lst 0) -> ((1 "a" "a" "a") (1 "a" "c") (2 "b" "b") (2 "b" "e" "c") (2 "d" "e") (4 "d" "c") (5 "a" "a" "b") (5 "b" "a") (10 "c" "c") (12 "b" "e" "a")) [Edité le 17/5/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ElpanovEvgeniy Posté(e) le 18 mai 2007 Posté(e) le 18 mai 2007 Bonjour :) (defun check (a b i) (cond ((not (and a b)) nil) ((> i 0) (check (cdr a) (cdr b) (1- i))) ((< (car a) (car b))) ((= (car a) (car b)) (check (cdr a) (cdr b) 0)) ) ;_ cond ) ;_ defun (defun test (lst pos) (vl-sort lst '(lambda (a b) (check a b pos)))) Evgeniy
(gile) Posté(e) le 18 mai 2007 Posté(e) le 18 mai 2007 WAOUWW :exclam: :exclam: :exclam: Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 18 mai 2007 Auteur Posté(e) le 18 mai 2007 Ouch...Je pense que je vais faire plus simple (vl-sort lst '(lambda (a b) (if (= (cadr a) (cadr b)) (< (caddr a) (caddr b)) (< (cadr a) (cadr b)) ) ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant