Bien joué pour la récursivité, c'est intéressant mais je ne pense que ça soit l'approche la plus économe en caractères :)
Version imprimable
Bien joué pour la récursivité, c'est intéressant mais je ne pense que ça soit l'approche la plus économe en caractères :)
En 133 caractères, permet de virer un caractère ou une chaîne correspondant à un masque, sans globales :
Code:
1
2
3 (function(n,e){ var t=document.createTreeWalker(n,NodeFilter.SHOW_TEXT),p='nodeValue',i;while(t.nextNode()){i=t.currentNode;i[p]=i[p].replace(e,'')} })(document.body,/e/ig);
8O J'ignorais totalement l'existence de cette méthode : https://developer.mozilla.org/en-US/...eateTreeWalker
Merci !
Référence : http://www.w3.org/TR/DOM-Level-2-Tra...sal-TreeWalker
Ah ben en fait c'était pas bien compliqué de passer le traceur de rosaces sous les 140. Il suffit de faire sans transform :)
122 : http://jsfiddle.net/J7kUq/2/Code:
1
2
3
4 (function(C){ c=C.getContext('2d');X=Math.cos;R=t=74;setInterval("r=X(8/5*t);c.fillRect(R*2*(1-r*X(t)),R*(1-r*X(1.57-(t+=.01))),1,1)",5) })(document.querySelector("canvas"));
ça sent les vacs ? Ou l'excès de boulot pré-rentrée ? :)
edit : D'ailleurs sur le script de @Lcf.vs, NodeFilter.SHOW_TEXT === 4 (19 car de moins)
Un défi : calendrier perpétuel.
Le paramètre d'entrée est l'année et en sortie un tableau mois / jours.
A voir si c'est possible.
Le jour .. de la semaine (lundi, mardi, etc. ) ?
Oui petite pause vacances :)
Mais si ce genre de défi vous plaît toujours, n'hésitez pas à en proposer comme Auteur l'a fait. Par contre il faut être précis sur les entrées et sorties attendues :ccool:
Code:
1
2
3
4
5
6
7
8
9 function c(){d=new Date(),m=[31,28,31,30,31,30,31,31,30,31,30,31],a=d.getFullYear(),i=1,s=[],n=m[d.getMonth()];(!(a%4)&&(a%100))||!(a%400)?m[1]=29:0;d.setDate(1);s.push(a,d.getMonth(),d.getDay());while(i<=n){s.push(i++)}return s} console.log( c() ); /* * [2013, 7, 4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31] * [an,mois-1,numéro du jour (dimanche == 0) du premier du mois, les jours] * Le calendrier tient compte des années bissextiles. */
Pour répondre à l'énoncé :
- Prend en entrée une année et la liste des jours de la semaine.
- Donne en sortie un tableau à deux dimensions, contenant les jours pour chaque mois
108 caractères, exemple pour l'an 2000 :
Résultat :Code:
1
2
3 (function(y,t,r,i,d,j,s){ for(r=i=[];i<12;r[i++]=s)for(j=s=[];+d!=+new Date(y,i+1,0);s[j++]=t[d.getDay()])d=new Date(y,i,j+1);return r })(2000,['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']);
Mais ça me parait simple en fait, étant donné que je passe par le constructeur de Date pour trouver le jour. Du coup, j'ai consulté l'article Wikipédia qui propose un algorithme et l'ai retranscrit :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 [Array[31], Array[29], Array[31], Array[30], Array[31], Array[30], Array[31], Array[31], Array[30], Array[31], Array[30], Array[31]] // Exemple 1er Array : Janvier : 0: "samedi" 1: "dimanche" 2: "lundi" 3: "mardi" 4: "mercredi" 5: "jeudi" 6: "vendredi" 7: "samedi" 8: "dimanche" 9: "lundi" 10: "mardi" 11: "mercredi" 12: "jeudi" 13: "vendredi" 14: "samedi" 15: "dimanche" 16: "lundi" 17: "mardi" 18: "mercredi" 19: "jeudi" 20: "vendredi" 21: "samedi" 22: "dimanche" 23: "lundi" 24: "mardi" 25: "mercredi" 26: "jeudi" 27: "vendredi" 28: "samedi" 29: "dimanche" 30: "lundi" length: 31
- Prend en entrée une date et la liste des jours de la semaine.Citation:
Elle consiste, pour une date donnée, à effectuer dans l'ordre les ajouts ou cumuls suivants (en ne retenant que les restes dans la division par 7) :
La somme du nombre formé par les deux derniers chiffres de l'année plus la partie entière de son quart.
Une correction séculaire évaluée à la 6 4 2 et 0 (0 à partir de 1900, 6 à partir de 2000, 4 à partir de 2100, 2 à partir de 2200 et à nouveau 0 à partir de 2300... etc. mais aussi 0 à partir de 1582 année de création du calendrier, 6 à partir de 1600, ... ).
Le décalage du mois qui répond à la suite 033 614 625 035 (on ajoute 0 en janvier, 3 en février, etc... 5 en décembre).
Le quantième du jour. (ndlr:le tout modulo 7 !)
- Donne en sortie le jour.
Exemple :
- Aujourd'hui 23 aout 2013, nous sommes vendredi
- Le 14 juillet 1789, c'était mardi
Ce script est censé fonctionner de 1582 (date de l'établissement du calendrier Grégorien) à perpétuité ! (142 caractères)
On s'affranchit donc totalement du constructeur de Date pour récupérer le jour.
Appliqué à l'énoncé. En 212 caractères ... j'ai explosé le tweet :DCode:
1
2
3 (function(d,t,y){ y=d.getFullYear();return t[(y%100*1.25+'0642'[(y/100-15)%4^0]*1+'033614625035'[d.getMonth()]*1+d.getDate()-!!((!(y%4)&&y%100)||!(y%400)))%7^0] })(new Date(1789,6,14),['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']);
On remplace donc d.getDay() par notre fonction Wikipedesque
Code:
1
2
3 (function(y,t,r,i,d,j,s){ for(r=i=[];i<12;r[i++]=s)for(j=s=[];+d!=+new Date(y,i+1,0);s[j++]=t[(y%100*1.25+'0642'[(y/100-15)%4^0]*1+'033614625035'[d.getMonth()]*1+d.getDate()-!!((!(y%4)&&y%100)||!(y%400)))%7^0])d=new Date(y,i,j+1);return r })(2000,['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']);
A suivre : Wikipedia anglais semble proposer un autre algo
Je mets :plusser: pour l'effort de recherche, mais ça a un intérêt limité sachant que Date fait tout à notre place :mrgreen:
Je suis d'accord, mais il faut avouer que l'algo est fun :)
Lorsque j'ai posé le défi j'avais aussi en tête que la fonction retourne un code HTML pour la mise en page de la réponse :pastaper:
Le code HTML d'un tableau retourné par une fonction de 140 caractères ? Mais c'est gros comme une maison 8O
Le créateur de JSFuck a remis ça : World
Classe !
Wow c'est sacrément cool. Il a même réussi à caser son nom de domaine dans la source au milieu du globe. Chapeau bas, impossible de rivaliser avec ça
Il a présenté ça en guise de slide final à la "JSConf EU 2013" hier soir.
Pas encore trouvé le slide ni la rediff' (edit : pas encore en ligne)
edit: Il s'est inspiré de ça