Rechercher dans la communauté
Affichage des résultats pour « challenge » dans sujets.
-
Salut, Pour faire suite à ce sujet qui fait suite à celui-là, je propose un challenge (assez) facile pour aborder la récursivité dans un cadre où elle est incontournable. Il s'agit simplement de définir une fonction qui retourne la liste des chemins de tous les dossiers et sous dossiers contenus dans un dossier (voir la fonction vl-directory-files). Choisir un dossier avec des sous-dossiers à différents niveaux d'imbrication. Avec cette arborescence : http://gilecad.azurewebsites.net/Resources/arborescence.png La fonction doit retourner cette liste : ( "C:\\Temp\\dossier racine\\Dossier 1" "C:\\Temp\\dossier racine\\Dossier 1\\Sous dossier 1.1" "C:\\Temp\\dossier racine\\Dossier 1\\Sous dossier 1.1\\Bidule" "C:\\Temp\\dossier racine\\Dossier 1\\Sous dossier 1.1\\Truc" "C:\\Temp\\dossier racine\\Dossier 1\\Sous dossier 1.1\\Truc\\Machin" "C:\\Temp\\dossier racine\\Dossier 1\\Sous dossier 1.2" "C:\\Temp\\dossier racine\\Dossier 2" "C:\\Temp\\dossier racine\\Dossier 2\\Sous dossier 2.1" "C:\\Temp\\dossier racine\\Dossier 2\\Sous dossier 2.2" ) Merci à ceux qui l'ont déjà fait (ou qui savent le faire) de laisser chercher les autres.
-
Bonjour @DenisHen Si tu fais ça pour rouler en voiture de luxe, tu te fourvoies. Il faut le faire par plaisir, comme résoudre un bel exo de géométrie, ou une grille de mots croisés du défunt Laclos qui m'a fait passer bien des nuits blanches, mais aussi des sentiments de réussite absolue. Dans la même veine, je me suis créé récemment un challenge personnel que je viens de résoudre en LSP et je suis fier de moi. Sans doute lentement, car je travaille lentement, mais ça fonctionne et je biche bien plus que si j'avais dû demander de l'aide. Ce que je veux sire, c'est que si j'y arrive, tu dois y arriver, nous sommes tous (ceux que tu cites) partis du zéro absolu, le reste, c'est du travail. @Luna ne déroge pas à la règle, son ascension est le fruit du travail, aujourd'hui, elle est une référence par ses travaux. Je la salue respectueusement. (Traduisons en langage naturel : reverse (vl-remove-if-not '(lambda (x) (= (car x) 42)) entlist)) Retourner la liste de tous les codes qui comment par 42. De droite à gauche (fonctionnement du lisp) entlist est la liste obtenue par entget, si le code est 42 le prendre, et à la fin, on renverse la liste. Et on a la liste de tous les segments courbes (bulge). Est-ce plus clair ? Amicalement
-
Bonjour Pour faire suite à ce sujet, rien ne vaut un bon exercice. L'idée est de déterminer si j'ai un double dans une liste, et de manière récursive. (gile), comme tu es notre maitre à tous, tu as un handicap d'une journée ;) Exemples : (doublon '(1 2 3 4 5 6 7 8 9)) --> nil (doublon '(1 2 3 4 5 6 7 8 9 1)) --> T (doublon '(1 2 3 4 5 1 6 7 8 9)) --> T (doublon '((1 2) (2 3) (4 5) (6 7) (8 9))) --> nil (doublon '((1 2) (2 3) (4 5) (6 7) (8 9) (1 2))) --> T (doublon '((1 2 3) (2 3) (4 5) (6 7) (8 9) (1 2))) --> nil (doublon '((1 2 3) (2 3) (4 5) (6 7) (8 9) (1 2 3))) --> T @+
-
[Challenge] Petite idée pour un codage/décodage Vigenère
(gile) a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
Une version en C#. L'algorithme est le même que celui utilisé plus haut en LISP et F#, mais au delà de la différence de langage (syntaxe), j'ai aussi essayé de de privilégier le paradigme POO (Programmation Orientée Objet) quand LISP et F# privilégient plutôt la Programmation Fonctionnelle. Définition d'une classe abstraite Vigenere qui expose trois constructeurs (surcharge) et deux méthodes publiques : Encrypt et Decrypt et de trois classes dérivées pour lesquelles la séquence de caractères à chiffrer est définie. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace VigenereEncryption { public abstract class Vigenere { private char[] chars; private delegate int Operator(int i, int j); private int encryptOperator(int i, int j) => i + j; private int decryptOperator(int i, int j) => i - j; public Vigenere(char[] alphabet) { chars = alphabet; } public Vigenere(string alphabet) : this(alphabet.ToCharArray()) { } public Vigenere(IEnumerable<int> ints) : this(ints.Select(i => (char)i).ToArray()) { } public string Encrypt(string str, string key) => Crypting(encryptOperator, str, key); public string Decrypt(string str, string key) => Crypting(decryptOperator, str, key); private string Crypting(Operator op, string str, string key) { var builder = new StringBuilder(); int keyIndex = 0; var keyIndices = new int[key.Length]; for (int i = 0; i < key.Length; i++) { keyIndices[i] = Array.IndexOf(chars, key[i]); } foreach (char chr in str) { int n = Array.IndexOf(chars, chr); int m = keyIndices[keyIndex]; if (0 <= n && 0 <= m) { builder.Append(chars[(chars.Length + op(n, m)) % chars.Length]); keyIndex = (keyIndex + 1) % keyIndices.Length; } else { builder.Append(chr); } } return builder.ToString(); } } public class VigenereUppers : Vigenere { const string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; public VigenereUppers() : base(alphabet) { } } public class VigenereLetters : Vigenere { const string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒabcdefghijklmnopqrstuvwxyzàâäçéèêëîïôöùûüÿæœ"; public VigenereLetters() : base(alphabet) { } } public class VigenereChars : Vigenere { static IEnumerable<int> alphabet = Enumerable.Range(32, 224); public VigenereChars() : base(alphabet) { } } } On crée un objet d'une classe dérivée de la classe de base Vigenere (une instance de cette classe) et on peut appeller les méthodes Encrypt et Decrypt de cet objet. var vigenUppers = new VigenereUppers(); string crypted1 = vigenUppers.Encrypt("J'ADORE ECOUTER LA RADIO TOUTE LA JOURNEE", "MUSIQUE"); var vigenLetters = new VigenereLetters(); string crypted2 = vigenLetters.Encrypt("[Challenge] Petite idée pour un codage/décodage Vigenère", "CADxp"); var vigenChars = new VigenereChars(); string crypted3 = vigenChars.Encrypt("[Challenge] Petite idée pour un codage/décodage Vigenère", "F#4fun"); -
Bonjour @didier Bien que je sois intimement convaincu que tu trouveras (à raison) toujours plus d'inspiration dans les lignes de (gile) que dans les miennes, si des fois il y en a une ou deux qui te conviennent en ce qui me concerne tout ce qui est sur les forums est libre de droit, être repris est toujours une forme de reconnaissance😉 Pour une date de dépôt je suis plus mitigé, l'esprit d'un challenge est un jeu entre vitesse d'écriture et optimisation des lignes de code, personnellement je n'ai pas d'état d'âme à poster rapidement si je pense que la solution n'est pas optimal (car elle sera facilement détrôner Cf ma réponse sur ce challenge). Par contre si je crois avoir là solution, je temporise au maximum avant de poster, bien qu'à ce petit jeu je me fait bien souvent prendre et m'en amuse😄 Il m'est aussi arrivé de faire une proposition au hasard d'un code, bien après l'émission d'un challenge, pour moi il n'y pas de date limite de temps. A+ Bruno
-
[Challenge] Grouper des points
VDH-Bruno a répondu à un(e) sujet de (gile) dans Programmer en s'amusant
Bonjour à tous, Visiblement il y enfin "consensus sur l’énoncé" (ce qui visiblement a été le challenge du challenge 😄), je publie les codes écrit hier et très rapidement remanié sur la 2ème proposition [-14.3, -4.3[, [-4.3, 4.3[... Le premier un peu dans le même esprit que ce qu'avait proposé Luna, une base de code facilement généralisable en Y, Z... (defun groupeX (pts fuzz / loop) (defun loop (i pts f) (if pts (cons (vl-remove-if f pts) (loop (+ i fuzz) (vl-remove-if-not f pts) f)) ) ) (loop (+ (apply 'min (mapcar 'car pts)) fuzz) pts '(lambda (x) (< i (car x)))) ) Pour tester: _$ (groupeX pts 10) (((-14.3 14.3) (-6.3 14.2) (-13.6 7.5) (-6.6 4.7)) ((4.8 0.7) (-1.9 -3.2) (2.4 -4.9)) ((14.4 4.7) (8.0 0.9) (9.3 4.7) (6.6 11.2))) Le second sur un trie préalable des points et l'écriture d'une fonction auxiliaire (f) de groupement par plage de 10: (defun groupeX (pts fuzz / f) (defun f (i pts acc) (cond ((null pts) (list acc)) ((> i (caar pts)) (f i (cdr pts) (cons (car pts) acc))) (T (cons acc (f (+ i fuzz) (cdr pts) (list (car pts))))) ) ) (setq pts (vl-sort pts '(lambda (l1 l2) (< (car l1) (car l2))))) (f (+ (caar pts) fuzz) pts nil) ) Pour tester: _$ (groupeX pts 10) (((-6.3 14.2) (-6.6 4.7) (-13.6 7.5) (-14.3 14.3)) ((4.8 0.7) (2.4 -4.9) (-1.9 -3.2)) ((14.4 4.7) (9.3 4.7) (8.0 0.9) (6.6 11.2))) Je poste maintenant, car je ne pense pas pouvoir me dégager d'avantage de temps pour aller plus loin, mes je lirais vos codes avec un intérêt non dissimulé (Ps: Le gros challenge pour moi a été de générer un mot de passe valide pour me connecter au forum...😉) @+ Bruno -
Bonjour Une idée de challenge (Ca faisait longtemps) C'est d'associer deux listes et de savoir si une même personne fait plusieurs choses. Exemples : (asso '("pierre" "patrick" "sébastien" "sophie" "patrick" "julie") '("compta" "be" "chantier" "secrétaire" "autocad" "facturation")) --> (("pierre" "compta") ("patrick" "be" "autocad") ("sébastien" "chantier") ("sophie" "secrétaire") ("julie" "facturation")) (asso '("pauline" "mathieu" "pauline" "jym" "feat") '("phylo" "algebre" "math" "python" "archi")) --> (("pauline" "phylo" "math") ("mathieu" "algebre") ("jym" "python") ("feat" "archi")) (asso '("e1" "e2" "e4" "e3" "e2" "e5") '("c1" "c2" "c3" "c4" "c5" "c6")) --> (("e1" "c1") ("e2" "c2" "c5") ("e4" "c3") ("e3" "c4") ("e5" "c6")) @+
-
Bonjour, (vl-position) répondait exactement à mon besoin mais a un gros défaut; elle ne retourne que la position du 1er élément trouvé. Ce que je désire avoir en retour, ce sont les positions multiples de l'élément dans la liste. Exemple pour: (setq stuff (list "a" "b" "c" "d" "e" "c" "a")) que (vl-position-multi "c" stuff) -> (2 5) (vl-position-multi "a" stuff) -> (0 6) (vl-position-multi "b" stuff) -> (1) (vl-position-multi "f" stuff) -> nil Bien sur, à la différence de vl-position la fonction me retourne une liste d'entier ou nil J'ai bien déjà pondu ça: (defun vl-position-multi (el l / n l_id l_n) (setq n 0 l_id (mapcar '(lambda (x) (equal x el)) l) ) (repeat (length l_id) (if (car l_id) (setq l_n (cons n l_n))) (setq n (1+ n) l_id (cdr l_id)) ) (reverse l_n) ) Pour le peu de test que j'ai effectué, ca à l'air correct. Mais je serais curieux d'avoir d'autres versions (les pros de la récursivité) ou de manière plus concise... Si ça vous dit!
-
[Challenge] Comparer des listes hétérogènes
VDH-Bruno a posté un sujet dans Pour aller plus loin en LISP
Bonsoir, Une petite idée de challenge m’a traversé l’esprit, le but serait de pouvoir comparer des listes constitués d’élément pouvant être de type différent, et ce indépendamment de leurs positions dans la liste. Dans le principe si tous les éléments de la liste 1 sont présents dans la liste 2 et vice-versa, la fonction retourne T, ex : (compare-p '(1 2 "abc" 2 (3.4 "d")) '(2 2 (3.4 "d") "abc" 1)) retourne T Sinon la fonction retourne nil, ex : (compare-p '(1 2 "abc" 2 (3.4 "d")) '(2 3 (3.4 "d") "abc" 1)) retourne nil Bon code -
C'est chiant, mais c'est pour une quatrième...
Erased a répondu à un(e) sujet de DenisHen dans Pause café
Salut, merci à toi d'avoir partagé ce challenge car j'ai appris que zéro est un chiffre pair, on apprend tous les jours, d'où mon unique proposition de réponse. Merci à Gile pour ses explications. Au prochain challenge ! -
Salut, Quitte à refaire un bide, je tente encore de lancer un nouveau challenge. C'est Bseb67 qui m'en a donné l'idée ici. Le but du challenge est de donner une fonction de tri de liste. AutoLISP fournit acad_strlsort et vl-sort, mais la première ne fonctionne que pour les chaînes et la seconde supprime (mais parfois non) les doublons (ce qui peut être un avantage ou un incovénient suivant les cas). Il s'agirait donc de faire une routine qui fonctionnerait comme vl-sort avec tout type de donnée triable, mais sans supprimer les doublons. On pourra, dans un premier temps, se limiter à un tri croissant, mais il n'est pas difficile de mettre un argument fonction à la routine (comme dans vl-sort) pour élargir les possibilité de fonctions de comparaisons. Le tri est classique en programmation et a donné lieu à de nombreux algorithmes : voir ici, ou là ou encore pleins d'autres facile à trouver en faisant une recherche sur le net. Vu le nombre d'algorithmes, les solutions devraient être nombreuses (on peut réver...). De ce que j'ai pu voir, les algorithmes de "tri par insertion" et "tri à bulles" sont assez faciles à traduire en LISP. Parmi les algorithmes plus évolués le "tri fusion" semble bien adaptable aux listes. Donc, en résumé : Faire une routine du type : (defun tri (lst) ....) qui donnerait : (tri '(3 5 2 6 3 4 8 5)) --> (2 3 3 4 5 5 6 8) ou mieux : (defun tri (lst fun) ...) qui donnerait (tri '(3 5 2 6 3 4 8 5) ' (2 3 3 4 5 5 6 8) (tri '(3 5 2 6 3 4 8 5) '>) --> (8 6 5 5 4 3 3 2) (tri '((3 5) (2 6) (3 5) (8 5)) '(lambda (x1 x2) ( ((2 6) (3 5) (3 5) (8 5)) À vos claviers... [Edité le 16/1/2008 par (gile)]
-
Organisation d'une liste (déplacement d'un élément)
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Merci pour ton aide (gile). Je le prend aussi comme un challenge. Et je le ferais ! ! ! Non de non ! ! ! Avec un peu d'aide, mais pas avec un copier/coller. Encore merci, je regarde dubitatif tes codes... J'avoue ne pas bien comprendre ce que sont les variables x, l, o, n... Je comprend mieux le mode impératif. -
Organisation d'une liste (déplacement d'un élément)
(gile) a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Je le prends comme un challenge. Une version avec un fonction auxiliaire récursive. (defun deplace (lst old new / foo) (defun foo (x l o n) (cond ((and (null l) (< o 0) (< n 0)) nil) ((= o 0) (if (< n 0) (cdr l) (foo x (cdr l) (1- o) n) ) ) ((= n 0) (if (< o 0) (cons x l) (cons x (foo x l o (1- n))) ) ) (T (cons (car l) (foo x (cdr l) (1- o) (1- n)))) ) ) (foo (nth old lst) lst old new) ) La même dans un style impératif (avec while) : (defun deplace (lst old new / item newList) (setq item (nth old lst)) (while (or lst (<= 0 old) (<= 0 new)) (cond ((= old 0) (setq old (1- old)) (if (< new 0) (setq newList (append (reverse (cdr lst)) newList) lst nil ) (setq lst (cdr lst)) ) ) ((= new 0) (setq new (1- new)) (if (< old 0) (setq newList (append (reverse lst) (cons item newList)) lst nil ) (setq newList (cons item newList)) ) ) (T (setq newList (cons (car lst) newList) lst (cdr lst) old (1- old) new (1- new) ) ) ) ) (reverse newList) ) -
Bonjour à toutes et tous, Une demande intéressante d'un ancien étudiant => Sans prog, je propose l'utilisation de la commande diviser avec un bloc + attribut champ "position planimétrique", export et calcul de la distance entre points depuis Excel. D'autres idées ? Merci d'avance, PS: J'ai répondu à cet étudiant en vidéo, si ça vous intéresse,... => 1er PARTIE : http://screencast.com/t/k4oWuC9rM => 2nd PARTIE : http://screencast.com/t/eqFJqBrNS => 3e PARTIE : http://screencast.com/t/1fImoHwBK => 4e PARTIE : http://screencast.com/t/3sz4r80h
-
Autodesk Community Challenge. Dessinez une bouteille de Klein https://buff.ly/3GHT7O4 La bouteille de Klein est un concept en géométrie non euclidienne. Elle est décrite comme étant une surface fermée qui est topologiquement équivalente à un cylindre, mais dont les deux extrémités sont connectées. Elle est donc une forme d'espace qui est difficile à visualiser dans l'espace tridimensionnel standard.
-
Salut, La lecture de ce sujet m'a donné l'idée d'un petit challenge : implémenter une fonction similaire à vl-filename-base. (vl-filename-base "toto.dwg") -> "toto" (vl-filename-base "toto") ->"toto" (vl-filename-base "toto.1.0.dwg") -> "toto.1.0" (vl-filename-base "totodwg.dwg") -> "totodwg" mais aussi avec un chemin complet : (vl-filename-base "C:\\Dir\\toto.dwg") -> "toto" (vl-filename-base "C:\\Dir\\toto") ->"toto" (vl-filename-base "C:\\Dir\\toto.1.0.dwg") -> "toto.1.0" (vl-filename-base "C:\\Dir\\totodwg.dwg") -> "totodwg" (vl-filename-base "C:\\Dir\\") -> ""
-
Salut, Un défi m'a été lancé sur TheSwamp dans un sujet à propos du ruban de Moebius : modéliser une bouteille de Klein. Je propose ce petit challenge à ceux que ça intéresse. Ci dessous ma réponse, je donnerais la procédure que j'ai suivi plus tard... Le dwg avec uniquement la surface.
-
Salut, votre challenge me fait penser à feu "Jeu Autocad du mois" mis en place par Eric sur son site, il y a fort longtemps, (https://www.caderix.com/journal/spip.php?rubrique13) mais qu'il avait arrêté faute de temps, à mon grand regret. Pour ce challenge nouvelle version, je ne participerai pas : je ne sais pas coder et je n'ai plus d'accès à Autocad, mais je continue de vous lire par curiosité et connaître les possibilités de réalisations. Bonne continuation. PS : puisque je le cite, j'en profite pour le féliciter (avec du retard) ! Bravo Eric https://www.caderix.com/journal/spip.php?article527 Erased.
-
[Challenge] Fonction "d'ordre supérieur"
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Pour aller plus loin en LISP
Bonjour, @Fraid append est moins efficient que un reverse + cons, j'ai beaucoup de mal à retrouver mes sujets sur ce forum, mais nous en avions déjà fait une démonstration dans de précédent challenges, pour les testes sur de grande liste les versions impératives qui utilisent reverse sont meilleurs que leurs versions récursives. @(gile)Bien que le (eval fun) soit exécuté à chaque appel, je préfère utiliser la "fonction lambda enveloppante" en bibliothèque (pas en challenge) par goût et par clarté avec l'habitude ce style de structure est devenu idiomatique, au premier coup d’œil, je sais comment s'exécute le traitement de haut en bas ou de bas en haut. Ne "lispant" plus que par loisir je suis moins dans l'optimisation de l'écriture. @Tous: Si on devait trouver une moral, pour moi elle est dans cette déclaration: Qui rejoint dans mon esprit la suivante: "Inverser une donné puis permuter ses termes 2 à 2, revient à grouper les termes 2 à 2 puis à inverser le résultat." Lors d'un récent challenge sur la manipulation de chaîne. Bien qu'en AutoLisp les versions impératives sont toujours meilleurs que les versions récursives équivalentes, la façon qu'à la récursivité de s'exprimer en partant du bas vers le haut, permet bien souvent de reformuler les hypothèses de départ pour écrire de façon plus efficiente les versions impératives. Rapidement un dernier lien que j'ai en tête ici pour illustrer cette approche, l'on pourrait les multiplier à travers le forum. En conclusion la récursivité est utile mais pas indispensable, mais utile 😉. Salutations Bruno -
Bon, vous aimer les chalenges... Et je l'ai bien compris, les critères de mon premier n'étaient pas "correctes"... J'ai donc un nouveau "truc" à vous proposer... Quelque-soit le langage que vous proposerez sera le bien venu (Lisp, V-Lisp, VBA, C#, F# Ruby, patatruc...), vous êtes libre : C'est de la géométrie, désolé, mais c'est mon truc. Le challenge est : Dessinez un cercle (oui, c'est graphique Et géométrique). Dans ce cercle, dessinez un carré inscrit, et dans ce carré un cercle inscrit... Et ce, au moins 4 ... Mais avant tout, Est-ce judicieux comme challenge ? Ai-je oublié quelque-chose ? Mais bien à vous, et lancez-vous... On ne "jugera" as sur la quantité de fonction/commande et non du nombre de lignes de programmation...
-
[Challenge] Grouper des points
(gile) a répondu à un(e) sujet de (gile) dans Programmer en s'amusant
Là on s'éloigne carrément. L'idée de ce challenge m'est venue de cette demande sur le forum Autodesk .NET et j'ai repensé à ce challenge sur TheSwamp où qjchen, qui lance les hostilités avec une routine LISP qui traite 10000 points en 45 secondes arrivera à traiter ces mêmes points en 3.2 secondes toujours en LISP mais en implémentant un algorithme "divide and conqueer" qui utilise le groupement des points "par colonnes" (réponse #23), puis en 0.79 secondes en groupant les points dans un quadrillage (CF réponse #41). Il s'agirait donc bien de grouper les points par plages de 10 unités - soit dans des intervalles de ... [-15, -5[, [-5, 5[, [5, 15[ - soit en partant du plus petit X mais en respectant le pas de 10 : [-14.3, -4.3[, [-4.3, 4.3[, 4.3, 14.3[ ... -
Petit challenge de manipulation de chaine
DenisHen a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
Et surtout si on prend en compte que x lignes (voir des millions) de lisp soient interprétées comme une seule... On est d'accord, le nombre de ligne n'est qu'une formalité pour mieux l'appréhender... Mais c'était le challenge, je remarque que vous êtes à 8 lignes en Lisp et 3 en F#... Le Lisp serait-t-il à la traine ? ? ? J'en doute... Allez, Maître Gilles, explique-nous... Mais je n'ai pas testé la validité des codes... Je n'en ai pas la possibilité... J'étais persuadé qu'un maître m'aurait pondu un code en deux ou trois lignes, et en Lisp... Je suis sur le cul... Ce challenge serait-il "balaise" ? -
Salut, Ce sujet m'a donné une idée de challenge. Pour représenter une arborescence, on peut, soit utiliser une liste constituée des "chemins complets" de toutes les entrées : (setq lst '(("1" "1.1" "1.1.1") ("1" "1.1" "1.1.2") ("1" "1.2") ("1" "1.3" "1.3.1" "1.3.1.1") ("1" "1.3" "1.3.1" "1.3.1.2") ("2") ("3" "3.1") ("3" "3.2" "3.2.1") ("3" "3.2" "3.2.2") ("3" "3.2" "3.2.3") ) ) soit utiliser une liste de sous-listes dont chaque premier élément représente un nœud dans l'arborescence: (setq tree '(("1" ("1.1" ("1.1.1") ("1.1.2") ) ("1.2") ("1.3" ("1.3.1" ("1.3.1.1") ("1.3.1.2") ) ) ) ("2") ("3" ("3.1") ("3.2" ("3.2.1") ("3.2.2") ("3.2.3") ) ) ) ) Ce challenge consiste donc à créer deux routines : une qui transformerait lst en tree et une autre qui ferait la transformation inverse : (lst2tree lst) => tree (tree2lst tree) => lst
-
Bonsoir, Voilà en corrigeant une coquille dans une de mes routines, j’ai pensé que la routine en question pourrait faire l’objet d’un petit challenge pas trop compliqué de début d’année. Il s’agit simplement d’émuler un peu la fonction subst de façon à ce que cette nouvelle version ne travaille plus sur un seul élément à remplacer, mais sur un ensemble d’éléments fourni sous forme de liste. Syntaxe (lsubst lst-nouv-élemt lst-anc-élemt lst) Arguments lst-nouv-élemt: Liste des nouveaux éléments lst-anc-élemt : Liste des anciens éléments lst : Liste de réference Valeur en retour Une liste modifié ou les nouveaux éléments remplacent les anciens, la liste est inchangée pour les éléments introuvablent Quelques exemples de résultats attendus: (lsubst '(x y z) '(a c e) '(a b c d c)) retourne (X B Y D Y) (lsubst '(b c nil) '(c b a) '(a b c d c)) retourne (nil C B D B) (lsubst '(b c) '(c b a) '(a b c d c)) retourne (A C B D B) (lsubst '(b c d) '(c B) '(a b c d c)) retourne (A C B D B) (lsubst '(z y w) '(a b c) '(a b c d c)) retourne (Z Y W D W) (lsubst '(b c a) '(a b c) '(a b c d c)) retourne (B C A D A) En espérant avoir été suffisamment explicite, sinon ne pas hésiter à demander un complément d’information. A+
-
[Challenge] Les cercles magiques en AutoLISP
Patrick Emin a répondu à un(e) sujet de Patrick Emin dans Programmer en s'amusant
Une idée de challenge pour le mois de septembre? Faites nous en part ou écrivez moi: patrick.emin@autodesk.com Des sources d'inspiration ici (voyez les deux onglets, challenges actuels et passés): https://forums.autodesk.com/t5/community-challenges/ct-p/Category_Community_Challenge
