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 !
Code envoyé
Merci et bravo car le mois n'est pas encore fini avec le défi précédent !!
Voici ce que cela doit donner en face-avant avec les valeurs d'exemple :
Code envoyé
code envoyé.
Code envoyé.
J'ai pour le moment du mal à passer sous la seconde et demi de calcul pour 1 million de chiffres...
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 ^^
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).
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
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
code envoyé
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...
Bon je suis rendu à 1,06 s pour min=0 et max=1million
Ok, cool, alors je tente de franchir la barre des 100 .......... ms ( pour l'instant, 114ms)
Voila, le code du million est envoyé.
environ 64 ms sur mon core i7
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.
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.
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 .......
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, 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.
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
Code envoyé
Code envoyé ... (nouveau après petite modif, un oubli de ma part )
code envoyé
Code envoyé
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
Code envoyé, mais j'ai du mal à passer sous les 100ms (avec un i5)
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
Bonjour,
C'est le moment de l'analyse des résultats. J'èspère que vous êtes tous "heureux"
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é |
Comme le moi dernier, j'ai déja eu le livre donc je ne participe que pour le plaisir.
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 |
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é)
Codes publiés en pièce jointe du challenge 38
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!?!
oups ... ... j'ai gagné le livre, super !
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".
Trop cool merci c'est noel avant l'heure 😄
Merci Ouadji, alors on fait comme ça