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 )