javascript tome viii - Qqs applications pratiques de JavaScript
Transcription
javascript tome viii - Qqs applications pratiques de JavaScript
Quelques Pour Débutants J.B. Dadet DIASOLUKA Luyalu Nzoyifuanga +243 - 851278216 - 899508675 - 991239212 - 902263541 - 813572818 XI. Suite et Nombres de Kaprekar : Algorithme de Kaprekar : découvert en 1949 par le mathématicien indien Dattatreya Ramachandra Kaprekar (1905-1988 = 83 ans) pour les nombres de 4 chiffres, mais peut être généralisé à tous les nombres. L’algorithme de Kaprekar consiste à un nombre quelconque « n » un autre nombre « K(n) » généré de la façon suivante : On considère les chiffres du nombre « n », écrits dans une base quelconque (généralement la base de numération décimale 10) ; On forme le nombre « n1 » en arrangeant ces chiffres dans l’ordre croissant, et le nombre « n2 » en les arrangeant dans l’ordre décroissant ; On pose « K(n) » = n2 – n1 ; J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII On itère le processus avec « K(n) jusqu’à trouver un identique à son propre « K(n). Ière version d’un utilitaire de nbs de Kaprekar : <script type="text/javascript"> "use strict"; const cl = console.log; // Seulement les chiffres significatifs sans zéro au début let tri = p => { let a = [], len = p.length; for(let k=0 ; k<len ; k++){ a[k]=p.charAt(k) }; a.sort(); let n = ""; for(let k=0 ; k<len ; k++) n+=a[k]; return n } let k,n1,n2,cptr,prev ; n2=k=""; cptr=prev=0; n1 = prompt("Donnez un nombre entier, p. ex 5245\n" + "Préférez les nombres de moins de 5 digits", Math.round(Math.random()*10000).toString()); let len = n1.length; cl(`Le nombre « n » proposé est : ${n1}\n`); n1 = tri(n1); while(k!=n1){ for(var idx=0 ; idx<len ; idx++) { n2+=n1.charAt(len- idx-1) ; k = Math.abs(n1-n2); } cl(`${++cptr}. (n2=${n2}) - (n1=${n1}) = K = ${k}\n`); if(prev==k) break; prev=k ; n1 = k.toString() ; n2 = k = ""; Qqs Applis Pratiques JS -2/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII n1 = tri(n1); } cl(`${"=".repeat(26)} Sortie->\n${cptr}. `+ `(n2=${n2}) - (n1=${n1}) = K = ${k}\n`); </script> IIè version d’un utilitaire de nbs de Kaprekar : <script type="text/javascript"> "use strict"; const cl = console.log; // Toujours le même nombre de digits, quit à ajouter des zéros au début. let tri = p => { let a = [], len = p.length; for(let k=0 ; k<len ; k++){ a[k]=p.charAt(k) }; a.sort(); Qqs Applis Pratiques JS -3/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII let n = ""; for(let k=0 ; k<len ; k++) n+=a[k]; return n } let k,n,n1,n2,cptr,prev,pos,deja,aprev=[] ; n2=k=""; cptr=prev=0; n=n1= prompt("Donnez un nombre entier, p. ex 57443\n" + "Préférez les nombres de moins de 5 digits", Math.round(Math.random()*100000).toString()); let len = n1.length; cl(`Le nombre « n » proposé est : ${n1}\n`); n1 = tri(n1); pos=cptr=prev=deja=0; while(k!=n1){ for(var idx=0 ; idx<len ; idx++) { n2+=n1.charAt(len- idx-1) ; k = Math.abs(n1-n2); } cl(`${++cptr}. (n2=${n2}) - (n1=${n1}) = K = ${k}\n`); if(prev==k) break; for(let q=0,l=aprev.length ; q<l ; q++){ if(k==aprev[q]) { deja++ ; pos=q; } } aprev[cptr]=k; for(let x=k.toString().length ; x<Math.floor(Math.log10(n1)+1) ; x++) { k=('0'+k).toString() } if(deja) break; prev=k ; n1=k.toString() ; n2=k="" ; n1=tri(n1); } if (deja) cl(`${n} = NonKaprekar :\n${cptr}. (n2 = ${n2}) - (n1 = ${n1}) = K = ${k}\n`); else cl(`${n} ${"=".repeat(19)} Kaprekar->\n${cptr}. `+ `(n2=${n2}) - (n1=${n1}) = K = ${k}\n`); </script> Qqs Applis Pratiques JS -4/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII IIIè version d’un utilitaire de nbs de Kaprekar : <div style='textaling:center'><ruby><ruby>N1<rt>Croissant</rt><span style="color:red">N2</span><rt><span style="color:red">Décroissant</span></rt>L<rt>K=Diff</rt>< /ruby><rt><u style="font-size:16px;color:blue">Suite de Kaprekar </u> </ruby><div><br> <form name="formn"> min. <input class="min" value=5245><br> Max <input class="Max"><br> Qtté <input id="qtt" value="1"><br> &Kaprekar Strict <input type=checkbox name="wkStrict"><br> Nombre-Titre <input type=checkbox name="nbTitl"> <br>Verbose <input type=checkbox class="verbose"> <br><button Qqs Applis Pratiques JS -5/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII onclick='javascript:fgo()' style="width:200;background:#ffe067">GO</button> </form> <script type="text/javascript"> "use strict"; function fgo(){ let debut=new Date(), outp = window.open(); const cl=outp.console.log, dw=outp.document; const arrange = p => { let n1 = Object.values(String(p)).sort() .join().replace(/,/g,e=>"") , n2 = Object.values(String(p)).sort() .reverse().join().replace(/,/g,e=>""); return {n1,n2} } let min = Number(document.querySelector(".min").value), Max = Number(document.querySelector(".Max").value), wkStrict = document.formn.wkStrict.checked?true:false, nbTitl = document.formn.nbTitl.checked?true:false, qtt = Number(Max-min+1>0 ? Max-min+1 : false || document.getElementById("qtt").value), verbose = ( qtt<=3 || document.querySelector(".verbose").checked) ? true : false, prevK=min, sum, t1="", t2="", crlf=""; Qqs Applis Pratiques JS -6/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII for(let nk=min,qk=nk+qtt,c=1;nk<qk;nk++){ let deja=[], flagk=1, t="",cptr=0, ideja=0, n=nk.toString(), kDiff=0, prev, n1, n2; if(nbTitl) t=`${"*".repeat(16)} ${nk} `+ `${"*".repeat(16)} (${c++})`, crlf="\n"; sum=""; while(prev!==kDiff){ prev=kDiff; t1="", t2=""; let r=arrange(n); n1=r.n1, n2=r.n2; t1=n1 , t2=n2; [t1,t2]=[t1,t2].sort(); t1=t1.padStart( Math.floor(Math.log10(nk)+1),"0" ).toString(); kDiff=Math.abs(t2 - t1); if(verbose) sum += `${++cptr}. t1 = ${t1} --- t2 = ${t2} | ` + `k = ${kDiff}\n`; n=kDiff; var idx=deja.findIndex(x => x==kDiff) if(idx<0) { deja[ideja++]=kDiff; } else break; } if((kDiff!=0) && ( arrange(kDiff).n1==arrange(t1).n1)) { Qqs Applis Pratiques JS -7/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII cl(`${t}${crlf}##### *${nk}* ` + `EST un NOMBRE DE KAPREKAR +++++ `+ `d=${nk-prevK}`+ `\n${sum}`) , prevK=nk; } else { flagk=0; cl(`${t}\n${"-".repeat(5)} ${nk} ` + `N'EST PAS un nombre de Kaprekar`); cl(`Longueur du CYCLE = ` + `${ideja-idx}\n${sum}`); } if(wkStrict) { if( (kDiff!=0) && (arrange(nk).n1==arrange(kDiff).n1)) { cl(`>>> *${nk}* ` + `EST un ` + `NOMBRE DE KAPREKAR STRICT <<<\n`+ `${arrange(nk).n1}==`+ `${arrange(kDiff).n1}`); } else { cl(`${nk} N'EST PAS ` + `un nombre de Kaprekar Strict`); cl( `k (${arrange(nk).n1}) != `+ `K (${arrange(kDiff).n1})`); if(flagk)cl( `Longueur du CYCLE = ${idejaidx}\n`); } } } cl(`${"=".repeat(45)}`) cl(`Début = ${debut.toLocaleString()}.`) Qqs Applis Pratiques JS -8/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII cl(`Durée = ${(new Date()-debut)/1000} ms.`) cl(`Fin = ${new Date().toLocaleString()}.`) dw.write(`Activez la console du browser avec `+ `< F12 > ou < CRTL-SHIFT-I > ou < CRTL-SHIFT-K >`); } </script> <!--abbr title="pop-up de abbr">Abbr</abbr> <br><br><ruby>A<rt>o</ruby> Å <br><br><ruby>B<rt>annotation</ruby> <ruby>BASE<rt>annotation 1<rt>annotation 2</ruby> <ruby>B<rt>a<rt>a</ruby><ruby>A<rt>a<rt>a</ruby> <ruby>S<rt>a<rt>a</ruby><ruby>E<rt>a<rt>a</ruby> <br><br><ruby> ♥ <rt> Heart <rt lang=fr> Cœur </rt> ☘ <rt> Shamrock <rt lang=fr> Trèfle </rt> ✶ <rt> Star <rt lang=fr> Étoile </rt> </ruby> <br><br><ruby><ruby>B<rt>a</rt>A<rt>n</rt>S<rt>t</rt>E<rt> n</rt></ruby><rt>annotation</ruby> <div style='textaling:center'><ruby><ruby>N1<rt>Croissant</rt><span style="color:red">N2</span><rt><span style="color:red">Décroissant</span></rt>L<rt>K=Diff</rt>< /ruby><rt><u style="font-size:16px;color:blue">Suite de Kaprekar </u> </ruby><div> <!--nav> <ul> <li> <a href="/aHref" class="cAnch" id='iAnch' name='nAnch'> Hypertexte </a> </li> </ul> Qqs Applis Pratiques JS -9/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII </nav> <script> "use strict"; const cl=console.log; let r = document.querySelector(".cAnch"); cl(r.href,r.name,r.id,r.textContent,r.text); </script> Exécution : Après avoir cliqué sur « Go », vous serez normalement automatiquement redirigé vers la nouvelle fenêtre qui vient de s’ouvrir et activez-y la console du navigateur avec par exemple < CTRL-SHIFT-K > si vous êtes dans Firefox ou < CTRL-SHIFT-I > ou < F12 > selon le navigateur. Avec les deux options ci-dessous « Max » et « Qtté » cochées, le maximum spécifié (« Max ») a préséance sur (« Qtté ») : Qqs Applis Pratiques JS -10/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII … Qqs Applis Pratiques JS -11/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII Qqs Applis Pratiques JS -12/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII … Qqs Applis Pratiques JS -13/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII Techniques pour programmer le PGCD de deux entiers : XII. A. Par le biais des plus petits diviseurs communs : 1 Les deux entiers dans une array : <script type="text/javascript"> "use strict"; var r,d,n1=2040,n2=39960 function pgcd(o){ o=o.sort().reverse() // n1 > n2 console.log(Object.values(o)) var pq=1; for(var p=2 ; p<o[0]/2 ; p++){ for(var k=2 ; k<o[0]/2 ; k++){ if(!(o[0]%k) && !(o[1]%k)){ pq*=k; o=o.map(x=>x/k) console.log(pq+" "+k+" "+o) } } } return pq } r=pgcd([n1,n2]) // L’array des deux entiers. console.log("pgcd ("+n1+" & "+n2+") = "+ r+" ("+n1/r+" & "+n2/r+") ") </script> // // // // // // Array [ 39960, 2040 ] 2 2 19980,1020 6 3 6660,340 24 4 1665,85 120 5 333,17 pgcd (2040 & 39960) = 120 (17 & 333) 2 Les deux entiers dans un littéral d’objet : Qqs Applis Pratiques JS -14/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII <script type="text/javascript"> "use strict"; var r,d,n1=4020, n2=2040 // n1 >2 function pgcd(o){ console.log(Object.values(o)) var pq=1; for(var p=2 ; p<o.n1/2 ; p++){ for(var k=2 ; k<o.n1/2 ; k++){ if(!(o.n1%k) && !(o.n2%k)){ pq*=k; o.n1/=k, o.n2/=k console.log(pq+" "+k+" "+Object.values(o)) } } } return pq } r=pgcd(d={n1:n1,n2:n2}) console.log("pgcd ("+n1+" & "+n2+") = "+ r+" ("+n1/r+" & "+n2/r+") ") </script> // // // // // // Array [ 4020, 2040 ] 2 2 2010,1020 6 3 670,340 30 5 134,68 60 2 67,34 pgcd (4020 & 2040) = 60 (67 & 34) 3 Plus simple (avec des primitives) : <script type="text/javascript"> "use strict"; var r,d,n1,n2 function pgcd(n1,n2){ console.log(n1,n2) var pq=1; for(var p=2 ; p<n1/2 ; p++){ for(var k=2 ; k<n1/2 ; k++){ if(!(n1%k) && !(n2%k)){ pq*=k; n1/=k, n2/=k Qqs Applis Pratiques JS -15/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII console.log(pq+" "+k+" "+n1+" "+n2) } } } return pq } r=pgcd(n1=Math.round(Math.random()*1e4), n2=Math.round(Math.random()*1e5)) console.log("pgcd ("+n1+" & "+n2+") = "+ r+" ("+n1/r+" & "+n2/r+") ") </script> // // // // // 1792 33348 2 2 896 16674 14 7 128 2382 28 2 64 1191 pgcd (1792 & 33348) = 28 (64 & 1191) B. Selon les deux principes : PGCD ( a , b ) = PGCD ( b , a mod b ) et PGCD ( a , 0 ) = a : 1 Les deux entiers dans une array : <script type="text/javascript"> "use strict"; // PGCD(a,b) = PGCD (b,a mod b) et PGCD(a,0) = a. var r,d, n1=2040,n2=39972 // Les deux entiers function pgcd(a){ a=asort(a) // n1 > n2 console.log(Object.values(a),+" "+n1+" "+n2) var pq=1; while(a[1]) a=[a[1], a[0]%a[1]] , console.log(a) return a[0] Qqs Applis Pratiques JS -16/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII } r=pgcd([n1,n2]) // L’array des deux entiers. console.log("pgcd ("+n1+" & "+n2+") = "+ r+" ("+n1/r+" & "+n2/r+") ") function asort(a){ return a.sort().reverse() // n1 > n2 } </script> // // // // // // // // // Array [ 39972, 2040 ] 2040 39972 Array [ 2040, 1212 ] Array [ 1212, 828 ] Array [ 828, 384 ] Array [ 384, 60 ] Array [ 60, 24 ] Array [ 24, 12 ] Array [ 12, 0 ] pgcd (2040 & 39972) = 12 (170 & 3331) test.html:7:4 test.html:11:10 test.html:11:10 test.html:11:10 test.html:11:10 test.html:11:10 test.html:11:10 test.html:11:10 test.html:17:2 Qqs Applis Pratiques JS -17/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII Kinshasa, le jeudi 4 avril 2019 - 10:47:45 PM Mots-clés : JAVASCRIPT, Programmation Internet, keys, values, parseInt, parseFloat, toString, fonction fléchée, sloppy mode, mode strict, prototype, objet ordinaire, objet exotique, objet standard, built-in object, Scope, contexte d’exécution, Domaine, Portée, Étendue, Visibilité, Accessibilité, durée de vie, Es10, ECMASCRIPT 2019, LiveScript, extradimensionnels, entités éthériques nonbiologiques, TC39, ECMA, Kaprekar Qqs Applis Pratiques JS -18/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII DIASOLUKA Nz. Luyalu Docteur en Médecine, Chirurgie & Accouchements (1977), CNOM : 0866 - Spécialiste en ophtalmologie (1980) Études humanités : Scientifique - Mathématiques & Physique. Informaticien-amateur, Programmeur et WebMaster. Chercheur indépendant, autonome et autofinancé, bénévole, sans aucun conflit d’intérêt ou liens d'intérêts ou contrainte promotionnelle avec qui qu’il soit ou quelqu’organisme ou institution / organisation que ce soit, étatique, paraétatique ou privé, industriel ou commercial en relation avec le sujet présenté. +243 - 851278216 - 899508675 - 991239212 - 902263541 - 813572818 [email protected] Autre Lecture : https://www.scribd.com/document/374738470/Le-Plus-GrandSecret-de-La-Creation D’autres publications pouvant aussi intéresser : • https://www.scribd.com/document/377036251/LeDosage-Des-Medicaments-en-Cac-Cas • https://www.scribd.com/document/377035454/LeHasard-Des-Thermometres-Non-contact-a-Infrarouge • https://www.scribd.com/document/376222482/PetiteIntroduction-Aux-Fonctions-JavaScript • https://www.scribd.com/document/376221919/La-FoiQqs Applis Pratiques JS -19/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII en-Jesus-Christ-Pour-Quoi-Faire • https://www.scribd.com/document/375689778/Lacuitevisuelle-angulaire • https://www.scribd.com/document/375349851/Lavariable-This • https://www.scribd.com/document/375024162/FonctionsImbriquees-en-JS • https://www.scribd.com/document/374789297/FormatInterne-Des-Objets-JavaScript • https://www.scribd.com/document/374788758/Iterationsen-JavaScript • https://www.scribd.com/document/374738470/Le-PlusGrand-Secret-de-La-Creation • https://www.scribd.com/document/374597969/NouvelleFormule-d-IMC-indice-de-doduite-Selon-Dr-Diasoluka • https://www.scribd.com/document/373847209/PropertyDescriptors • https://www.scribd.com/document/373833282/l-ObjetGlobal-Window • https://www.scribd.com/document/372665249/JavascriptTome-II • https://www.scribd.com/document/355291488/motiliteoculaire-2 • https://www.scribd.com/document/355291239/motiliteoculaire-I • https://www.scribd.com/document/355290248/Script-dAnalyses-Des-Reflexes-Pupillomoteurs • https://www.scribd.com/document/321168468/Renseigne ments-Id-et-Anthropometriques • https://www.scribd.com/document/320856721/Emission31-Jul-2016 Qqs Applis Pratiques JS -20/21- jeudi, 4. avril 2019 (10:47 ) J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-VIII • https://www.scribd.com/document/318182982/Complicati on-Visuelle-du-Traitement-de-La-Malaria • https://www.scribd.com/document/318180637/RapportEntre-Oxymetrie-Et-Type-Respiration • https://www.scribd.com/document/315746265/Classificati on-Des-Medicaments • https://www.scribd.com/document/315745909/Incongrue nces-Heresies-et-Heterodoxies-de-la-Notion-de-Laboratoire • https://www.scribd.com/document/315745725/RapportEntre-Oxymetrie-Et-Type-Respiration Qqs Applis Pratiques JS -21/21- jeudi, 4. avril 2019 (10:47 )