Cool :ccool:
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
Version imprimable
Cool :ccool:
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 :cry:Code:
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:
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:
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:
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 poilCode:
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:
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 :mrgreen:
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 :koi:Code:
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égatifCode:
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 !! :ccool: 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 ! :aie:
Code:
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 :koi:Code:
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:
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èresCode:
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:
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. :aie:
Pour le setInterval String cela marche très bien sous Firefox 22, tu as probablement un problème sur ton install locale...
Citation:
Envoyé par Bovino
C'est pas comme si j'avais pas prévenu ! :mrgreen:Citation:
Envoyé par SylvainPV
:applo:je vois que l'on passe de bonne journée ici :mrgreen:Citation:
Envoyé par Kaamo
C'est clair, on s'amuse bien :mrgreen:
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:
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 :yaisse2:Code:
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 8-)
EDIT : Oups un train de retardCode:
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);