Bonjour,
C'est parti pour le deuxième challenge !
Encore une fois, on va jouer avec des nombres et les règles sont simples :
Pour une fourchette donnée comprise entre 0 et un maximum il faut déterminer par programmation le nombre de nombres qui possèdent au moins deux digits identiques. Exemple: 11, 223, 3334, 12340560 ...
On travail sur des nombres entiers bien évidement.
Les résultats attendus sont le nombre de nombres à digits identiques et le temps d'exécution.
Le maximum sera compris entre 10 000 000 et 50 000 000.
Il est interdit d'utiliser des tableaux pré-enregistré de résultats pour des gammes données. Je ferais des tests sur des valeurs au hasard pour vérifier que le code s'adapte bien. Si le résultat est incorrect, le code sera rejeté du classement final.
Par contre, il n'est pas obligatoire de vérifier chaque nombre.
Exemple :
Lorsque mon programme arrive à la valeur 1000 a examiner, j'ai une série de digits identiques qui précède un autre digit restant 1000. Donc je n'ai pas besoin de vérifier 1001, 1002...1009 et incrémenter directement le deuxième digit identique mais il faut penser à compter les nombres passés et vérifier qu'on incrémente pas au delà du maximum.
Pour info entre :
- 0 et 10 il y a 0 nombre avec des digits qui se répètent
- 0 et 50 il y a 4 nombres avec des digits qui se répètent (11, 22, 33, 44)
- 0 et 1000 il y a 262 nombres avec des digits qui se répètent
- 0 et 10000 il y en a 4726
Le benchmark se fera fait de la manière suivante :
On ne mesure donc le temps d'exécution du calcul et du chargement des VIs (. On fera une moyenne sur 10 mesures.
C'est le temps moyen qui sera pris en compte pour les résultats.
Le benchmark sera fait de manière à recharger le VI principal à chaque appel. de cette façon, impossible de garder en mémoire les valeurs précédentes du VI.
Pour celà, merci de suivre les consignes suivantes (c'est surtout pour m'éviter de le faire pour chacun de vous) :
- appeler son vi principal : main_votrepseudo.vi
- Mettre une commande de type de I32 en entrée connecté en haut à gauche sur le modèle de connecteur par défaut avec comme nom : Maximum
- Mettre un connecteur en sortie de type I32 connecté en haut à droite sur le modèle de connecteur par défaut avec le nom : Nb Nombres
Pour éviter les problèmes d'antivirus qui bloquent les pièces jointes et parce que tout le monde n'a pas l'application builder, on fera les benchs en mode développement.
Pour soumettre votre code, postez un petit message dans les réponses, et envoyer moi votre code par email directement : maxime.renaud@ni.com. J'ai pas trouvé mieux pour le moment.
La comparaison se fera sur le même PC pour tout le monde avec une version française de LabVIEW 2012 à jour.
La date limite pour participer est le 04 janvier 2013 (comme ca vous avez de quoi vous occuper pendant les vacances de Noël). Je ferais les benchmarks, la semaine suivante.
Voila, je crois que j'ai tout dit, mais n'hésitez pas si vous avez des questions.
Bonne chance à tous.
Edit du 03/12/2012 :
L'objectif de ce challenge est de développer des applications optimisées et de découvrir de nouvelle méthode ou approche pour programmer des applications LabVIEW. Il n'y a rien d'autre à gagner (pour le moment du moins) que la reconnaissance des autres développeurs de la communauté.
Pour ce deuxième challenge, il est important de faire un code qui s'adapte à n'importe quelle valeure du maximum qui ne dépassera pas 50 000 000 (entre 100 et 50 000 000). La comparaison des performances sera effectuée dans une fourchette comprise entre 10 000 000 et 50 000 000. Je regarde les codes sources et je rappelle que dans le réglement il est indiqué qu'il faut déterminer le nombre de digits de nombres contenant des digits identiques dans la fourchette donnée.
Modification de la méthode de Benchmark.
Merci
Résultats (09/01/2013) :
Tout d'abord bonne année 2013 et merci à tous les participants.
Les résultats sont tombés :
Le gagnant de ce deuxième challenge est donc ozimmer.
micael_ manque de peut de garder sont titre, mais le temps moyen est à la faveur du "magicien d'OZ"
yledieu n'est pas loin derrière
Moi-même et nacerito complètent le classement.
Les VIS sont disponibles dans les archives en pièces jointes. J'ai fait un enregistrement en version 2009 de LabVIEW pour ceux qui n'auraient pas la dernière version de LabVIEW, par contre, je n'ai pas vérifié que cela fonctionne en LabVIEW 2009, mais je ne pense pas qu'il y ait de problèmes.
Merci à tous, et à bientôt pour un nouveau challenge.
Maxime R.
CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
CTA - Certified TestStand Architect / Architecte TestStand Certifié
Ben oui, je propose que chacun le fasse de son côté et le publie comme ça on aura 15 versions différentes plus ou moins bien implémentées/optimisées et ça donnera à NI une bonne raison (ou plutôt 15 bonnes raisons) de ne pas le mettre dans le vi.lib!
Ou alors on peut demander à NI de faire une primitive ça.
Ca me faire souvenir le rgrettable épisode du "Randomize 1D array"...
We have two ears and one mouth so that we can listen twice as much as we speak.
Epictetus
Antoine Châlons a écrit:
Ca me faire souvenir le rgrettable épisode du "Randomize 1D array"...
C'est quoi cet épisode ?
c'est un peu long à expliquer, mais ça commence là : http://forums.ni.com/t5/LabVIEW-Developers-Feature/Now-available-for-download-quot-Randomize-1D-Arra...
ça continue là : http://forums.ni.com/t5/LabVIEW-Developers-Feature/Now-available-for-download-quot-Randomize-1D-Arra...
et je ne retrouve plus la fin...
We have two ears and one mouth so that we can listen twice as much as we speak.
Epictetus
Salut Yohann,
Effectivement, il y a des chances que l'utilisation d'une primitive soit plus efficace que la fonction que tu as utilisé qui fait appelle à une dll. C'est aussi l'intérêt de ce challenge, on échange et on apprend.
Après ton résultat n'été pas non plus des plus mauvais.
Maxime
Maxime R.
CLA - Certified LabVIEW Architect / Architecte LabVIEW Certifié
CTA - Certified TestStand Architect / Architecte TestStand Certifié