Cool
J'ai une solution dans les cartons. Je la minifie et je la posterai plus tard pour comparer vos résultats. Pas sûr que ça tienne en moins de 140 par contre
Cool
J'ai une solution dans les cartons. Je la minifie et je la posterai plus tard pour comparer vos résultats. Pas sûr que ça tienne en moins de 140 par contre
un petit essai :
147 caractères
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 var print = function(msg){ console.log(msg); }; (function(d,p){ setInterval(function(){u=new Date(d.getTime()-new Date().getTime());p(u.getDate()-1+"j"+u.getHours()+":"+u.getMinutes()+":"+u.getSeconds())},1000) })(new Date(2013,6,20),print);
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (function f(d,p){ t=d-new Date;a=~~(t/=1000)%60+"s ";a+=~~(t/=60)%60+"m ";a+=~~(t/=60)%24+"h ";a+=~~(t/=24)+"j ";setTimeout(function(){p(a);f(d,p)}, 1000); })(new Date(2013,6,20),print);
138 caractères
Mais j'ai du pour ça tricher 2 fois...
EDIT :
130 caractères et en supprimant une des triches (Merci pour la fonction SetInterval, je n'y avais pas pensé)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (function(d,p){ setInterval(function(){t=d-new Date;a=~~(t/=1000)%60+"s ";a+=~~(t/=60)%60+"m ";a+=~~(t/=60)%24+"h ";a+=~~(t/=24)+"j ";p(a)}, 1000) })(new Date(2013,6,20),print);
EDIT 2 :
129 caractères sans la triche (la triche c'est que l'ordre d'affichage des éléments était inversé par rapport à l'énoncé).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (function(d,p){ setInterval(function(){t=d-new Date;a=~~(t/=1000)%60+"s ";a=~~(t/=60)%60+"m "+a;a=~~(t/=60)%24+"h "+a;a=~~(t/=24)+"j "+a;p(a)},9) })(new Date(2013,6,20),print);
J'ai réduit l’intervalle à 9ms pour économiser 3 caractères.
140 caractères pile poil
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var print = function(msg){ console.log(msg); }; (function(d,p){ x=d;setInterval("for(t=x-new Date,u=[864e5,'j ',36e5,'h ',6e4,'m ',1e3,'s'],i=-2;(i+=2)<7;)t-=u[i]*(u[i]=~~(t/u[i]));print(u.join(''))",1e3) })(new Date(2013,6,20),print);
Oui, c'est court 1ms. je l'ai mis à 9 pour que ça plante moins.
EDIT :
En me servant des améliorations de TheGwy, je tombe à 126 caractères.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (function(d,p){ x=d;q=p;setInterval("t=x-new Date;a=~~(t/=1e3)%60+'s ';a=~~(t/=60)%60+'m '+a;a=~~(t/=60)%24+'h '+a;a=~~(t/=24)+'j '+a;q(a)",9) })(new Date(2013,6,20),print);
Barbare le rafraîchissement toutes les 9ms
Voici un code en 109 caractères (merci TheGwy, je n'avais pas pensé à passer en format chaine), mais il ne fonctionne que sur IE10 et Chrome :
C'est bizarre qu'il faille déclarer d et p sous d'autres noms de variables, ça ne passe pas sinon
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (function(d,p){ x=d,y=p,setInterval("t=(x-new Date)/6e4;y(~~(t/1440)+'j '+~~(t/60)%24+'h '+~~t%60+'m '+~~(t*60)%60+'s')",1e3) })(new Date(2013,6,20),function(msg){console.log(msg);});
Du coup, je ne suis pas sûr que ton code fonctione TheGwy, si ?
Mais comme il ne fonctionne pas sur Firefox. Voici donc le code compatible en 111 caractères :
Bien sûr quand la date est passée, ça affiche du négatif
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (function(d,p){ setInterval(function(){t=(d-new Date)/6e4;p(~~(t/1440)+'j '+~~(t/60)%24+'h '+~~t%60+'m '+~~(t*60)%60+'s')},1e3) })(new Date(2013,6,20),function(msg){console.log(msg);});
Bravo Kaamo !! Je pensais pas qu'on arriverait à faire moins de 126, je me tournais les méninges dans tous les sens.
En mettant 9ms, tu descends même à 107 caractères. (Chez moi, il accepte le rafraichissement à 9ms sans broncher, même à 1ms ça passe).
Pour finir, j'utilise FireFox et la méthode du setInterval avec les guillemets fonctionne sans problème chez moi. Je n'ai pas Chrome pour tester.
Je triche un peu, mais 96 !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var print = function(msg){ console.log(msg); }; (function(d,p){ setInterval(function(){n=(d-new Date);j=~~(n/86400000)+"j";p(j+new Date(n).toTimeString())},1e3) })(new Date(2013,6,20),print);
ha oui en effet !
Hahaha classe Bovino, j'adore ! En l'arrangeant un peu pour qu'elle rentre mieux dans l'énoncé : 99 caractères
ps : la forme "" ne marche pas sous Firefox 22, bizarre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var print = function(msg){ console.log(msg); }; (function(d,p){ setInterval(function(){n=d-new Date;p(~~(n/864e5)+"j "+new Date(n).toTimeString().slice(0,8))},1e3) })(new Date(2013,6,20),print);
95
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var print = function(msg){ console.log(msg); }; (function(d,p){ setInterval(function(){n=d-new Date;p(~~(n/864e5)+"j "+new Date(n).toLocaleTimeString())},1e3) })(new Date(2013,6,20),print);
Ouais ça triche un peu avec ce format de présentation
L'idée derrière ce format était de trouver des pistes pour centraliser le mécanisme arrondi+modulo pour les 4 unités j/h/m/s ; si on laisse toTimeString le faire à notre place, c'est beaucoup moins intéressant
Pour info, la piste que je suivais mais qui ne s'est pas avérée aussi courte que les vôtres:
130 caractères
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var print = function(msg){ console.log(msg); }; (function(d,p){ setInterval(function(){t=d-new Date;s='';[864e5,36e5,6e4,1e3].map(function(u,i){s+=(v=~~(t/u))+"jhms"[i]+' ';t-=v*u;});p(s);},1e3) })(new Date(2013,6,20),print);
ou encore en 124 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 (function(d,p){ D=d;P=p;setInterval("for(t=D-new Date,s='',i=3;u=[864e5,36e5,6e4,1e3][3-i];s+=(v=~~(t/u))+'smhj'[i--]+' ',t-=v*u);P(s)",1e3) })(new Date(2013,6,20),function(msg){ console.log(msg); });
Bravo kaamo 109 caractères !
Dire que j'ai vraiment eu du mal à faire tenir la mienne en 140.
Pour le setInterval String cela marche très bien sous Firefox 22, tu as probablement un problème sur ton install locale...
Envoyé par BovinoC'est pas comme si j'avais pas prévenu !Envoyé par SylvainPV
je vois que l'on passe de bonne journée iciEnvoyé par Kaamo
C'est clair, on s'amuse bien
Nouveau jour, nouveau défi
Numéro 5 : calcul du PGCD (plus grand diviseur commun) d'un nombre variable de nombres
La difficulté ici est la gestion d'un nombre variable d'arguments. Le calcul du PGCD lui peut-être fait de plusieurs façons, ça vous fera replonger dans vos vieux courts de math
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function pgcd(){ //votre code ici } console.assert( pgcd(27,36) === 9 ); console.assert( pgcd(128,8,32) === 8 ); console.assert( pgcd(7,14,7,35,707) === 7 ); console.assert( pgcd(13,17) === 1 );
130 caractères
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 function pgcd(){ for(i=arguments.length-1;i>0;i--){r=a=arguments[i];b=arguments[i-1];while(r!=0){if(r!=0){a=b;b=r}r=a%b}arguments[i-1]=b}return b; } alert(pgcd(7,14,7,35,707));
J'arrive à 115 caractères en blanchissant l'argent sale de Bovino
EDIT : Oups un train de retard
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var print = function(msg){ console.log(msg); }; (function(d,p){ x=d;setInterval("print((new Date(n=x-new Date)+'').replace(/.*(..):(..):(..).*/,~~(n/864e5)+'j $1h $2m $3s'))",1e3) })(new Date(2013,6,20),print);
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager