Rechercher dans la communauté
Affichage des résultats pour « challenge » dans sujets.
-
[Challenge] Extraire les nombres d'une chaîne de caractères
(gile) a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Comme promis, je donne ma version récursive "plus concise". C'est la même que la troisième proposition de @VDH-Bruno en un peu moins concise mais insensiblement plus "rapide" puisqu'elle fait un appel récursif de moins dans les cas d'un nombre ou d'un point suivi d'un chiffre et un peu plus robuste puisqu'elle contrôle aussi la présence d'un point dans nombre en cours de reconstitution. (defun extraireNombres (str / loop) (defun loop (lst dot acc) (cond ((and (null lst) (null acc)) nil) ((isDigit (car lst)) (loop (cdr lst) dot (cons (car lst) acc)) ) ((and (isHyphen (car lst)) (isDigit (cadr lst)) (null acc)) (loop (cddr lst) dot (cons (cadr lst) (cons (car lst) acc))) ) ((and (not dot) (isDot (car lst)) (isDigit (cadr lst)) acc) (loop (cddr lst) T (cons (cadr lst) (cons (car lst) acc))) ) (acc (cons (read (vl-list->string (reverse acc))) (loop (cdr lst) nil nil)) ) (T (loop (cdr lst) dot acc)) ) ) (loop (vl-string->list str) nil nil) ) La même fonction peut être écrite avec une boucle (while ...) et beaucoup de (setq ...). (defun extraireNombres (str / lst num dot nums) (setq lst (vl-string->list str)) (while lst (cond ((isDigit (car lst)) (setq num (cons (car lst) num) lst (cdr lst) ) ) ((and (isHyphen (car lst)) (isDigit (cadr lst)) (null num)) (setq num (cons (cadr lst) (cons (car lst) num)) lst (cddr lst) ) ) ((and (isDot (car lst)) (isDigit (cadr lst)) (not dot) num) (setq num (cons (cadr lst) (cons (car lst) num)) lst (cddr lst) dot T ) ) (num (setq nums (cons (read (vl-list->string (reverse num))) nums) num nil dot nil lst (cdr lst) ) ) (T (setq lst (cdr lst)) ) ) ) (if num (setq nums (cons (read (vl-list->string (reverse num))) nums)) ) (reverse nums) ) Concernant la prise en compte de certains caractères (comme la barre de fraction), j'aurais dû être plus clair en précisant "la liste des nombres entiers et réels". Ça peut faire l'objet d'un autre challenge ou d'un ajout à celui-ci... Sinon, désolé @Patrick Emin, mais je pense que mêler l'IA à ce sujet est une vraie pollution (au sens propre comme au figuré). -
[Challenge] Extraire les nombres d'une chaîne de caractères
Patrick Emin a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Bonjour, je ne vais pas répondre ici car ma réflexion est celle des IA, qui n'est pas le sujet du challenge et je voudrais pas polluer ce fil, par contre pour ceux qui ont un intérêt pour les IA, merci de lire ma (longue) réponse ici. Elle est fortement connexe au challenge original. -
[Challenge] Extraire les nombres d'une chaîne de caractères
VDH-Bruno a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Bonjour, @bonuscad Bonne fête!😄 @didier Je ne suis pas convaincu que se soit le challenge qui éveille l'intérêt des anciens du forum, mais plutôt le type de donnée à traiter qui intimide les moins expérimentés. Extraire des données d'une chaine de caractère avec un formatage qui n'est pas codifié de façon rigoureuse est de mon point de vue un problème bien complexe à traiter et donne du code bien fastidieux à écrire, si on ne maitrise pas comme @(gile) les expressions régulières qui sont de mon point de vu la panacée. Si la donnée est issue d'un tableur type Excel, nous avons un formatage parfait (libellés, nombres, unités ect...) très facilement interprétable pour un programme Si la donnée est issue d'un traitement de texte cela devient beaucoup plus compliqué à interprété, ex: 10.2 mètre cube, 10.2 m3, 10.2m3. Que doit on traiter? (12.2) ou (12.2 3). De même que considère t'on comme une valeur numérique une fraction doit elle être vu comme une valeur numérique exemple 1/3 doit donner 0.33333 ou 1 & 3 et les exemple et contre exemple peuvent être très nombreux. D'ailleurs pour illustrer le propos j'invite à tester la donnée suivante: " Volume 1/3 m3 tous les 10m²" avec la version de @(gile) et les expressions régulières... A+ Bruno -
[Challenge] Extraire les nombres d'une chaîne de caractères
VDH-Bruno a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Bonjour à tous, jeunes et moins jeunes Bon visiblement c'est la réunion des moins jeunes, donc je répond à l'appel 😄 Oui vous vous doutez bien que l'intitulé du post CHALLENGE entre crochet à de suite éveillé ma curiosité et me fais sortir du bois... Je ne pense pas en ce qui concerne l'algorithme : On lit la chaîne caractère par caractère, dans le sens de lecture. Dès que le caractère est un chiffre (ou un moins (-) suivi d'un chiffre), on reconstitue le nombre à partir de caractère (ou de ces caractères) et des suivants tant que se sont des chiffres ou un point (unique). On stocke le nombre reconstitué. On reprend la lecture des caractères suivants. Effectivement à la lecture de l'énoncé, j'en suis de suite arrivé à la même conclusion, ce qui signifie que le challenge ne va porter que sur un exercice de style. Les bases étant posé, je savais déjà que je laisserai (gile) dégainer ses expressions régulières (il en est l'auteur), c'est une question d'étique personnelle pour un challenge. Voilà ceci étant fait je ne vais pas bouter mon plaisir à me dérouiller les doigts en proposant tout de même quelques lignes, sachant que l'exercice était plié et qu'il n'y aurait pas d'enjeu algorithmique, sachant également que pour des raisons de souplesses et de performance les codes proposé le seront principalement sur du traitement de liste, par contre pied j'ai tenté de proposer un traitement directement sur la chaine de caractère, en me basant sur un exemple relevé au hasard du file de discutions. Mon premier jet basé sur les expressions retourné par la fonction read pour éviter de lire caractère par caractère la chaine ce qui est couteux en lisp. (defun f (str) (cond ((null (setq r (read str))) nil) ((numberp r) (cons r (f (substr str (+ (strlen (vl-princ-to-string r)) 2))))) (T (f (substr str (+ (strlen (vl-princ-to-string r)) 2)))) ) ) Un test rapide: _$ (f "slt / 18 +36.0 &gg !") (18 36.0) Ok Puis un regard plus attentif me montre qu'il y a de la ponctuation dans l'exemple fourni, et d'expérience pour avoir déjà expérimenté cette voie je comprend de suite que les caractères '.() peuvent posé problème à la fonction read Problème facilement contournable sans alourdir le code en mettant en place une trappe pour gérer les exceptions au moyen de vl-catch-all-apply Deuxième jet: (defun f (str) (cond ((vl-catch-all-error-p (vl-catch-all-apply 'read (list str))) (f (substr str 2))) ((null (setq r (read str))) nil) ((numberp r) (cons r (f (substr str (+ (strlen (vl-princ-to-string r)) 2))))) (T (f (substr str (+ (strlen (vl-princ-to-string r)) 2)))) ) ) Un second test rapide: _$ (f "Long= 450.0 m . ) 37 ( à -5.0 m !") (450.0 37 -5.0) Puis une analyse plus attentive des différents exemples, me montre que des caractères peuvent être accolé aux nombres Ce qui implique faut complexifier les lignes de codes ou proposer une fonction auxiliaire afin de formater le texte en argument pour qu'il corresponde aux limitations du code proposé. Mais quitte à analyser la chaine autant la traiter dans le même temps et je décide de changer mon fusil d'épaule en travaillant avec des listes, les données sont plus facile à analyser et moins couteuses. Ma première intention travailler avec des appels croisées mais hélas (gile) est déjà passé par là... Qu'à cela ne tienne je passe par un accumulateur pour stoker les nombres sous forme de liste et les reconstituer à la remonté des appels de la fonction récursive simple Ma troisième proposition (defun extraireNombres (txt / foo) (defun foo (l acc) (cond ((null l) nil) ((or (< 47 (car l) 58) (and (= (car l) 45) (< 47 (cadr l) 58)) (and (= (car l) 46) acc) ) (foo (cdr l) (cons (car l) acc)) ) (acc (cons (read (vl-list->string (reverse acc))) (foo (cdr l) nil) ) ) (T (foo (cdr l) nil)) ) ) (foo (vl-string->list (strcat txt " ")) nil) ) Teste _$ (extraireNombres "Longueur = 25.4mm Largeur = 12.7mm Quantité = -42.") (25.4 12.7 -42.0) A+ Bruno -
[Challenge] Extraire les nombres d'une chaîne de caractères
GEGEMATIC a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Oui, j'ai rajouté les dépendances, pour que vous puissiez avoir le frisson de faire tourner une application préhistorique, un peu comme un émulateur de Donkey Kong... P_supp_elem montre ce que l'absence de visual lisp pouvait engendrer comme complications ... Enfin ça ne s'appelle pas participer au challenge, puisque le but est de le faire maintenant et avec élégance mais je me souvenais que cette séparation de nombres n'avait pas été qq chose de simple ... a+ Gégé -
[Challenge] Extraire les nombres d'une chaîne de caractères
didier a répondu à un(e) sujet de (gile) dans Pour aller plus loin en LISP
Bonjour @(gile), bonjour @bonuscad Chouette le challenge, merci. Je n'ai pas réussi à faire sans l'aide du programme (de (gile)) str2lst, mais j'arrive finalement à ça : (extrairenombres "Il faut extraire les nombres de cette liste : Longueur = 456.789 mètres, la largeur est de 123.456 et il faut retirer -56.89 à la quantité qui est de 1234") va renvoyer (456.789 123.456 -56.89 1234.0) (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) (defun ExtraireNombres (cha) (mapcar '(lambda (x) (atof x)) (vl-remove "." (vl-remove "" (str2lst (vl-list->string (vl-string->list (vl-string-translate "ABCDEFGHIJKLMNOPQRSTUVWXYZ:=(),/?!;" " " (strcase cha) ) ) ) " " ) ) ) ) ) Je me suis un peu amélioré et je suis content d'avoir réussi. Bravo BonusCAD pour les imbrications que je n'arrive pas encore bien à intégrer, par exemple ça je ne comprends pas donc je ne suis pas capable de l'écrire : (eval (read (strcat "(setq rslt (list " (apply 'strcat (mapcar '(lambda (x) (if (not (listp x)) (chr x) " ")) l)) "))"))) Je veux bien une explication en français dans le texte Je me doute que (gile) va nous surprendre encore. EDIT : Correction du code par prise en compte de nouveaux caractères alpha Amicalement -
[Challenge] Extraire les nombres d'une chaîne de caractères
(gile) a posté un sujet dans Pour aller plus loin en LISP
Ça faisait longtemps. Le but de ce challenge est d'écrire une routine qui prend en argument une chaîne de caractères et renvoie la liste des nombres contenus dans cette chaîne. Exemple : (extraireNombres "Longueur = 25.4mm Largeur = 12.7mm Quantité = -42") renvoie : (25.4 12.7 -42) -
Copier le texte INDEX dans la géométrie position Z
Fraid a répondu à un(e) sujet de kataryna2001 dans AutoCAD 2020-2024
Bonjour, Un petit challenge. Voici une solution qui en traite 13004. On peut ajouter des positions relatives dans la liste aux milieux du code. (vl-load-com) ; txt2z, Eleve un bloc selon le texte situé à une position relative au bloc. ; Le dessin ne doit contenir que les textes et les blocs concernés. (defun c:txt2Z ( / acobj acdc model ltext pt ld ind pos z cpt d pr) (prompt "\n Traitement en cours ...") (setq acobj (vlax-get-acad-object) acdc (vla-get-activedocument acobj) model (vla-get-modelspace acdc) ltext '() cpt 0) ; Création de la liste d'association ltext '((position_relative . z) ...) (vlax-for obj model (if (= (vla-get-ObjectName obj) "AcDbText") (setq pos (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint obj))) ltext (append ltext (list (cons (strcat (rtos (car pos)) "," (rtos (cadr pos))); Position plus pratique en texte. (vla-get-textstring obj))))); Z ) ) ; Pour chaque bloc on cherche si il a une association avec la liste ltext. (vlax-for obj model (if (= (vla-get-ObjectName obj) "AcDbBlockReference") (progn (setq pt (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint obj))) ; Liste des positions observées. ld '((0.5 0.15) (0.501 0.15) (0.5 0.151) (0.501 0.151) (0.499 0.15) (0.5 0.149) (0.499 0.149) (0.497 0.101) (0.496 0.105) ) ind 0 z nil) ; Tant qu'une position ne soit trouvée ou aucune. (while (not z) (setq d (nth ind ld) pr (strcat (rtos (+ (car pt) (car d))) "," (rtos (+ (cadr pt) (cadr d))))) (if (setq z (cdr (assoc pr ltext))) (progn ; Elévation du bloc (vla-put-InsertionPoint obj (vlax-3d-point (list (car pt) (cadr pt) (atof z)))) ; Suppression de la position dans la liste. (vl-remove pr ltext) (setq cpt (1+ cpt)) ) ) (setq ind (1+ ind)) (if (= ind (length ld)) (setq z T)) ) ) ) ) (princ (strcat "\n Nombre de blocs traités -> " (itoa cpt))) ) Taper txt2z attendre un peux ...- 5 réponses
-
- 2
-
-
- altimétrie
- extraction de données
-
(et 1 en plus)
Étiqueté avec :
-
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
-
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) ) -
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.
-
[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"); -
[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
Comme l'énoncé n'est pas très clair, j'ai essayé de faire quelque chose de générique en ajoutant comme argument la liste des caractères à chiffrer. La fonction de base : ;;; vigenere ;;; Fonction générique de chiffrement/déchiffrement ;;; Utilise le chiffre de Vigenère avec l'alphabet spécifié ;;; ;;; Arguments ;;; op : opération à effectuer (+ pour le chiffrement, - pour le déchiffrement) ;;; chars : alphabet utilisé (liste de codes ascii des caractères à chiffrer) ;;; str : chaîne à chiffrer ;;; key : clé de chiffrement (defun vigenere (op chars str key / ks lks lcs i) (setq ks (mapcar '(lambda (c) (vl-position c chars)) (vl-string->list key) ) lks (length ks) lcs (length chars) i 0 ) (vl-list->string (mapcar '(lambda (c / n m) (cond ((null (setq n (vl-position c chars))) c) ((null (setq m (nth i ks))) c) (T (setq i (rem (1+ i) lks)) (nth (rem (+ lcs (op n m)) lcs) chars) ) ) ) (vl-string->list str) ) ) ) On peut utiliser cette fonction pour définir deux fonctions génériques, une pour le chiffrement, l'autre pour le déchiffrement. ;;; Fonction générique de chiffrement (defun encrypt (chars str key) (vigenere + chars str key)) ;;; Fonction générique de déchiffrement (defun decrypt (chars str key) (vigenere - chars str key)) Puis utiliser ces fonctions pour définir différentes fonctions suivant les caractères à chiffrer. Pour chiffrer uniquement les lettres majuscules non accentuées (comme dans l'exemple de Wikipedia) (defun encryptUppers (str key) (encrypt (vl-string->list "ABCDEFGHIJKLMNOPQRSTUVWXYZ") str key) ) (defun decryptUppers (str key) (decrypt (vl-string->list "ABCDEFGHIJKLMNOPQRSTUVWXYZ") str key) ) _$ (encryptUppers "J'ADORE ECOUTER LA RADIO TOUTE LA JOURNEE" "MUSIQUE") "V'UVWHY IOIMBUL PM LSLYI XAOLM BU NAOJVUY" _$ (decryptUppers "V'UVWHY IOIMBUL PM LSLYI XAOLM BU NAOJVUY" "MUSIQUE") "J'ADORE ECOUTER LA RADIO TOUTE LA JOURNEE" Pour chiffrer toutes les lettres utilisées en français (y compris les lettre accentuées et les liaisons) (defun encryptLetters (str key) (encrypt (vl-string->list "ABCDEFGHIJKLMNOPQRSTUVWXYZÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒabcdefghijklmnopqrstuvwxyzàâäçéèêëîïôöùûüÿæœ" ) str key ) ) (defun decryptLetters (str key) (decrypt (vl-string->list "ABCDEFGHIJKLMNOPQRSTUVWXYZÀÂÄÇÉÈÊËÎÏÔÖÙÛÜŸÆŒabcdefghijklmnopqrstuvwxyzàâäçéèêëîïôöùûüÿæœ" ) str key ) ) _$ (encryptLetters "[Challenge] Petite idée pour un codage/décodage Vigenère" "CADxp") "[EhdÎÀgnjÂ] égtlÆT kdë Équu ŒÄ eogXVg/dëZÇfaj ôkghÔcte" _$ (decryptLetters "[EhdÎÀgnjÂ] égtlÆT kdë Équu ŒÄ eogXVg/dëZÇfaj ôkghÔcte" "CADxp") "[Challenge] Petite idée pour un codage/décodage Vigenère" Pour chiffrer tous les caractères de 32 à 255*. On utilise une fonction pour générer une plage de nombres entiers. ;;; range ;;; Génère une plage de nombres entiers (liste) ;;; ;;; Arguments ;;; from : début de la plage ;;; to : fin de la plage (defun range (from to) (cond ((= from to) (list to)) ((< from to) (cons from (range (1+ from) to))) ((< to from) (cons from (range (1- from) to))) ) ) ;;; Fonctions de chiffrement/déchiffrement des caractères 32 à 255 ;;; ;;; Arguments ;;; str : chaîne à chiffrer ;;; key : clé de chiffrement (defun encryptChars (str key) (encrypt (range 32 255) str key) ) (defun decryptChars (str key) (decrypt (range 32 255) str key) ) _$ (setq crypted (encryptChars "[Challenge] Petite idée pour un codage/décodage Vigenère" "F#4fun")) "F|§Áº‹q{«²nvhˆ¯É³FlxOºn–r‰¸uÔ#wµ¹¯hCª^±•guºn|l{«ÃV˜h" _$ (decryptChars crypted "F#4fun") "[Challenge] Petite idée pour un codage/décodage Vigenère" * Cette séquence de caractères contient des caractères de contrôle non imprimables. -
[Challenge] Petite idée pour un codage/décodage Vigenère
DenisHen a posté un sujet dans LISP et Visual LISP
Bonjour à la communauté. Je suis tombé par hazard sur le codage Vigenère dans Wikipédia et j'ai tout de suite pensé à un petit chalenge pour les membres du Lisp/VLisp. Le but est simple, grace à une seule commande, coder ou décoder une chaine. Exemple : ;;Codage (setq ChaineACoder (Vigenere "C" Chaine$)) ;;Décodage (setq ChaineDecodee (Vigenere "D" Chaine$)) Je pense aux 255 caractères usuels (sauf les 32 premiers, qui ne sont pas réellement des caractères). Le résultat du codage pourra se faire avec une ou deux clefs. Amusez-vous bien, si vous le désirez... Bien à toi, la communauté. Denis... -
[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 -
[Challenge] Dessiner le chemin de sortie
Luna a répondu à un(e) sujet de JPhil dans Programmer en s'amusant
Coucou, Dans le dessin ci-dessus, il n'y a pas d'îlots donc pas de soucis 😉 Ce serait le cas en revanche si aucune cloison n'était reliée au mur au centre du P et que la sortie était justement située sur le mur au centre du P. Mais l'exercice à l'air intéressant ! Peut-être un peu complexe dès le début (gestion des bulges pour les arcs) mais au moins il y a un peu de challenge ^^ Je me pencherais probablement dessus dans les jours à venir, le temps d'étudier une méthode qui me convient bien :3 Faut-il prévoir également prévoir un décalage vis-à-vis des cloisons/murs pour le tracé du chemin de résolution ou bien il se contente de prendre le tracé des cloisons/murs ? Si oui, cela signifie qu'une variante pourrait être étudiée visant à simplifier le tracé du chemin de résolution lorsqu'il fait du backtracking xD (je m'égare un peu trop, désolée...) Bisous, Luna -
En se basant sur cette image qui représente un labyrinthe avec une forme en "P", pensez-vous qu'il soit possible de dessiner le chemin de sortie en une ligne (ou plutôt polyligne) ? 🤔 Contrainte pour la représentation du labyrinthe : - pas de polyligne donc que des lignes et des arcs - un calque "Mur" pour les traits épais en noir et un calque "Cloison" pour les traits fins en gris Langage autorisé : - Lisp - mais VBA et autres sont les bienvenus 😉
-
Se serait avec plaisir de participer (de même que le challenge des cercles magiques) mais je manque cruellement de temps en ce moment. Donc je vais devoir passer malheureusement.. Bisous, Luna
-
Salut, Je propose un challenge pour l'été (profiter des vacances pour apprendre ou se perfectionner en LISP). Tout le monde a entendu parler de la suite de Fibonacci. Une spirale de Fibonacci est une succession d'arcs de cercle de 90° connectés tangentiellement dont les rayons sont les termes de la suite de Fibonacci. Un exemple de spirale de Finonacci composée de 7 arcs : Challenge Il s'agit d'écrire une routine qui prend en argument le point de départ de la spirale et le nombre d'arcs pour dessiner la spirale dans AutoCAD (plusieurs arcs ou une polyligne). La routine (ici nommée spiralFib) devra pouvoir être appelée depuis une commande LISP (ici nommée c:TEST) pour pouvoir être testée dans AutoCAD pour dessiner des spirales ayant au minimum 4 arcs. (defun c:test (/ p i) (and (setq p (getpoint "\nPoint de départ: ")) (setq i (getint "\nNombre d'arcs [4-32]: ")) (< 3 i) (spiralFib p i) ) (princ) ) Un screencast montrant un exemple. Variante On peut, sur le même principe faire une routine pour une "Spirale d'or".
-
[Challenge] Les cercles magiques en AutoLISP
Patrick Emin a répondu à un(e) sujet de Patrick Emin dans Programmer en s'amusant
Oui c'est possible, et bien que le challenge porte sur AutoLISP, nous ne serions pas mécontent que tu proposes aussi un autre langage, par exemple un langage connu pour son extrême concision 😉 -
[Challenge] Les cercles magiques en AutoLISP
Patrick Emin a posté un sujet dans Programmer en s'amusant
Montrez nous vos talents en AutoLISP ! Votre programme, le plus court possible, doit dessiner ces cercles Fournissez nous le listing de votre programme AutoLISP. Gardez à l'esprit que l'art de la programmation, c'est la concision et l'élégance ! -
Bienvenue à notre challenge Inventor ! La sphère hélicoïdale qui vous fait tourner la tête ! Saurez-vous la réaliser ?
-
- 1
-
-
Il faut le voir comme expliqué là: [challenge] A05 : Find out whether a list is a palindrome (theswamp.org) Bon WE
-
Bon bah comme chat, j'aurais l'occasion de participer un peu sur les forum TheSwamp 😉 Vui évidemment le but principal est de fournir un ensemble de challenges abordables qui font finalement office de "cahier de vacances" si je puis dire donc cela permet de fournir un ensemble d'exercices et on y répond ou pas selon nos envies. Cela permet également d'aborder certains sujets sous un autre angle et pour ceux qui débute, avoir quelques post permet également de voir le nombre différents de possibilité pour un même exercice donc c'est très bien pour eux pour découvrir de nouvelles choses et ensuite leur permettre de l'essayer dans leur coin avec d'autres contraintes. Bref, le principe des mini-challenge permet vraiment d'apprendre mais surtout de comprendre un problème et de voir comment fonctionne notre propre logique. Après tout, très souvent ces challenges peuvent être vu d'un point de vu récursif, ou itératif et la logique derrière est totalement différente, donc propre à chaque cerveau. En tout cas, merci pour ce partage ! Il est vrai que mes seules lecture sur TheSwamp c'est toujours lié à des problèmes complexes et pointilleux donc je ne me balade pas comme je le fais sur CADxp. Bisous, Luna
