Rechercher dans la communauté
Affichage des résultats pour « challenge » dans sujets.
-
[Challenge] Grouper des points
(gile) a répondu à un(e) sujet de (gile) dans Programmer en s'amusant
Les langages mieux lotis que le LISP pour traiter des données fournissent souvent une méthode de groupage des données (SQL, .NET avec Ling, F# avec les listes et séquences, ...). Ces méthodes permettent de grouper les données à l'aide d'une clé (souvent une propriété du type de donnée ou un champ dans une base de données). Comme je suis un gros paresseux (et que je répondais à une demande sur le forum .NET), c'est cette route que j'ai emprunté. Il ne restait plus qu'à trouver comment générer une clé de groupage pour des nombres : en arrondissant à la valeur de la tolérance. F# est, hormis AutoLISP, mon langage de prédilection pour prototyper. il existe une fonction native groupBy et une fonction round mais celle-ci arrondi à la valeur entière la plus proche. La méthode .NET System.Math.Round qui accepte en second argument un entier pour spécifier le nombre de décimale ne fait pas directement mon affaire. Qu'à cela ne tienne on écrit une petite fonction au multiple le plus proche. let roundTo multiple value = round (value / multiple) * multiple On utilise ensuite cette fonction pour grouper les points : let groupPointsByX tolerance (pts: Point2d list) = pts |> List.groupBy (fun p -> roundTo tolerance p.X) Si on veut grouper par X et Y, il suffit de modifier la fonction de groupage : let groupPointsByXY tolerance (pts: Point2d list) = pts |> List.groupBy (fun p -> roundTo tolerance p.X, roundTo tolerance p.Y) Vous pouvez tester tout ça sans rien installer avec Try F#. On va maintenant transcrire tout ça dans un langage moins confidentiel. AutoLISP ne fournit pas de fonction pour arrondir les nombres mais ça a été fait maintes fois (il me semble que ça avait l'objet d'un challenge il a quelque temps maintenant). De même, pour arrondir au multiple le plus proche rien de bien sorcier (CF ci-dessus). Reste la fonction de groupage. Avec AutoLISP pour grouper des valeurs en s'inspirant de ce qui se fait ailleurs, on utiliserait une liste d'association (le premier élément de chaque sous liste est la "clé"). Pour ne pas refaire le boulot à chaque fois, il peut-être intéressant de définir une fonction groupBy "générique" qui pourrait resservir dans dans d'autres cas. Cette fonction devra être une fonction dite "d'ordre supérieur" à savoir une fonction qui en prend une autre en argument (comme apply, mapcar, vl-remove-if, ...). En fait, tout ça existait déjà dans les bibliothèques MathGeom.lsp et List.lsp en bas de cette page. Donc je ne me suis pas foulé : ;; gc:round ;; Arrondit à la valeur entière la plus proche ;; ;; Arguments ;; num : le nombre à arrondir (defun gc:round (num) (if (minusp num) (fix (- num 0.5)) (fix (+ num 0.5)) ) ) ;; gc:roundTo ;; Arrondit au multiple de prec le plus proche ;; ;; Arguments ;; prec : le nombre spécifiant la précision de l'arrondi ;; num : le nombre à arrondir (defun gc:roundTo (prec num) (if (zerop (setq prec (abs prec))) num (* prec (gc:round (/ num prec))) ) ) ;; gc:groupBy ;; Regroupe les éléments d'une liste selon la clé générée par la fonction spécifiée. ;; Retourne un liste de sous listes dont le premier élément est la clé. ;; ;; Arguments ;; fun : la fonction génératrice de clé ;; lst : la liste (defun gc:groupBy (fun lst / f key sub res) (setq f (eval fun)) (foreach n lst (setq res (if (setq sub (assoc (setq key (f n)) res)) (subst (cons key (cons n (cdr sub))) sub res) (cons (list key n) res) ) ) ) ) Et ensuite : (defun grouperPointsParX (tol pts) (gc:groupBy '(lambda (p) (gc:roundTo tol (car p))) pts) ) (defun grouperPointsParXY (tol pts) (gc:groupBy '(lambda (p) (list (gc:roundTo tol (car p)) (gc:roundTo tol (cadr p))) ) pts ) ) Les listes renvoyées sont des listes d'association avec comme premier élément de chaque sous liste la valeur du multiple (ou de la paire de multiples), ce qui pourrait être utile pour des recherches ultérieures ou être facilement supprimé par un (mapcar 'cdr ...). ( (-10.0 (-6.6 4.7) (-13.6 7.5) (-6.3 14.2) (-14.3 14.3)) (0.0 (2.4 -4.9) (-1.9 -3.2) (4.8 0.7)) (10.0 (6.6 11.2) (9.3 4.7) (8.0 0.9) (14.4 4.7)) ) ( ((-10.0 10.0) (-13.6 7.5) (-6.3 14.2) (-14.3 14.3)) ((10.0 10.0) (6.6 11.2)) ((-10.0 0.0) (-6.6 4.7)) ((0.0 0.0) (2.4 -4.9) (-1.9 -3.2) (4.8 0.7)) ((10.0 0.0) (9.3 4.7) (8.0 0.9) (14.4 4.7)) ) -
[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 -
Petite erreur de syntaxe sur car si on définit un écart de 10, on aurait plutôt [-14.3, -4.3[, [-4.3, 5.7[, [5.7, 15.7[ ... Bon aller j'y retourne en essayant de répondre au challenge de manière plus générale (probablement plus longue aussi) T_T Bisous, Luna
-
[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[ ... -
Coucou, Grâce à la nouvelle structure du site, je viens de découvrir ce forum :3 Ce n'est pas très opti' mais voici ma première proposition au challenge : (defun mergepts (pt-list fuzz / mn i lst grp) (defun grouppts (pt-list fuzz / lst) (setq lst (list (vl-remove-if '(lambda (pt) (< (+ mn fuzz) (car pt))) pt-list) (vl-remove-if-not '(lambda (pt) (< (+ mn fuzz) (car pt))) pt-list) ) ) ) (setq mn (apply 'min (mapcar 'car pt-list)) i 0 ) (while pt-list (setq grp (grouppts pt-list (* (setq i (1+ i)) fuzz)) lst (cons (car grp) lst) pt-list (cadr grp) ) ) (reverse lst) ) Bisous, Luna
-
Salut, Un nouveau challenge (tout langage accepté). L'objectif est de définir une fonction pour grouper les points (coordonnées) d'une liste en fonction de leur coordonnée X avec une tolérance de 10 unités. La fonction devra prendre comme argument une liste de points 2d (x y) ou 3d (x y z) et renvoyer les points groupés sous la forme que permet le langage utilisé (en LISP ce sera forcément une liste de sous-listes, avec d'autre langages, ça peut-être une autre structure de données : un tableau déchiqueté, un dictionnaire, ...). Exemple, avec la liste suivante en entrée : (setq pts '((14.4 4.7) (4.8 0.7) (8.0 0.9) (9.3 4.7) (-14.3 14.3) (-6.3 14.2) (-13.6 7.5) (-1.9 -3.2) (2.4 -4.9) (6.6 11.2) (-6.6 4.7) ) ) on devrait obtenir 3 groupes : ((-6.6 4.7) (-13.6 7.5) (-6.3 14.2) (-14.3 14.3)) ((2.4 -4.9) (-1.9 -3.2) (4.8 0.7)) ((6.6 11.2) (9.3 4.7) (8.0 0.9) (14.4 4.7)) On pourra ensuite pousser un peu plus loin pour rendre la fonction plus générique en passant la tolérance en argument, puis en groupant par X et Y.
-
[Challenge]Paramètres de l'ellipse
didier a répondu à un(e) sujet de (gile) dans Programmer en s'amusant
Bonjour (gile) Je n'ai pas bien compris l'intérêt du challenge si c'est pour créer une fonction qui calcule un paramètre existant puisque tu sélectionnes une entité ELLIPSE C'est pour ça que j'ai choisi de cliquer des points et ensuite, avec ces points, sans ellipse donc, trouver le paramètre qui correspond à l'angle désigné Je vais reprendre ce que j'ai fait avec le ENTMAKE mais il me semble que c'est ce que tu montres à suivre... Merci de nous avoir chamboulé la tête 😃 Je pense que pour les prochains challenges il faudrait s'entendre sur une date de dépôt des solutions car voir les solutions arriver n'est pas sans augmenter la pression et peut faire prendre des chemins de traverse, non ? Amicalement -
[Challenge]Paramètres de l'ellipse
(gile) a répondu à un(e) sujet de (gile) dans Programmer en s'amusant
@Fraid Ça ne serait pas un challenge. Il ne s'agit pas forcément des paramètres ou angle de départ ou de fin, mais de convertir en angle n'importe quel paramètre de l'ellipse ou inversement. -
[Challenge]Paramètres de l'ellipse
didier a répondu à un(e) sujet de (gile) dans Programmer en s'amusant
Bonjour Gilles J'ai bien envie de m'y coller mais je ne comprends pas ce qu'on doit livrer On connaît une ellipse (ou un arc elliptique) qu'on peut sélectionner à l'écran par exemple On donne en entrée utilisateur une valeur d'angle et on livre un Paramètre ou l'inverse C'est bien comme ça ou bien faut-il partir d'autre chose ? Ce n'est pas la première fois que je ne réponds pas à un challenge parce que je ne comprends pas ce qui est attendu Pardon pour mon "hermétisme" mais j'aimerais bien participer D'ailleurs, il faudrait donner une date butoir à laquelle tu déposeras ta solution, non ? Amicalement -
Salut, Je vais essayer de lancer un petit challenge de géométrie. Dans AutoCAD, pour dessiner un arc elliptique, on peut spécifier les angles de départ et de fin, mais il existe aussi une option 'Paramètres'. Extrait de l'aide : En programmation d'AutoCAD, on retrouve cette notion de paramètre pour tous les objets curviligne (vlax-curve-getParamAtPoint en LISP ou Curve.GetParamAtPoint avec.NET). On a coutume de dire qu'un petit dessin vaut mieux qu'un long discours : Le challenge, donc, serait de définir deux fonctions (peu importe le langage) : - AngleToParam : qui prend comme arguments une ellipse et un angle et qui renvoie le paramètre correspondant - ParamToAngle : qui prend comme arguments une ellipse et un paramètre et qui renvoie l'angle correspondant Exemples avec une ellipse de 10 100 unités de grand axe pour 60 unités de petit axe : - AngleToParam d'un angle de 30° doit retourner un paramètre de 43.90° - ParamToAngle d'un paramètre de 30° doit retourner un angle de 19.11° - AngleToParam d'un angle de 230° doit retourner un paramètre de 243.28° - ParamToAngle d'un paramètre de 230° doit retourner un angle de 215.57° Les exemples sont donnés en degrés, mais pour plus de simplicité et de cohérence avec les fonction natives fonctions utiliseront les radians.
-
Vous aimez les challenges ? ? ?
Luna a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
Je pense que l'anglais pourrait également t'aider énormément pour la compréhension des langages. C'est comme pour toute chose, il est inutile de se bourrer le crâne de force en apprenant ses leçons tous les jours ! La première étape c'est la compréhension, la logique de la chose. Une fois qu'on comprend, l'apprentissage se fait presque automatiquement. Le langage LISP est très proche d'un langage algorithmique et donc c'est de la logique pure et dure. Chaque fonction, chaque nom de fonction, les arguments à déclarer, l'ordre de déclaration des arguments, ... tout chat à un sens logique qui est parfois beaucoup plus simple à saisir si l'on n'a pas cette barrière de la langue, car que se soit en LISP, en C#, en VBA, en HTML, ... ils se baseront tous sur la langue universelle : l'anglais. Bref, je pense que lorsqu'on aime, on ne compte pas, donc si cela peut te permettre de t'aider dans la compréhension de fonctionnement d'un langage (et ainsi te permettre de coder des programmes plus complexes), je pense que l'anglais est une base plus que nécessaire pour commencer :3 Pour ce qui est du LISP, une courbe de progression ne sera jamais exponentielle, elle est comparable à une courbe logarithmique : elle finit par s'aplanir peu à peu, mais en aucuns cas cela veut dire que l'on ne progresse plus :3 Les seules différences qu'il peut y avoir entre plusieurs personnes c'est le temps que l'on passe pour passer les paliers et la manière d'y parvenir. Entre une personne qui fera plein de petits programmes tout simples mais basés sur la compréhension d'une fonction en cherchant à aller toujours un peu plus loin et une personne qui décide de s'attaquer au Mont Everest sans jamais avoir appris à marcher, seulement l'une d'entres elles parviendra au sommet ! Un exercice tout simple que je peux te conseiller (chat m'a beaucoup appris), c'est de choisir une commande native d'AutoCAD et essayer de faire la même chose par toi-même et une fois terminé (avec un résultat identique), tu peux alors essayer de te demander : comment l'améliorer, quelle fonctionnalité manque-t-il à cette commande que je pourrais ajouter ? Il faut commencer petit, bien évidemment mais au moins, cela permet d'avoir un but précis car on connait le résultat final, sans pour autant avoir la solution ❤️w❤️ et tu peux rapidement t'intéresser à beaucoup de sujets différents ! Dessiner une simple polyligne te fera te demander par exemple : comment fonctionne les arcs ? Quel est son code DXF ? Qu'est-ce qu'une bulge ? Comment la calcule-t-on ? ... Bref tout chat te feras te poser des milliers de questions (et bien souvent certaines réponses ne se trouveront qu'en anglais, la boucle est bouclée 😄) et qui seront un nouveau challenge chaque jour à résoudre :3 Bref, je ne sais pas si j'ai été claire, et désolée d'avance pour le roman mais je pense que l'abandon d'un langage vers un autre n'est que le début de la fin...Il n'y a pas d'autres limites intellectuelles que celles que l'on se fixe ! Bisous, Luna -
Vous aimez les challenges ? ? ?
Olivier Eckmann a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
Bonsoir, Comme les messages de début de semaine ont été supprimés, je reposte. Comme je le disais, je suis hors sujet et j'ai très honteusement plagié le code de Gilles, mais j'ai joué avec les overrule pour surcharger le graphisme d'un cercle par celui du challenge. J'ai ajouté un grip de rotation pour modifier l'orientation des polygones. Il y a 2 commandes (dans le ZIP - à débloquer si nécessaire): LAPOSTE qui permet de créer l'objet cercle par centre / bord (le 2nd point donnant le diamètre et al rotation initiale) LAPOSTEUPD qui permet de mettre à jour/transformer un cercle existant avec le nombre de cercle et de sommet. Voilà la mise en œuvre : ICI Olivier LaPoste.zip -
Vous aimez les challenges ? ? ?
DenisHen a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
Salut à tous... Pour faire quelques réponses collégiales, je dirais : Si je lance un challenge, c'est que, justement, je me demande comment faire ? Je ne suis ni un professeur, ni un expert (comme beaucoup d'entre vous). C'est une façon vulgairement cachée de voir "comment d'autres feraient ?"... Je n'ai pas la solution, je regarde, analyse et apprend énormément de tous vos commentaires et vos codes... A mon époque (les années 90) j'apprenais seul avec juste un "maître penseur codifiant" (et il n'y avait pas internet, et pas CadXP) qui m'a mit le pied à l'étrier du développement : Pascal, Turbo Pascal, puis, Basic, Turbo Basic, et Visual Basic pour continuer en Lisp... Donc, mes challenges sont peut-être égoïstes (bien qu'ils peuvent servir à beaucoup d'autres, je l'espère) mais ils ne sont pas dénués de tous sens... Je pense avoir atteint mes limites en Lisp (car je suis autodidacte et non anglophone), je fais plein de dev dont je suis très fier, mais j'aurai pû faire mieux... Et actuellement, je me pose la question : le Lisp est-il mon langage de "prédilection" ? Je reçois avec grand plaisir toutes vos remarques/critiques envers moi, ou sur mes capacités, je ne suis absolument pas susceptible... Mais comprenez que je n'ai eu que des aides ponctuelles (grâce à 99% aux membres de CadXP) suite à mes question pas toujours très explicites ou très "compréhensibles"... Mais j'ai tellement appris depuis mes début que je ressent une petite fierté, mais je devrais réussir à faire plus... En VBA, j'ai utilisé un classeur Excel comme une base de données, j'utilisais Excel comme "interface" pour avoir accès à des centaines de fichiers .txt... Mes collègues ouvraient le même classeur en lecture seule, mais n'avaient pas besoin de l'enregistrer... Ils remplissaient des champs et tout était envoyé par courriel, avec un minimum d'intervention de leurs part... Tous était géré par un seul ruban, personnalisé lui aussi C'est compliqué, mais je m'en suis sortie, et ce code était utilisé par quatre à six personnes en même temps, et pendant 4 à 5 ans. Après, la direction a commandé un ERP. Mais cet ERP ne remplissait pas ce que je faisais... C'est une source de fierté... Je sais, mais restant humble, j'aurais aimé être "balaize" en Lisp, mais je n'y arrive pas... Il y a plein de choses que j'aimerais faire en Lisp, mais je n'y arrive simplemement pas, malgré toutes les aides (Maître (gile), Tramber, LeCrabe, didier...) je ne m'en sors pas... Donc, il me faut apprendre un autre langage, et en ce moment, je pense me tourner vers le .NET et C#... Qu'en pensez-vous ? -
Vous aimez les challenges ? ? ?
(gile) a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
Hé, Denis, tu ne réponds jamais aux challenges que tu lances. Autrefois, celui qui lançait un challenge avait une réponses déjà prête dans les tuyaux... Perso, en LISP j'aurais simplement fait ça: (defun c:test (/ cen rad nb) (initget 6) (and (setq nb (getint "\nNombre de cercles: ")) (setq cen (getpoint "\nCentre du cercle: ")) (setq rad (getdist cen "\nRayon du cercle: ")) (repeat nb (command "_.circle" "_non" cen rad) (command "_.rectang" "_non" (polar cen (* PI 1.25) rad) "_non" (polar cen (* PI 0.25) rad)) (setq rad (* rad (sqrt 0.5))) ) ) (princ) ) -
Vous aimez les challenges ? ? ?
DenisHen a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
Salut (gile). J'applaudis à m'en faire mal aux mains, challenge superbement relevé ! ! ! Et belle démonstration du code... Comment fais-tu du .NET pour AutoCAD ? Avec Visual Studio Express ? Puis-je le faire ? Est-ce interactif avec AutoCAD ? Comment se epasse la création d'une DLL ? Je suis très attiré par ses possibilités de langages, j'ai débuté en Pascal dans les années 80) puis en Turbo Pascal, ensuite est venu le Basic (vers 1992) puis en Turbo Basic (peu de temps après) puis le Visual Basic (avec VB 6), et pour finir, un peu de Lisp... Ca, c'est de la magie ! ! ! -
Vous aimez les challenges ? ? ?
Curlygoth a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
je pense qu'il faut répondre juste au challenge ^^' moi si on juge je pars xD Have fun ;-) -
Vous aimez les challenges ? ? ?
Curlygoth a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
c'est parce que j'ai un userform dans lequel tu entres tes valeurs regarde ma vidéo ^^ Oups... il s'est pas mis : voici le dvb ^^ Challenge.zip -
Vous voulez un challenge ? ? ?
Curlygoth a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
Personnellement que je code au boulot ou à la maison... c'est devenu une passion... je donne tout au patron... (attention quand je dis tout : c'est tous mes programme pas le code) Par contre, quand je serais parti il se débrouille avec les bugs utilisateurs ;-) Il m'ont bien fait comprendre (même si je ne suis pas d'accord) qu'un programme utilisé dans l'entreprise est à l'entreprise ^^ @DenisHens : Pour le challenge J'ai deja des programmes complets qui dessine de B à Z !!! Mon travail de dessinateur et administratif est complètement indépendant je ne fait qu'une chose : Je rentre l'intitulé du dossier dans un tableur excel avec le type de plan etc... et Je trace le réseau... Mes programmes vont mettre les annotations dans chaque folios, faire les présentations, faire la liste matériel, envoyer le plan par mail (apres vérif quand même) et facturation... Durée 15min... entre la réception du dossier et la facturation Et du coup je prefère donné ici des fonction pou petit procédure que mes blocs entiers (pour ça que j'aimerias bine savoir pourquoi tu as arrété le vba pour passé au lisp ^^) Je demande juste aux membres : "Comment feriez-vous pour protéger vos développements"... Je te répond : je donne un code dynamique (qui change toutes les 10min) que l'utilisateur doit entré dans sa machine. ça créé une signature sur l'ordinateur. et a chaque démarrage du programme le code regarde cette signature si elle est valide... Du coup l’utilisateur peut dupliquer mais les receveur eu ne peuvent pas l'utiliser -
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...
-
Vous voulez un challenge ? ? ?
DenisHen a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
Salut le Décapode. A l'époque, AutoCAD version 10 ou 11, il y avait un Dongle énorme de fabrication suisse qui faisait l'affaire... J'ai travailler sur des AutoCAD de la 10 à la 14 avec ce type de Dongle, et en version anglaise et allemande (et je ne parle pas l'allemand)... Ce n'était pas une clef USB mais un gros truc sur un port parallèle, mais je ne m'en souvient plus très bien... @(gile) : ce dont je parlais, c'était plus une question de protection d'un code, comme laisser une trace de la première utilisation d'un code dans la base de registre et de pouvoir le débloquer grâce à un algorithme pour répondre à ce premier code : par exemple, le premier lancement, dépose la date du lancement dans une clef de la base de registre (je l'ai déjà fais)... Limitation, deux mois, x utilisations... Et, arrivé à expiration de la date ou du nombre d'utilisation, le Code demande un autre code retour : la date + 1, le code -2... Bref, faire un code et le protéger... C'était juste pour dire... Comment protéger ce que tu fais... Et c'est là que réside mon réel challenge... (Car j'ai caché beaucoup de messages, la difficulté d'être est une explication...) -
Vous voulez un challenge ? ? ?
(gile) a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
Ça c'est pas un challenge. On inverse les rôles avec un truc simple. Ci-joint une version d'évaluation de CroixDsQuadri limitée à 3 jours (penser à débloquer le zip). Comment tu ferais ? CroixDsQuadri.zip -
Vous voulez un challenge ? ? ?
(gile) a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
Salut, La seule façon fiable de protéger ton code, c'est de ne jamais le distribuer. Si tu le distribues, tu peux seulement essayer de le rendre plus ou moins difficile à "craquer". Comme il y aura forcément une vérification de la validité de la licence ou de la période d'essai dans le code même, il convient en premier lieu d’encrypter/compiler celui-ci. Avec AutoLISP, le plus simple est de créer une application .fas ou .vlx, mais on trouve sur internet des programmes qui décompilent plus ou moins bien les .fas ou .vlx. Le reste est plus sensible et n'est pas vraiment un bon sujet pour un challenge. Ceux qui essayent de protéger leurs programme n'ont pas envie de dire publiquement comment il le font. -
Saut à la communauté. Je pense que vous savez déjà de quoi je vais parler. Faites un programme, quel qu'il soit, mais comment les protéger... En gros, on vous paye pour dessiner, mais vous programmez, mais sur votre bulletin de paie est écrit "Dessinateur". La législation française est très explicite là-dessus... Vous êtes dessinateur (c'est sur votre bulletin de paye) et non programmeur/développeur ? Donc, tous ce que vous développez/programmez est en votre entière possession et sauf votre accord, votre employeur ne DOIT pas les utiliser sans votre accord, avant (?), pendant (Ok), et après (c'est là, l'arnaque)... Mais, comment protéger vos développement, vos logiciels, pour les quelles vous n'avez pas été embauché, mais jamais payé... Attention, on parle bien d'un jeu... Attention, je ne suis pas contre le patronat... Je veux juste protéger les développements qui se font exploités... Et aussi, protéger les développements de programmateurs qui aimeraient vendre un peu leur travail, ou les monnayer... Je vous propose donc un nouveau Chalenge... Comment faire un programme "entier" (qui sera utilisable partout et en dehors de toutes contraintes) et le protéger... Donc, je vous propose un défit pour protéger un lisp ou autre. Voici les condition (et je reste ouvert aux remarques) : Comment faire un .lsp (ou autre, mais la principale demande reste pour AutoCAD, mais je ne suis pas fermé) et le protéger (.ini, base de registre, fichier caché, suite de code ASCII, clef différentielle, encodée...) Premièrement, comment protéger son travail : 1.soit dans le temps (un mois d'utilisation accordé, par exemple) 2.soit dans le nombre d'utilisation ( 10, 20, 200) 3.soit autre chose dont je n'ai pas connaissance, mais je reste ouvert... Et comment le distribuer : 1.Un Bundle 2.Un fichier compiler (qui contiendrait tous les programmes) 3.Être aider d'un autre logiciel de distribution, gratuit s'il vous plait... Car le but est de protégé le petit développeur qui s'est ruiner pour son bosse et qui repart avec rien... Donc, Tout doit être gratuit... je vous propose un petit développement de mon cru, comment le rendriez-vous inviolable et protégé, car là est la question, ce programme dessine une crois dans un quadrilatère (Oui, certain me dirait, Wouaouw, quel effort... je sais, mais je n'est pas le problème), mais comment le vendre (pas important) mais comment le protéger (tu l'utilises, tu me dois 10 euros (toutes les 10, 20, 100 utilisations, tous les mois, une "licence ad-vitam"...) Et là, vous avez toutes les libertés) : Je suis désolé, c'est du Lisp, mais vous faites comme vous le voulez, le seul impératif, c'est que c'est pour AutoCAD (ou ZWCAD, Draftsight...) Libre à vous : (vl-load-com) ;;; ***************************************** ;;; Dessine une croix dans un quadrilatère ;;; ***************************************** (defun c:CroixDsQuadri (/ ent ent-liste n liste-sommets) (princ "\n\tDéveloppé par Denis H. (1.0)") (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (if (eval 'CleRegCerene) (CleRegCerene "DenisH") ) ;_ Fin de if (while (= "LWPOLYLINE" (cdr (assoc 0 (entget (setq ent (car (entsel "\nChoix de la polyligne\n"))))))) (setvar "clayer" (cdr (assoc 8 (entget ent)))) (setq ent-liste (entget ent) n 0 ent 0 liste-sommets nil ) ;_ Fin de setq (repeat (length ent-liste) (if (= 10 (car (nth n ent-liste))) (setq liste-sommets (cons (cdr (nth n ent-liste)) liste-sommets)) ) ;_ Fin de if (setq n (+ 1 n)) ) ;_ Fin de repeat (setq liste-sommets (reverse liste-sommets)) (command "_.line" (nth 0 Liste-sommets) (nth 2 Liste-sommets) "") (command "_.line" (nth 1 Liste-sommets) (nth 3 Liste-sommets) "") ) ;_ Fin de while (vla-endundomark doc) (princ) ) ;_ Fin de defun
-
Petit challenge de manipulation de chaine
DenisHen a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
Salut à tous. Cette seule ligne me régale aussi... J'ai côtoyé des codes extraordinaires dans ce petit truc que, je pensais, remuer 2 à 3 personnes, et sur du Lisp, du V-Lisp voir du VBA... Mais là, ils ont tous répondus ! ! ! Et c'est "super cool" ! ! ! Je me rend compte de l'implication de certains (beaucoup en fait) membres de la communauté (je parle de développeur, bien sur), reste surprenante, mais pas étonnante... Je savais que la communauté de développeurs CADXpiens était très présente, mais là ! ! ! J'eusse aimé mieux faire et encadrer mon "challenge" (je n'ai ni la rigueur ni la logique de certains) mais si vous désirez des challenges, j'en ai des tonnes dans la têtes... Mais, s'ils sont nombreux, malgré que j'ai été "ÔÔÔÔhhhh" (non je ne trouve pas de mots, c'est entre abasourdit et "****" !!!) avec notamment le Ruby et le F#, je peut trouver dans mes tiroirs des centaines de challenges... Mais le gros problème est que, quand un langage est "expert" pour un type de problème, d'autres seront tout aussi efficaces pour en trouver la solution, mais on ne peux pas connaître tous les langages de programmation, Certains diront "Le Lisp est indétrônable", d'autre "Python", et encore d'autres "Ruby"... Mais quelle est la vrai question, et surtout, quelle est la vrai réponse... On le sait tous, 1+1=2, et tous le reste en découle (c'était les paroles de mon super prof de math en seconde), Mais en informatique, il y a plusieurs solution pour résoudre cette énigme : 1+1... Il y a des centaines de façon de dire, Ben ça fait deux... Mais comment le prouver... Juste pour le fun... Zéro (0) impaire ou paire ? ? ? Juste pour vous faire comprendre que, toutes nos visions ne dépendent que de nous, de notre faculté à analiser le problème, avec nos instruments... Et voir VOS solutions, c'est hyper important... Je vous dis donc à tous, un SUPER GROS MERCI ! ! ! Merci à tous... Et bon week-end... Mais si vous désirez des challenges, j'en regorge. .. Signé, un fan de CadXP, et un fan du développement... Denis... -
Petit challenge de manipulation de chaine
(gile) a répondu à un(e) sujet de DenisHen dans Programmer en s'amusant
C'est quand même en LISP qu'il y a le plus de réponses et les réponses dans d'autres langages on permis aux curieux de découvrir d'autres choses (j'ai écris mes premières lignes de code en Ruby). Quant à la concision, c'est un critère prisé par ceux qui pratiquent certains langages (dont le LISP) et auquel j'ai eu (trop) tendance à prêter un grande importance. Aujourd'hui, je travaille sur des programmes de plusieurs dizaines de milliers de lignes (en C#, pas en LISP) et je me rend compte que privilégier la concision se fait parfois au détriment de le compréhension immédiate du code quand on revient dessus après quelques mois. Ça reste néanmoins une très bonne stimulation pour ce genre de challenge parce que ça oblige à coder en évitant tout verbiage superflu, ce qui est encore pire, à mon avis, pour la compréhension immédiate du code. En tous cas, je me suis régalé, merci.
