Donnez vie à vos documents numériques !
 

Raccourcir un script

abracadabraPDF Forums PDF – Général Raccourcir un script

  • Ce sujet contient 28 réponses, 3 participants et a été mis à jour pour la dernière fois par michel c., le il y a 1 mois.
  • Créateur
    Sujet
  • #75463
    michel c.
    Participant

    Bonjour, j’ai un code qui risque d’être extrêmement long et je me demandais s’il était possible de le faire tenir sur moins de ligne.

    Grosso-modo, j’ai un script qui affecte aléatoirement une valeur entière comprise entre 2 valeurs à une variable (points)  et à partir de cette valeur, j’aimerais que soient affectées un couple de 3 lettres de l’alphabet à 3 variables (pointA, pointB et pointC)

    if (points == 1) {var pointA = “A”;var pointB = “B”;var pointC = “C”;}
    if (points == 2) {var pointA = “D”;var pointB = “E”;var pointC = “F”;}
    if (points == 3) {var pointA = “G”;var pointB = “H”;var pointC = “I”;}

    il va de soi que si je vais au bout de l’idée ce script va être extrêmement long.

    J’aimerais donc que soient affectées un trio de 3 lettres majuscules différentes aléatoirement parmi toutes les lettres de l’alphabet.

    En bonus, si ce n’est pas trop compliqué, j’aimerais que certaines lettres ne puissent pas se retrouver dans le même trio :

    PS, PC, FN, RN, FO, LR, PD, PQ, WC,  GPT, PT…

    Merci

     

    • Ce sujet a été modifié le il y a 1 mois par michel c..
Affichage de 28 réponses de 1 à 28 (sur un total de 28)
  • Auteur
    Réponses
  • #75465
    michel c.
    Participant

    Je voulais dire plutôt : j’aimerais que soient affectées un trio de 3 lettres de l’alphabet à 3 variables (pointA, pointB et pointC)

    Et non un couple de 3 lettres…

    #75466
    Merlin
    Maître des clés

    Bonjour

     

    Je ne suis pas certain d’avoir tout compris mais a priori à partir du moment où on affecte une valeur (lettre) aléatoire à pointA, pointB et pointC on se fiche pas mal de la valeur de “points” puisqu’elle n’y change rien.

     

    Ce qui nous donnerait :

    function generateRandomLetter() {
    var randomValue = Math.random();
    var randomCode = 65 + Math.floor(randomValue * 26);
    return String.fromCharCode(randomCode);
    }

    var pointA = generateRandomLetter();
    var pointB = generateRandomLetter();
    var pointC = generateRandomLetter();

    console.println(pointA + pointB + pointC);

     

    On pourrait ensuite détecter les paires interdites mais dis moi d’abord si ça convient.

    #75467
    bebarth
    Maître des clés

    bonjour,
    le principe est le bon mais il faut aussi vérifier que les 3 lettres sont différentes.
    Je pourrai regarder à mon retour mercredi ou jeudi…

    @+
    😎

    #75468
    michel c.
    Participant

    Bonjour Je ne suis pas certain d’avoir tout compris mais a priori à partir du moment où on affecte une valeur (lettre) aléatoire à pointA, pointB et pointC on se fiche pas mal de la valeur de “points” puisqu’elle n’y change rien. Ce qui nous donnerait : function generateRandomLetter() { var randomValue = Math.random(); var randomCode = 65 + Math.floor(randomValue * 26); return String.fromCharCode(randomCode); } var pointA = generateRandomLetter(); var pointB = generateRandomLetter(); var pointC = generateRandomLetter(); console.println(pointA + pointB + pointC); On pourrait ensuite détecter les paires interdites mais dis moi d’abord si ça convient.

    Oui, c’est exactement ça, il faudrait juste éviter que la même lettre se retrouve plusieurs fois dans le trio et éviter les paires ou trios interdits.

     

    #75469
    Merlin
    Maître des clés

    Essaye ça (chez moi ça fonctionne), l’idée c’est ce qu’il y a un doublon ou une association interdite on relance la fonction :

    function generLettres() {

    function generateRandomLetter() {
    var randomValue = Math.random();
    var randomCode = 65 + Math.floor(randomValue * 26);
    return String.fromCharCode(randomCode);
    }

    var pointA = generateRandomLetter();
    var pointB = generateRandomLetter();
    var pointC = generateRandomLetter();
    var str = pointA + pointB + pointC;

    console.println("pointsABC: " + pointA + pointB + pointC);

    if (pointA === pointB || pointA === pointC || pointB === pointC) {generLettres();} // dédoublonage

    else if ((/PS|PC|FN|RN|FO|LR|PD|PQ|WC|GPT|PT/.test(str))) {generLettres();} // associations interdites

    }

    generLettres();

    #75470
    bebarth
    Maître des clés

    Je pense que ça devrait être ça !

    @+
    😎

    #75471
    michel c.
    Participant

    Merci, c’est parfait !

    J’avais besoin de ce script pour finaliser un quiz interactif avec des questions et des données qui changent chaque fois que l’utilisateur recommence.

    Le voici en pièce jointe si jamais vous avez besoin de revoir votre trigonométrie…

    Il me reste à vérifier s’ils reste des bugs ou des anomalies.

    Merci encore, je suis très content d’arriver au bout, ça fait plusieurs mois que je suis sur ce document.

    Attachments:
    You must be logged in to view attached files.
    #75473
    michel c.
    Participant

    Je viens de m’apercevoir que ça m’a quand même généré le couple de lettre PQ malgré la ligne qui est censée l’exclure…

     

    Attachments:
    You must be logged in to view attached files.
    #75476
    Merlin
    Maître des clés

    Beau boulot !

    Mais quand je teste, la console affiche une erreur chaque fois que je clique sur le bouton “Démarrer”.

    Et comme les scripts de document sont fragmentés impossible de savoir d’où vient la “ligne 17” en question.

     

    J’ai testé plusieurs fois et ce sont toujours les mêmes lettres “SKX” qui s’affichent dans le document, quelles que soient les valeurs de “pointsABC”.

    (Capture jointe)

     

    Attachments:
    You must be logged in to view attached files.
    #75480
    michel c.
    Participant

    C’est curieux, avec pdf XChange editor, je n’ai pas d’erreur à la console et les lettres sont bel et bien générées…

    Je vais essayer de me pencher là dessus.

    #75481
    Merlin
    Maître des clés

    Du coup j’ai testé avec Foxit Reader, la génération aléatoire des caractères y fonctionne bien.

    Par contre comme on ne peut pas activer la console dans la version Reader je ne sais pas si le bouton démarrer y déclenche aussi une erreur.

    #75482
    michel c.
    Participant

    Je pense que c’est dans le script ChoixCas. Je viens de le modifier en mettant du texte en unicode. Je vais installer adobe en rentrant pour voir si ça vient de là. Si c’est ça, je finirai de modifier ce script en y mettant de l’unicode partout ou il faut.

     

     

    Attachments:
    You must be logged in to view attached files.
    #75486
    michel c.
    Participant

    Çà ne vient pas de là. c’est difficile de savoir d’où vient l’erreur, je n’ai pas de console sur le logiciel adobe…

    Je l’ai fait tester par des élèves qui m’ont permis de corriger quelques erreurs sur mon fichier…

    Il fonctionne très bien sur PDF XChange editor, sauf pour les duos ou trios de lettres interdites qui s’affichent quand même.

    Attachments:
    You must be logged in to view attached files.
    #75488
    bebarth
    Maître des clés

    bonjour,
    J’ai eu le temps de réfléchir à “comment réduire le script” hier pendant que je conduisais sur mon chemin du retour…
    Voici donc le résultat de ma réflexion après l’avoir testé ce matin :
    var pointsABC="";
    while (pointsABC.length<3) {
    pointsABC+=String.fromCharCode(65+Math.floor(Math.random()*26))
    if (/^(?=.*(.).*\1)[A-Z]{1,3}$/.test(pointsABC) || /PS|PC|FN|RN|FO|LR|PD|PQ|WC|GPT|PT/.test(pointsABC)) var pointsABC=pointsABC.slice(0,-1);
    }
    console.println(pointsABC);

    On peut donc récupérer chaque point si nécessaire en “splitant” la chaine pointsABC.

    Une autre réflexion m’en est ensuite venue : les couples/trios de lettres interdits le sont ici pour des points consécutifs et dans l’ordre (AB et BC) mais doivent-ils également l’être dans un autre ordre (BA, CB ou AC et CA) ??? Ça risque de compliquer un peu l’expression régulière…

    @+
    😎

    #75489
    michel c.
    Participant

    En fait, ça peut être gênant surtout pour le champ Question.1.1 dont la valeur est la suivante par exemple pour le cas 1

    var debutEnnonce = "Dans le triangle rectangle ci-contre, quelle formule utiliser pour calculer la longueur "
    var milieuEnnonce = ", sachant que "

    this.getField("Question.1.1").value = debutEnnonce +pointA+pointB+ milieuEnnonce + SymbAngle+" = "+angle+"° et "+pointA+pointC+" = "+donnee+" mm ?";

    Comme les variables pointA ; pointB et pointC ont comme valeur des lettres prises aléatoirement, alors les permutations sont possibles je pense

    par contre dans tous les cas, les couples de lettres cités dans le champ Question.1.1 ne peuvent être que

    • pointA+pointB
    • pointA+pointC
    • pointB+pointC
    #75491
    michel c.
    Participant

    Concrètement ça veut dire que :

    • si la variable pointA == “P” alors les variables pointB et pointC doivent être différentes de S et de C
    • si  pointB == “P” alors  pointC doit être différente de S et de C
    • si (pointA == “F”|| pointA == “R”) alors les variables pointB et pointC doivent être différentes de N
    • si (pointB == “F”|| pointB == “R”) alors la variables  pointC doit être différente de N

    ……

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    #75494
    Merlin
    Maître des clés

    Je ne me suis pas posé toutes ces questions, mon script est “brutal” : si une des conditions interdites est remplie il recommence au départ. Autant de fois que nécessaire.

    #75499
    bebarth
    Maître des clés

    Concrètement ça veut dire que :

    • si la variable pointA == “P” alors les variables pointB et pointC doivent être différentes de S et de C
    • si pointB == “P” alors pointC doit être différente de S et de C
    • si (pointA == “F”|| pointA == “R”) alors les variables pointB et pointC doivent être différentes de N
    • si (pointB == “F”|| pointB == “R”) alors la variables pointC doit être différente de N

    …ça va encore !

    On peut modifier la seconde expression régulière en /P.?(S|C|D|Q|T)|(F|R).?N|F.?O|L.?R|W.?C|GPT/, ce qui donne :

    var pointsABC="";
    while (pointsABC.length<3) {
    pointsABC+=String.fromCharCode(65+Math.floor(Math.random()*26));
    if (/^(?=.*(.).*\1)[A-Z]{1,3}$/.test(pointsABC) || /P.?(S|C|D|Q|T)|(F|R).?N|F.?O|L.?R|W.?C|GPT/.test(pointsABC)) var pointsABC=pointsABC.slice(0,-1);
    }

    @+
    😎

    • Cette réponse a été modifiée le il y a 1 mois par bebarth.
    #75502
    michel c.
    Participant

    J’ai placé le script dans generLettres, le script s’exécute mais les lettres ne changent pas…

    Attachments:
    You must be logged in to view attached files.
    #75509
    michel c.
    Participant

    Sinon et c’est peut être beaucoup plus simple, exclure les lettres P, N, O, R et W des lettres générées.

    En faisant ça je n’aurait je pense aucun duo ou trio de lettres qui pose problème…

    #75510
    Merlin
    Maître des clés

    Je croyais que la liste que tu as donné était juste un exemple, parce qu’il en manque :

    LFI, SS, SA, NIK, CON, CUL, PUT, BIT, TEB, FDP, LOL… et on pourrait certainement en trouver encore plus.

    Si tu veux vraiment faire de la censure il ne te restera plus beaucoup de lettres à disposition, auquel cas il vaudrait peut être mieux utiliser l’alphabet Grec.

    Personellement je suis contre la censure, et puis ça égaiera certainement les cours.

    😉

    #75511
    michel c.
    Participant

    J’avais fait une recherche avec les duos et trios de lettres sur les plaques d’immatriculation.  Le site sur lequel je suis tombé n’a pas fourni une liste exhaustive apparemment.

    Au vu des nombreux exemples que tu donnes, je crois que je vais suivre ton conseil, sans quoi ça va être d’avoir une liste des duos et trios de lettres à bannir…

     

    #75512
    Merlin
    Maître des clés

    Sur les plaques d’immatriculation il y a une lettre interdite dans les paires O-Q et U-V pour raison de lisibilité, je ne sais plus lesquelles.

    Par contre ce qui est interdit partout, y compris sur les plaques d’immatriculation c’est “SS”.

    Mais s’agissant de trios de lettres, SS ne sera jamais seul, donc ça devrait passer.

    (Et du coup je m’aperçois que ci-dessus j’ai oublié SUS 🙂 )

    #75513
    michel c.
    Participant

    Sinon j’ai testé la version non censurée avec des élèves ce matin et ça s’avère terriblement efficace. En moins d’une heure, ils ont tous sans exception retenu les 3 formules, il faut encore un peu d’entrainement à certains pour extraire la longueur recherchée de l’équation mais ça sera vite réglé aussi.

    Ce qui m’impressionne c’est leur persévérance lorsqu’ils travaillent sur ce type de formulaire. ça m’encourage à en faire davantage.

    Je tenais à vous remercier car sans vous je ne serais jamais arrivé à faire ce que j’avais en tête.

    En pièce jointe, une version fonctionnelle non censurée.

    Ce n’est pas encore la version définitive, je vais retravailler les textes d’aide, peaufiner la mise en page, aplatir les traits et concocter une petite vidéo tuto.

    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    • Cette réponse a été modifiée le il y a 1 mois par michel c..
    Attachments:
    You must be logged in to view attached files.
    #75521
    Merlin
    Maître des clés

    🙂

    #75528
    bebarth
    Maître des clés

    bonjour,

    Par contre ce qui est interdit partout, y compris sur les plaques d’immatriculation c’est “SS”.

    Je ne vais pas commenter la liste des noms partis à bannir, mais j’ai une info très intéressante à vous partager.
    Ma première voiture, une 4L, était immatriculée “2200 SS 77” et c’est la seule immatriculation que je me souvienne…
    Même l’immatriculation de ma voiture actuelle est notée sur mon téléphone. Intéressant, non ???

    @+
    😎

    #75531
    Merlin
    Maître des clés

    Je ne sais pas de quand date l’interdiction de “SS”.

    (Joker)

    Mais je me souviens que mon père a eu une voiture immatriculéee “QQ”, et qu’il s’est fait chambrer plus d’une fois.

    😉

    #75533
    michel c.
    Participant

    Je n’utilise jamais chat GPT mais si j’ai un peu de temps je vais voir s’il est capable de sortir une liste exhaustive des duos et trios de lettres de ce type.

    Je vais déjà commencer à réfléchir à un prompt…

Affichage de 28 réponses de 1 à 28 (sur un total de 28)
  • Vous devez être connecté pour répondre à ce sujet.