Project Euler

J’ai pas été clair, mais je disais que ta solution du 67, en référence à ton poste là bas, était inutilement compliquée.
Je te laisse à tes considérations sur les retournements corporels relatifs au 69 :slight_smile:

Ha oui, bah c’est pas comme si j’avais implemente le Dijkstra moi meme, j’ai juste ecrit un truc pour charger le triangle, ca appelle une fonction RunDijkstra et ca affiche le resultat :slight_smile: Tuer les mouches avec une bombe au napalm si ca tout le travail a faire c’est appuyer sur un bouton pour lacher la bombe et que la mouche est morte au final, ca me va, j’ai pas fait dans l’artistique c’etait pas le but.

Quand c’est l’ordinateur qui travaille ca me gene pas: vu le temps que j’y ai passe dessus, au final, moi je trouve ca utilement simple hehe.

Hep, je viens troubler quelques instants ce temple du gros cerveau pour vous poser une p’tite question qui tient plus de l’anglais que du reste.
C’est dans la problème 2, je comprend pas ce qu’il me demande par « all the even-valued terms » comme dans « Find the sum of all the even-valued terms in the sequence which do not exceed four million. » Enfait là j’ai la somme de tous les termes de la suite de Fibomachin en dessous de 4 000 000 mais c’est pas ça.

Pour situer un peu, je suis pas programmeur, j’étudie même pas dans les maths ou l’info et encore moins dans les science dure, c’est juste que j’aime les énigme. Donc pardonnez mes « Fibomachin » :slight_smile:

=> Merci MadGnome

Faut que tu sommes les nombres pairs.

Merci la zone, vous venez de me faire perdre ma fin d’après midi / début de soirée… 16 résolus \o/

Faudra que j’envoie ça à mon prof de math qu’on en fasse un peu, tien. Il adore ce genre de trucs.

(“et alors si on est au rang m et qu’on veut un nombre pair on va au… au… et bien ?! vous dormez ?!”)

Non, mais je n’en sais rien :slight_smile:

(il y a le contexte du problème aussi ; mais c’est une sombre histoire de nombres pars 2p et nombres impairs 2p+1 d’où blablabla etc.)

(la prépa B/L, une grande folie : programme de mathématiques des prépa ECS/HEC voie scientifique + programme d’hypokhâgne un poil raccourci + grosse tartine de sciences sociales. Que du bonheur.)

Putain mais trop trop merci les gars…
Le truc bien additif, et bien “gouffre à temps”…
trop BRAVO…

Bon, du coup aujourd’hui, après 4h de labeur (heureusement qu’il est tard et que chuis vanné d’ailleurs sinon je sais pas comment j’aurais décroché) chuis venu à bout des 1 à 20 + 25 + 67.
A grand coup de java et de ruby.

A chaque fois, le cœur balance entre la brutalité et l’élégance.

ah, au fait, mon profil: Payetabiere @ Project Euler

rahh les valeurs utiliser dans le problème 3 depasse max integer en c++ , une idée pour contourner le problème ? j’ ai peur qu’utiliser des float nuise a la precision , surtout pour les divisions .

Heu… ben utiliser un double.

oui mais % ne marche pas avec des double a première vue …

Utilise long long, c’est peut-être pas standard mais ça doit exister sur la plupart des compilateurs. Sinon en C il y a fmod() qui a l’air de convenir.

Dans quel langage en bois? Sinon tu l’ecris toi meme %.

c++ pas dot net

Je vais utiliser fmod() , merci :slight_smile: .

Bon je m’y attaque ce soir aussi alors!

en assembleur… :slight_smile:

:slight_smile: Yeppeee, j’ai réussi le 196. L’algo tourne en 1min sur mon Pentium M 1.7GHz. J’avoue que j’ai quand même un peu bien galéré. :crying:

Mon profil à moi.

bon, c’est malin, j’ai fini par m’y mettre aussi …
J’en suis au probleme 6.

Pour l’instant, j’ai surtout utilisé la force brute, sauf pour le 5, ou j’ai utilisé le double du produit des Xi*Xj pour i = 1 à 100 et j = i+1 à 100, car ca se demontre en 2s ^^

Meme pseudo qu’ici

En tout cas, c’est vraiment tres sympa !

bon, fini le 12 eme :slight_smile:
Pour l’instant, c’est assez simple, mais tres marrant ^^

C’est dingue de constater a quel point :
. les log dans la console flingue les perfs :crying: on le sait tous, mais le constater sur de l’algorithmique pure, c’est marrant
. ca compte d’optimiser son algorithme !! meme sur nos machines surpuissantes !

Dans le pb 12, il faut calculer le 1er nombre de la serie « somme des nombres naturel » dont le nombre de diviseur est plus grand que 500.
tout repose bien sur l’algo qui compte le nombre de diviseur, d’autant que le nombre a trouvé est assez grand, et qu’il faut compter le nombre de diviseur pour tout les nombres d’avant.

1er algo : force brute : tu testes tout les nombres de 1 au nombre a tester, et tu incrémentes ton nombre de diviseur quand tu en as un.

public int nombreDeDiviseur(int NbToTest) { int nbDiviseur = 0; for (int i = 1; i <= NbToTest; i++) { if (NbToTest % i == 0) nbDiviseur++; } return (nbDiviseur); }

resultat : 15 minutes pour sortir la solution sur mon E8400.

2eme algo : un peu plus fin. on compte les diviseurs 2 par 2, avec un systeme de borne min / max en fonction du resultat de la division

[code]public int nombreDeDiviseurBest(int NbToTest)
{
int nbDiviseur = 0;
int borneInf = 1;
int borneSup = NbToTest;

		while (borneInf < borneSup)
		{
			if ((NbToTest % borneInf) == 0)
			{
				// on a un multiple, le resultat de la division en est un egalement
				nbDiviseur += 2;
				borneSup = NbToTest / borneInf;
			}
			borneInf++;
		}
		return (nbDiviseur);
	}[/code]

resultat : 1.26 seconde pour sortir la solution …

bilan : Y’a pas photo … 1,5 secondes contre 15 min. Juste le temps de prendre 2min et de réfléchir a un truc un peu plus malin. Et sans avoir besoin d’un niveau enorme de math.

Maintenant imaginons que ce ne soit plus en train de jouer, mais en train d’écrire un algo dans le milieu pro. La plupart du temps, on a pas le temps d’optimiser, et on s’arrete a la premiere version qui marche …
Et apres 10 personnes sur le projet en 5 ans, tu te retrouves avec une usine a gaz qui rame sur des serveurs de folie sans que personne comprenne pourquoi …

on devrait faire plus souvent en ecole d’inge ce genre de petit exo pour mettre en avant qu’il est important de vraiment reflechir a son algo, et pas s’arreter a la premiere version qui marche.
ca eviterai peut etre un peu plus le syndrome « faut une machine plus puissante et plus de ram pour faire tourner le soft »

Pour info, la procedure de resolution qui appelle la fonction de calcul des diviseurs :

[code] public long resolveProblem()
{
int currentTriangleNumber = 1;
int currentTriangleNumberValue = 1;
int targetDiviseur = 500;
int currentDiviseur = 0;

		while (currentDiviseur < targetDiviseur)
		{
			System.Console.WriteLine("TN("+currentTriangleNumber+")="+currentTriangleNumberValue+" -- NbDiviseur="+currentDiviseur);
			currentTriangleNumber++;
			currentTriangleNumberValue += currentTriangleNumber;
			currentDiviseur = nombreDeDiviseurBest(currentTriangleNumberValue);
		}
		System.Console.WriteLine("TN(" + currentTriangleNumber + ")=" + currentTriangleNumberValue + " -- NbDiviseur=" + currentDiviseur);
		return (currentTriangleNumberValue);
	}[/code]

Et un « using System » ca ferait mal aux fesses? :slight_smile: :crying: :cry: