Curriculum and Labs for Engineering Education

cancel
Showing results for 
Search instead for 
Did you mean: 

Challenge mathématique #38 : La recherche des nombres heureux

100 h.jpg Heureux ?

 

Nouveau challenge pour Novembre !

 

Défions nos compétences LabVIEW sur un nouveau petit algorithme. Savez-vous que les nombres peuvent avoir des sentiments et être heureux ou malheureux ? Pour savoir si un nombre est « heureux », il faut calculer la somme des carrés de ses chiffres, et recommencer avec le résultat. Si on finit par tomber sur 1, alors le nombre est heureux. Sinon, il est malheureux.

 

Par exemple, le nombre 109 est heureux. En effet :
109 → 12+02+92 = 82 → 82+22 = 68 → 62+82 = 100 → 12+02+02 = 1

 

Par contre, 106 est malheureux. En effet :
106 → 12+02+62 = 37 → 32+72 = 58 → 52+82 = 89 → 8²+9² = 145 → 1²+4²+5² = 42 → 4²+2² = 20 → 2²+0² = 4 → 4² = 16 → 1²+6² = 37...

Le nombre 37 a déjà été obtenu, en début de séquence, on sait donc que la série 37, 58, 89, 145, 42, 20, 4, 16 va se répéter indéfiniment. Le nombre 1 ne sera donc jamais atteint.

 

Challenge :

Ecrire un code LabVIEW qui possède en entrée deux commandes numériques mini et maxi. Les valeurs d’entrée seront des entiers inférieurs à 10000. Il faut répondre en donnant la liste des nombres heureux compris entre ces deux bornes (incluses), par ordre croissant. Le résultat sera à donner dans un indicateur sous forme de chaine de caractères avec une parenthèse au début et fin et séparé par des virgules et un espace avant les chiffres (voir l'exemple ci-dessous)

 

Exemple :

Si les bornes données étaient mini=109 et maxi=141, il faudrait répondre en indiquant : (109, 129, 130, 133, 139)

 

 

A gagner :

Ce mois-ci, un Livre LabVIEW de 2eme édition (442 pages).

 

 

Pour gagner, vous pouvez m’envoyer vos codes Votre_pseudo_ch38.vi à emmanuel.roset@ni.com, je les publierai en fin de mois. Publiez également « code envoyé » sur la communauté afin de me permettre de vérifier dans les emails et ne pas perdre de codes. Le gagnant sera tiré au sort en fin de mois parmi les candidats qui auront un code qui fonctionne.

 

N’hésitez pas également à communiquer et échanger en cours de challenge !

Comments
FLBPeriat
Member
Member
on

Code envoyé

emmanuel-fr
Member
Member
on

Merci et bravo car le mois n'est pas encore fini avec le défi précédent !!

emmanuel-fr
Member
Member
on

Voici ce que cela doit donner en face-avant avec les valeurs d'exemple :

nbr heureux.jpg

Didier_Bleses
Member
Member
on

Code envoyé

ouadji
Trusted Enthusiast
Trusted Enthusiast
on
Bilsix
NI Employee (retired)
on

Code envoyé.

Bilsix.
Bilsix
NI Employee (retired)
on

J'ai pour le moment du mal à passer sous la seconde et demi de calcul pour 1 million de chiffres...

Bilsix.
Michael.C
Active Participant
Active Participant
on

Code envoyé

POur ma part, je suis à 1813ms pour 1 000 000 de chiffres, j'ai pas encore fait l'optimisation .
Au moins j'aurai participé à défaut de faire mieux ^^

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
Didier_Bleses
Member
Member
on

Bilsix et Michael.C, vous donnez des temps pour la recherche des nombres heureux?

Ca m'a titillé, vu que je me restraignais à max <10000

Ma premiere solution, avec certaines optimisations : min=0 à max=1 000 000 en 1610 ms.

Et j'ai une idée que je vais tester demain qui devrait être plus rapide (moins de 200 ms d'après un premier test).

Sebastien_D
Member
Member
on

Code envoyé ! Si jamais il faut des idées pour les prochains challenges, je propose la suite des nombres chanceux qui a l'air marrante aussi https://fr.wikipedia.org/wiki/Nombre_chanceux

emmanuel-fr
Member
Member
on

Merci Sébastien, je suis preneur des sugestions de défis en effet, je les mets dans une liste. Nous verrons, en fonction des possibilités et aussi de la difficulté (pas trop dur ni trop facile). En tout cas il faut à chaque fois une surprise

lulu44
Active Participant
Active Participant
on

code envoyé

Cordialement
L.MICOU
Bilsix
NI Employee (retired)
on

C'est exactement ça Didier, ce sont les temps de calcul pour l'obtention en liste des nombres heureux
Je suis à 1,597s pour min=0 et max=1million, mais je peux encore un tout petit peu optimiser...

Bilsix.
Michael.C
Active Participant
Active Participant
on

Bon je suis rendu à 1,06 s pour min=0 et max=1million

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
Didier_Bleses
Member
Member
on

Ok, cool, alors je tente de franchir la barre des 100 .......... ms ( pour l'instant, 114ms)

Didier_Bleses
Member
Member
on

Voila, le code du million est envoyé.

environ 64 ms sur mon core i7

Michael.C
Active Participant
Active Participant
on

Ah oui joli J'ai le sentiment qu'il y a beaucoup mieux que ma solution, mais c'est le bordel au taff donc pas le "temps" de me plonger dessus. Après c'est que le début du mois y a encore le temps de passer sur un processeur quantique

EDIT : Trop de faute d'orthographes, ça piquait trop les yeux.

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
Bilsix
NI Employee (retired)
on

Woaaah, 100ms ! Et dire que j'étais carrément heureux d'avoir gagné ma centaine de ms ! (je suis passé à 1,46s...)

C'est vrai que vous avez déjà tous été très rapides lors du Challenge précédent (d'ailleurs, tu m'avais bien aidé Michael).

Je vais étudier vos codes... à la lumière du jour et de la nuit... pour vous rattrapper... et vous dépasser machiaveliquement ! Mouhahaha.

Bonne journée.

Bilsix.
Michael.C
Active Participant
Active Participant
on

Bon le travail continu pour ma part, je reviens à la case départ, je viens de réaliser que j'avais mal compris le sujet ....

J'avais bêtement considéré que sortie de 1, tout chiffre  inférieur à 10 avait obligation d'être malheureux .......

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
Bilsix
NI Employee (retired)
on

J'ai l'impression que la clé de la vitesse, c'est de savoir chercher dans un grand tableau rapidement...
Finalement, pour savoir si un nombre est malheureux, il suffit:
1) de faire une première somme des carrés des chiffres

2) de regarder si c'est == 1

3) si oui, d'arrêter

4) si non, de fouiller dans le tableau des anciennes commes obtenus et de regarder si le nombre y est

5) si oui, d'arrêter

6) si non, de stocker la valeur dans un tableau puis de recommencer.

Je crois que c'est le point 4 qui est le plus lent... Faudrait que je sois un peu plus malin, au lieu de fouiller dans un grand tableau comme un barbare...

Bilsix.
Didier_Bleses
Member
Member
on

Bilsix, ce tableau n'est pas si grand.

Le point 2 et 3 sont inclus dans le point 4 et 5.

Le point 6 est inutile si le tableau est bien géré (<-alerte astuce ici).

Je suis descendu à 50-52 ms. Mais je n'ai pas encore envoyé ce code à Emmanuel-fr, j'ai peur de commencer à le saouler avec mes versions...

J'attendrais la fin du mois au cas ou j'ai une autre idée entre temps.

PhilB58
Active Participant
Active Participant
on

Salut à tous,

après une optimisation de mon code originel qui me donnait .... 19s   pour une recherche jusqu'à 1million, je suis descendu à 304ms.
Core i5-2500 3,3GHz

Je vais bientôt changer d'ordi, je garde ces valeurs en réserve pour tester avec une machine plus puissante

PhilB58
Active Participant
Active Participant
on

Code envoyé

PhilB58
Active Participant
Active Participant
on

Code envoyé ... (nouveau après petite modif, un oubli de ma part )

beno72
Member
Member
on

code envoyé

Alice_M
Member
Member
on

Code envoyé

Michael.C
Active Participant
Active Participant
on

Code renvoyé


Je n'arrive pas à faire mieux que 1,2seconde actuellement, je verrais au moment du résultat comment faire mieux en regardant chez le voisin

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
David-K
Member
Member
on
Code envoyé Mais j'ai pas eu le temps de l'optimiser 😞
Nico_EMC
Member
Member
on

Code envoyé, mais j'ai du mal à passer sous les 100ms (avec un i5)

ghost67
Member
Member
on

fiou juste ^^ overbooker ce mois ci mais

Code envoyé 😄 et je suis loin derrière à 1.8s pour le calcul de 0 à 1M

Bonne soirée

emmanuel-fr
Member
Member
on

Bonjour,

C'est le moment de l'analyse des résultats. J'èspère que vous êtes tous "heureux" Smiley Happy

Alors voici le tableau des participants. Nico_EMC ne souhaite pas concourir pour le Livre LabVIEW, y en a t'il d'autres ?

Sinon, si vous avez envoyé votre code et qu'il n'est pas dans la liste il n'est pas trop tard.

Ensuite nous ferons un tirage au sort avec les chiffres du Loto fdj officiel en fonction du nombre de candidats.

(J'espère que la nouvelle de la communauté interface ne perturbe pas trop de monde, s'il y a un problème faites le moi savoir)

Tout le monde a bon, j'ai remarqué que certains passaient plus de temps sur l'interface et d'autres sur les optimisations ou la documentation. C'est un bon mélange de bonnes pratiques à mettre toutes ensemble ! Publication des codes très bientot

 

 

1 FLBP_ch38 OK
2 bleses_ch38 OK avec zéro à un million quasi instantané (astuces)
3 Challenge_38_ouadji OK avec VI recursif
4 Bilsix_ch38 OK avec interface conviviale
5 Michael.C_ch38 OK
6 CH38_Sebastien_D OK Bien documenté 🙂
7 lulu44_ch38 OK
8 Challenge 38_PhilB58 OK avec le million en moins de 300 ms
9 Beno72_ch38 OK
10 Alice_M_ch38 OK simplicité et rapidité
11 Challenge38_David-K OK
12 ghost67280_defis_38 OK
     
  NicoEMC_ch38 OK avec efficacité

 

 

 

Michael.C
Active Participant
Active Participant
on
Personnellement, je trouve la refonte du site vraiment réussi, et qui apporte une lisibilité accrue. Je n'avais encore jamais participer au Challenge mathématique, car je n'avais pas le réflexe d'aller sur les autres sites. Sinon j'ai hate de voir les codes des autres personnes pour comprendre les différences de performance 🙂
“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
Didier_Bleses
Member
Member
on

Comme le moi dernier, j'ai déja eu le livre donc je ne participe que pour le plaisir.

emmanuel-fr
Member
Member
on

Merci. Donc voici la liste définitive. Il y a 11 candidats pour 49 valeurs. Nous utiliserons le Loto de ce soir avec 4 boules par personnes. Par exemple de 1 à 4 pour FLBP, puis 5 à 8 pour Ouadj etc.. jusqu'à 44.

Bonne chance ! et merci pour tous vos codes (publication dans la foulée)

 

1 FLBP_ch38
2 Challenge_38_ouadji
3 Bilsix_ch38
4 Michael.C_ch38
5 CH38_Sebastien_D
6 lulu44_ch38
7 Challenge 38_PhilB58
8 Beno72_ch38
9 Alice_M_ch38
10 Challenge38_David-K
11 ghost67280_defis_38
emmanuel-fr
Member
Member
on

Résultats du loto d'hier soir dans l'ordre

jour_de_tirage date_de_tirage   boule_1 boule_2 boule_3 boule_4 boule_5 numero_chance
MERCREDI 07/12/2016   5 44 7 2 45

3

 

C'est la boule 5 qui est sortie en premier donc c'est Ouadj qui gagne cette fois-ci !

Merci à tous.

(Suite au changement de format de site, la mise en ligne des codes a un petit soucis mais qui va vite être réglé)

emmanuel-fr
Member
Member
on

Codes publiés en pièce jointe du challenge 38

PhilB58
Active Participant
Active Participant
on

Zut alors, je ne recevais plus de notification de message pour le challenge, j'ai fini par venir y jeter un oeil!

Sans doute le changement d'interface!?!

ouadji
Trusted Enthusiast
Trusted Enthusiast
on

oups ... Smiley Surprised ... j'ai gagné le livre, super !   Smiley Happy

 

Je suppose qu'il s'agit du livre "Programmation et application" de Cottet-Pinard, 2ème éd. ...

Mais ... j'ai déjà ce livre (la 3eme éd.)

C'est donc avec plaisir que je cède ce livre au "suivant" ... boule 44, en principe c'est "ghost67280".

 

 

ghost67
Member
Member
on

Trop cool merci c'est noel avant l'heure 😄

emmanuel-fr
Member
Member
on

Merci Ouadji, alors on fait comme ça Smiley Happy