Project Euler
Par Reda BOUALLOU le lundi 2 juin 2008, 20:54 - Lien permanent
Project Euler (http://projecteuler.net) est un site proposant près de 200 challenges mathématiques à résoudre par des programmes informatiques.
Si les premiers problèmes sont triviaux, la difficulté augmente progressivement et les derniers n'ont été résolus que par une poignée de personne surmotivés. Avis aux amateurs : de nouveaux challenges sont ajoutés régulièrement et à l'instant même où j'écris ce billet le problème 196 vient d'apparaître.
Etant donné que résoudre ces problèmes est une bonne occasion pour tester un nouveau langage, j'ai voulu voir ce que pouvait donner le C# 3.0. Le résultat est plutôt impressionnant.
17 private static void Problem1()
18 {
19 // la somme des nombres inférieurs à 1000 qui sont multiples de 3 et de 5
20 int sum = Enumerable.Range(1, 999).Where(n => ((n % 3) == 0 || (n % 5) == 0)).Sum();
21 Console.WriteLine("Result => {0}", sum);
22 }
23 #endregion
24
25 #region Problem2
26 private static void Problem2()
27 {
28 // la somme des termes de la suite de Fibonacci qui sont inférieurs à 4 millions
29 int sum = Fibonacci().Where(n => ((n % 2) == 0)).TakeWhile(n => (n < 4000000)).Sum();
30 Console.WriteLine("Result => {0}", sum);
31 }
32
33 private static IEnumerable<int> Fibonacci()
34 {
35 int a = 1;
36 int b = 2;
37 while(true)
38 {
39 int tmp = a;
40 yield return tmp;
41 a = b;
42 b = tmp + b;
43 }
44 }
45 #endregion
46
47 #region Problem6
48 private static void Problem6()
49 {
50 // le carré de la somme moins la somme des carré... mais est-ce bien la peine de le commenter ^^
51 int difference =
52 Enumerable.Range(1, 100).Sum().Square() - Enumerable.Range(1, 100).Select(i => i.Square()).Sum();
53
54 Console.WriteLine(difference);
55 }
56
57 private static int Square(this int n)
58 {
59 return (int)Math.Pow(n, 2);
60 }
61 #endregion
62
63 #region Problem9
64 private static void Problem9()
65 {
66 // trouver le triplet pythagoricien pour lequel a + b + c = 1000
67 var triplet = (from i in Enumerable.Range(1, 999)
68 from j in Enumerable.Range(i + 1, 999 - i)
69 let k = 1000 - i - j
70 where i.Square() + j.Square() == k.Square()
71 select new { A = i, B = j, C = k }).First();
72
73 Console.WriteLine("a={0}, b={1}, c={2}", triplet.A, triplet.B, triplet.C);
74 }
75 #endregion
PS : si ça en intéresse certains, j'ai la solution des 10 premiers problèmes en C# 3.0.
Commentaires
Salut je trouve ton blog vraiment interessante. Je suis en train d'apprendre la méthode linq de c#.
Si tu aurais la gentillesse de m'envoyer les 10 premiers problémes en c#, je te serais vraiment reconnaissant.
Ton blog m'a bien aidé. Je suis aussi intéressé par les 10 premiers problèmes en C#. Si tu as le temps j'aimerais bien que tu me les envoie.
Merci d'avance.
Bonjour,
J'aimerai en savoir un peu plus.
Pouvez-vous me contacter par mail.
D'avance Merci
Eva ATLAN