FU2 to fr.comp.sys.mac.programmation
Bonjour à tous,
Une pensée pour les sinistrés qui ont d'autres chats à fouetter que de
traîner sur Usenet.
Pour les autres habitués de focomosX, un petit casse-tête pour essayer
de réveiller les neurones engourdis.
Bon, je sais c'est de la programmation, d'où le suivi sur
fr.comp.sys.mac.programmation
Voilà le défi
Quelques mois de ça, il y a avait eu une enfilade assez nourrie à propos
du tirage du Loto.
Une des questions en rapport étant : la fonction aléatoire ("Random")
fournie par Applescript en standard, l'est-elle suffisamment, ou va-t-on
trouver certains nombres sortir significativement plus souvent que
d'autres ?
Pour tirer ça au clair, une seule manière : faire un très grand nombre
de tirages, disons 100 000, voire un million, plusieurs fois, et
comparer les occurences de chaque nombre sorti.
Donc la question lancée est : écrire le script (en pure AppleScript)
capable de faire ces 100 000 tirages, compter la sortie de chaque nombre
de 1 à 48 et le temps total mis pour ça. Le plus rapide (indépendamment
de la machine) a gagné.
Que des fonctions basiques d'AppleScript, rien d'ésotérique, pas de
commandes externes ou Shell.
Pour pimenter : je suis arrivé à un script qui, sur mon vénérable
MacPro, fait le boulot en 5" pour 100 000 tirages, après des versions
déjà très véloces qui mettaient respectivement 32" et 11" pour faire la
même chose. Peut-on encore améliorer la rapidité ?
Les futés, sont priés de s'affuter ;-)
Bonjour, Joseph-B, le Zarathoustra de fcomox, nous délivre ces paroles :
Pour pimenter : je suis arrivé à un script qui, sur mon vénérable MacPro, fait le boulot en 5" pour 100 000 tirages
Question basique : c'est le script qui te donne le temps mis pour faire ces 100 000 tirages ? Si oui, je ne sais pas faire... Amicalement. -- Michel Vauquois - <http://michelvauquois.free-h.fr> Mais n'allez pas surtout inhiber l'hepta-schisme avant de morpho-morduire le générateur.
Bonjour,
Joseph-B, le Zarathoustra de fcomox, nous délivre ces paroles :
Pour pimenter : je suis arrivé à un script qui, sur mon vénérable
MacPro, fait le boulot en 5" pour 100 000 tirages
Question basique : c'est le script qui te donne le temps mis pour faire
ces 100 000 tirages ? Si oui, je ne sais pas faire...
Amicalement.
--
Michel Vauquois - <http://michelvauquois.free-h.fr>
Mais n'allez pas surtout inhiber l'hepta-schisme avant de
morpho-morduire le générateur.
Bonjour, Joseph-B, le Zarathoustra de fcomox, nous délivre ces paroles :
Pour pimenter : je suis arrivé à un script qui, sur mon vénérable MacPro, fait le boulot en 5" pour 100 000 tirages
Question basique : c'est le script qui te donne le temps mis pour faire ces 100 000 tirages ? Si oui, je ne sais pas faire... Amicalement. -- Michel Vauquois - <http://michelvauquois.free-h.fr> Mais n'allez pas surtout inhiber l'hepta-schisme avant de morpho-morduire le générateur.
michel.vauquois
M.V. wrote:
Pour pimenter : je suis arrivé à un script qui, sur mon vénérable MacPro, fait le boulot en 5" pour 100 000 tirages
Tu aurais dû diapublier ton article sur fcomox et fcsm.programmation. J'ai fait un script pourtant très court (vieux MBP)mais ça prend environ 20 secondes pour 100 000 tirages ! -- Michel Vauquois <http://michelvauquois.free-h.fr>
M.V. <michel.vauquois@invalid.orage.fr> wrote:
> Pour pimenter : je suis arrivé à un script qui, sur mon vénérable
> MacPro, fait le boulot en 5" pour 100 000 tirages
Tu aurais dû diapublier ton article sur fcomox et fcsm.programmation.
J'ai fait un script pourtant très court (vieux MBP)mais ça prend environ
20 secondes pour 100 000 tirages !
--
Michel Vauquois
<http://michelvauquois.free-h.fr>
Pour pimenter : je suis arrivé à un script qui, sur mon vénérable MacPro, fait le boulot en 5" pour 100 000 tirages
Tu aurais dû diapublier ton article sur fcomox et fcsm.programmation. J'ai fait un script pourtant très court (vieux MBP)mais ça prend environ 20 secondes pour 100 000 tirages ! -- Michel Vauquois <http://michelvauquois.free-h.fr>
lma
Joseph-B wrote:
Joseph B wrote : Pour pimenter : je suis arrivé à un script qui, sur mon vénérable MacPro, fait le boulot en 5" pour 100 000 tirages, après des versions déjà très véloces qui mettaient respectivement 32" et 11" pour faire la même chose. Peut-on encore améliorer la rapidité ? Les futés, sont priés de s'affuter ;-)
Pour pimenter : je suis arrivé à un script qui, sur mon vénérable
MacPro, fait le boulot en 5" pour 100 000 tirages, après des versions
déjà très véloces qui mettaient respectivement 32" et 11" pour faire la
même chose. Peut-on encore améliorer la rapidité ?
Les futés, sont priés de s'affuter ;-)
Joseph B wrote : Pour pimenter : je suis arrivé à un script qui, sur mon vénérable MacPro, fait le boulot en 5" pour 100 000 tirages, après des versions déjà très véloces qui mettaient respectivement 32" et 11" pour faire la même chose. Peut-on encore améliorer la rapidité ? Les futés, sont priés de s'affuter ;-)
590 - 586 = 4 centièmes de secondes pour 100 000 tirages, qui dit mieux ? Bon je sors, c'est de l'Objective-C ;-)
Ouais, c'est rien que d'la triche ;-) -- J. B.
josephb
M.V. a écrit,
Tu aurais dû diapublier ton article sur fcomox et fcsm.programmation.
À chaque fois j'oublie le cross-post de départ :-/
J'ai fait un script pourtant très court (vieux MBP)mais ça prend environ 20 secondes pour 100 000 tirages !
Oui, c'est le script qui donne le temps pour faire les tirages et le décompte. AppleScript ne donne pas les 1/100° de secondes, alors c'est à la louche en secondes juste pour voir le temps mis pour faire les 100 000 boucles on peut faire ça ∞∞∞∞∞∞∞∞∞∞∞∞∞ set t0 to (time of (current date)) --start timer repeat 100000 times set n to (random number from 1 to 48) end repeat set totalTime to (((time of (current date)) - t0) & " sec") as string --stop timer display alert "Temps écoulé : " & totalTime ∞∞∞∞∞∞∞∞∞∞∞∞ J'ose espérer que ça va pas mettre 20" sur ton MBP (4" sur le macPro de 2006) mais ça ne donne pas la répartition des sorties par nombre ! -- J. B.
M.V. <michel.vauquois@invalid.orage.fr> a écrit,
Tu aurais dû diapublier ton article sur fcomox et fcsm.programmation.
À chaque fois j'oublie le cross-post de départ :-/
J'ai fait un script pourtant très court (vieux MBP)mais ça prend environ
20 secondes pour 100 000 tirages !
Oui, c'est le script qui donne le temps pour faire les tirages et le décompte.
AppleScript ne donne pas les 1/100° de secondes, alors c'est à la louche en secondes
juste pour voir le temps mis pour faire les 100 000 boucles on peut faire ça
∞∞∞∞∞∞∞∞∞∞∞∞∞
set t0 to (time of (current date)) --start timer
repeat 100000 times
set n to (random number from 1 to 48)
end repeat
set totalTime to (((time of (current date)) - t0) & " sec") as string --stop timer
display alert "Temps écoulé : " & totalTime
∞∞∞∞∞∞∞∞∞∞∞∞
J'ose espérer que ça va pas mettre 20" sur ton MBP (4" sur le macPro de 2006)
mais ça ne donne pas la répartition des sorties par nombre !
Tu aurais dû diapublier ton article sur fcomox et fcsm.programmation.
À chaque fois j'oublie le cross-post de départ :-/
J'ai fait un script pourtant très court (vieux MBP)mais ça prend environ 20 secondes pour 100 000 tirages !
Oui, c'est le script qui donne le temps pour faire les tirages et le décompte. AppleScript ne donne pas les 1/100° de secondes, alors c'est à la louche en secondes juste pour voir le temps mis pour faire les 100 000 boucles on peut faire ça ∞∞∞∞∞∞∞∞∞∞∞∞∞ set t0 to (time of (current date)) --start timer repeat 100000 times set n to (random number from 1 to 48) end repeat set totalTime to (((time of (current date)) - t0) & " sec") as string --stop timer display alert "Temps écoulé : " & totalTime ∞∞∞∞∞∞∞∞∞∞∞∞ J'ose espérer que ça va pas mettre 20" sur ton MBP (4" sur le macPro de 2006) mais ça ne donne pas la répartition des sorties par nombre ! -- J. B.
michel.vauquois
Re-bonjour, Émergeant des brumes évanescentes de l'alcool, Joseph-B suggère :
J'ose espérer que ça va pas mettre 20" sur ton MBP (4" sur le macPro de 2006)
17 secondes pour les 100 000 boucles !
mais ça ne donne pas la répartition des sorties par nombre !
Avec la répartition : Temps écoulé : 20 sec 1 : 2069 2 : 2155 3 : 2173 4 : 2124 5 : 2109 6 : 2067 7 : 2033 8 : 2032 9 : 2106 10 : 2122 11 : 2102 12 : 2064 13 : 2096 14 : 2178 15 : 2118 16 : 2081 17 : 2021 18 : 2038 19 : 2070 20 : 2022 21 : 2104 22 : 2071 23 : 2094 24 : 2106 25 : 2071 26 : 2038 27 : 2080 28 : 2018 29 : 2097 30 : 2009 31 : 2110 32 : 2040 33 : 2099 34 : 2109 35 : 2080 36 : 2036 37 : 2129 38 : 2070 39 : 2110 40 : 2078 41 : 2102 42 : 2108 43 : 2093 44 : 2114 45 : 2119 46 : 2016 47 : 2113 48 : 2006 48 : 2006 Mon script : ++++++++++ set myLoto to {} set t0 to (time of (current date)) --start timer set listeCompt to {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} repeat 100000 times set tempNb to random number from 1 to 48 set item tempNb of listeCompt to ((item tempNb of listeCompt) + 1) end repeat set totalTime to (((time of (current date)) - t0) & " sec") as string --stop timer -- display alert "Temps écoulé : " & totalTime repeat with j from 1 to 48 set tempResultat to (j & " : " & item j of listeCompt) as text copy tempResultat to the end of myLoto end repeat set text item delimiters to {return} return "Temps écoulé : " & totalTime & return & myLoto ++++++++++ Amicalement. -- Michel Vauquois - <http://michelvauquois.free-h.fr> Monsieur, même avec la meilleure volonté du monde, je ne peux pas ultra-repléter le bulbo-bouclier car le détonateur résistant est sur le point de moribaffer l'émission basse vitesse !
Re-bonjour,
Émergeant des brumes évanescentes de l'alcool, Joseph-B suggère :
J'ose espérer que ça va pas mettre 20" sur ton MBP (4" sur le macPro de 2006)
17 secondes pour les 100 000 boucles !
mais ça ne donne pas la répartition des sorties par nombre !
Mon script :
++++++++++
set myLoto to {}
set t0 to (time of (current date)) --start timer
set listeCompt to {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
repeat 100000 times
set tempNb to random number from 1 to 48
set item tempNb of listeCompt to ((item tempNb of listeCompt) + 1)
end repeat
set totalTime to (((time of (current date)) - t0) & " sec") as string --stop timer
-- display alert "Temps écoulé : " & totalTime
repeat with j from 1 to 48
set tempResultat to (j & " : " & item j of listeCompt) as text
copy tempResultat to the end of myLoto
end repeat
set text item delimiters to {return}
return "Temps écoulé : " & totalTime & return & myLoto
++++++++++
Amicalement.
--
Michel Vauquois - <http://michelvauquois.free-h.fr>
Monsieur, même avec la meilleure volonté du monde, je ne peux pas ultra-repléter le bulbo-bouclier car le détonateur résistant est sur le point de moribaffer l'émission
basse vitesse !
Pour 1 000 000 de tirages : Temps écoulé : 242 sec 1 : 20838 2 : 20819 3 : 20651 4 : 21009 5 : 20730 6 : 20775 7 : 20558 8 : 21046 9 : 20744 10 : 20943 11 : 20819 12 : 20727 13 : 20877 14 : 20841 15 : 20677 16 : 20899 17 : 20887 18 : 21054 19 : 20712 20 : 20848 21 : 20797 22 : 20721 23 : 20911 24 : 21025 25 : 20910 26 : 20929 27 : 20560 28 : 20943 29 : 20842 30 : 20915 31 : 20770 32 : 20674 33 : 20914 34 : 20976 35 : 20882 36 : 20804 37 : 20925 38 : 20633 39 : 20717 40 : 20917 41 : 20938 42 : 20977 43 : 20699 44 : 20888 45 : 20731 46 : 20884 47 : 20908 48 : 20756 Finalement le test est plutôt concluant quant à la fiabilité d'un tirage au sort effectué de cette manière. Amicalement. -- Michel Vauquois - <http://michelvauquois.free-h.fr> Aux armes ! Ne nous laissons pas détecter par la force de l'étranger !
josephb
M.V. nous a émerveillés par cette prose :
17 secondes pour les 100 000 boucles !
mais ça ne donne pas la répartition des sorties par nombre !
Avec la répartition : Temps écoulé : 20 sec Mon script :
Compliments ! et pas mieux chez moi. Tu n'es pas tombé dans le piège de créer la liste des 100 000 nombres sortis ;-) La seule chose qui pourrait être (esthétiquement) améliorée est la génération de ta listeCompt {} set listeCompt to {} repeat 48 times copy 0 to the end of listeCompt end repeat Tout compte fait, il est plutôt rapide mon vieux macPro sous Lion ;-) Amicalement, -- J. B. Voici le diagnostic balistique dont il est temps d'ana-signaler le theta-syntagme mécanique sans oublier de moduler le non-rayon phasé.
M.V. nous a émerveillés par cette prose :
17 secondes pour les 100 000 boucles !
> mais ça ne donne pas la répartition des sorties par nombre !
Avec la répartition :
Temps écoulé : 20 sec
Mon script :
Compliments ! et pas mieux chez moi.
Tu n'es pas tombé dans le piège de créer la liste des 100 000 nombres
sortis ;-)
La seule chose qui pourrait être (esthétiquement) améliorée est la
génération de ta listeCompt {}
set listeCompt to {}
repeat 48 times
copy 0 to the end of listeCompt
end repeat
Tout compte fait, il est plutôt rapide mon vieux macPro sous Lion ;-)
Amicalement,
--
J. B.
Voici le diagnostic balistique dont il est temps d'ana-signaler le
theta-syntagme mécanique sans oublier de moduler le non-rayon phasé.
mais ça ne donne pas la répartition des sorties par nombre !
Avec la répartition : Temps écoulé : 20 sec Mon script :
Compliments ! et pas mieux chez moi. Tu n'es pas tombé dans le piège de créer la liste des 100 000 nombres sortis ;-) La seule chose qui pourrait être (esthétiquement) améliorée est la génération de ta listeCompt {} set listeCompt to {} repeat 48 times copy 0 to the end of listeCompt end repeat Tout compte fait, il est plutôt rapide mon vieux macPro sous Lion ;-) Amicalement, -- J. B. Voici le diagnostic balistique dont il est temps d'ana-signaler le theta-syntagme mécanique sans oublier de moduler le non-rayon phasé.
g4fleurot
Bonsoir, Le sympathique M.V. nous a écrit :
Pour 1 000 000 de tirages : Temps écoulé : 242 sec
Salutations.
--
Gérard FLEUROT [<g4fleurot@free.fr> plus un] vous informe que :
Saperlipopette, la crypto-chambre stellaire ne peut pas scanner le
sub-cristal valvulé ! Nous allons être obligés de tri-calcifrer
l'incursion résistante...
Pour 1 000 000 de tirages : Temps écoulé : 242 sec Finalement le test est plutôt concluant quant à la fiabilité d'un tirage au sort effectué de cette manière.
En effet, la caractéristique pseudo-aléatoire ne permet de mettre en évidence un biais d'aléa flagrant. Ici, 50 sec pour 1 000 000 tirages Amicalement -- J. B.
M.V. <michel.vauquois@invalid.orage.fr> a écrit,
Pour 1 000 000 de tirages :
Temps écoulé : 242 sec
Finalement le test est plutôt concluant quant à la fiabilité d'un tirage
au sort effectué de cette manière.
En effet, la caractéristique pseudo-aléatoire ne permet de mettre en
évidence un biais d'aléa flagrant.
Ici, 50 sec pour 1 000 000 tirages
Pour 1 000 000 de tirages : Temps écoulé : 242 sec Finalement le test est plutôt concluant quant à la fiabilité d'un tirage au sort effectué de cette manière.
En effet, la caractéristique pseudo-aléatoire ne permet de mettre en évidence un biais d'aléa flagrant. Ici, 50 sec pour 1 000 000 tirages Amicalement -- J. B.