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éateurSujet
-
23 février 2025 à 18:20 #75463
michel c.
ParticipantBonjour, 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..
-
Ce sujet a été modifié le il y a 1 mois par
-
CréateurSujet
-
AuteurRéponses
-
23 février 2025 à 21:52 #75465
michel c.
ParticipantJe 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…
24 février 2025 à 00:34 #75466Merlin
Maître des clésBonjour
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.
24 février 2025 à 07:51 #75467bebarth
Maître des clésbonjour,
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…@+
😎24 février 2025 à 15:44 #75468michel c.
ParticipantBonjour 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.
24 février 2025 à 19:29 #75469Merlin
Maître des clésEssaye ç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();
24 février 2025 à 19:34 #75470bebarth
Maître des clésJe pense que ça devrait être ça !
@+
😎25 février 2025 à 08:16 #75471michel c.
ParticipantMerci, 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.25 février 2025 à 08:30 #75473michel c.
ParticipantJe 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.25 février 2025 à 10:04 #75476Merlin
Maître des clésBeau 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.25 février 2025 à 11:29 #75480michel c.
ParticipantC’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.
25 février 2025 à 11:39 #75481Merlin
Maître des clésDu 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.
25 février 2025 à 14:40 #75482michel c.
ParticipantJe 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.26 février 2025 à 08:42 #75486michel 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.26 février 2025 à 09:03 #75488bebarth
Maître des clésbonjour,
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…
@+
😎26 février 2025 à 10:51 #75489michel c.
ParticipantEn 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
26 février 2025 à 11:10 #75491michel c.
ParticipantConcrè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..
26 février 2025 à 11:27 #75494Merlin
Maître des clésJe 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.
26 février 2025 à 17:07 #75499bebarth
Maître des clésConcrè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.
27 février 2025 à 08:48 #75502michel c.
ParticipantJ’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.27 février 2025 à 09:52 #75509michel c.
ParticipantSinon 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…
27 février 2025 à 14:49 #75510Merlin
Maître des clésJe 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.
😉
27 février 2025 à 15:05 #75511michel c.
ParticipantJ’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…
27 février 2025 à 15:11 #75512Merlin
Maître des clésSur 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 🙂 )
27 février 2025 à 15:23 #75513michel c.
ParticipantSinon 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.27 février 2025 à 17:23 #75521Merlin
Maître des clés🙂
28 février 2025 à 13:42 #75528bebarth
Maître des clésbonjour,
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 ???@+
😎28 février 2025 à 18:50 #75531Merlin
Maître des clésJe 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.
😉
28 février 2025 à 18:58 #75533michel c.
ParticipantJe 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…
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.