Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pour se réveiller

33 réponses
Avatar
josephb
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 ;-)

"5 sec
1: 2102
2: 2089
3: 1990
4: 2072
5: 2085
6: 2152
7: 2032
8: 2040
9: 2073
10: 2087
11: 2120
12: 2097
13: 2095
14: 2114
15: 2046
16: 2145
17: 2052
18: 2073
19: 2106
20: 2132
21: 2092
22: 2032
23: 2079
24: 1990
25: 2025
26: 2117
27: 2045
28: 2118
29: 2038
30: 2082
31: 2073
32: 2108
33: 2031
34: 2168
35: 2137
36: 2091
37: 1998
38: 2147
39: 2029
40: 2116
41: 2146
42: 2105
43: 2099
44: 2096
45: 2084
46: 2113
47: 2111
48: 2028
--
J. B.

10 réponses

1 2 3 4
Avatar
michel.vauquois
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.
Avatar
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>
Avatar
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 ;-)

2016-06-05 17:54:30.586 Random[4189:198277] Début
2016-06-05 17:54:30.588 Random[4189:198277] 1 : 2031
2016-06-05 17:54:30.588 Random[4189:198277] 2 : 2079
2016-06-05 17:54:30.588 Random[4189:198277] 3 : 2122
2016-06-05 17:54:30.588 Random[4189:198277] 4 : 2066
2016-06-05 17:54:30.588 Random[4189:198277] 5 : 2047
2016-06-05 17:54:30.588 Random[4189:198277] 6 : 2073
2016-06-05 17:54:30.588 Random[4189:198277] 7 : 2065
2016-06-05 17:54:30.588 Random[4189:198277] 8 : 2108
2016-06-05 17:54:30.588 Random[4189:198277] 9 : 2092
2016-06-05 17:54:30.588 Random[4189:198277] 10 : 2031
2016-06-05 17:54:30.588 Random[4189:198277] 11 : 2029
2016-06-05 17:54:30.588 Random[4189:198277] 12 : 2124
2016-06-05 17:54:30.588 Random[4189:198277] 13 : 2087
2016-06-05 17:54:30.588 Random[4189:198277] 14 : 2028
2016-06-05 17:54:30.588 Random[4189:198277] 15 : 2210
2016-06-05 17:54:30.589 Random[4189:198277] 16 : 2147
2016-06-05 17:54:30.589 Random[4189:198277] 17 : 2028
2016-06-05 17:54:30.589 Random[4189:198277] 18 : 2070
2016-06-05 17:54:30.589 Random[4189:198277] 19 : 2072
2016-06-05 17:54:30.589 Random[4189:198277] 20 : 2092
2016-06-05 17:54:30.589 Random[4189:198277] 21 : 2150
2016-06-05 17:54:30.589 Random[4189:198277] 22 : 2272
2016-06-05 17:54:30.589 Random[4189:198277] 23 : 2104
2016-06-05 17:54:30.589 Random[4189:198277] 24 : 2041
2016-06-05 17:54:30.589 Random[4189:198277] 25 : 2008
2016-06-05 17:54:30.589 Random[4189:198277] 26 : 2049
2016-06-05 17:54:30.589 Random[4189:198277] 27 : 2135
2016-06-05 17:54:30.589 Random[4189:198277] 28 : 2091
2016-06-05 17:54:30.589 Random[4189:198277] 29 : 2066
2016-06-05 17:54:30.589 Random[4189:198277] 30 : 2048
2016-06-05 17:54:30.589 Random[4189:198277] 31 : 2145
2016-06-05 17:54:30.589 Random[4189:198277] 32 : 2070
2016-06-05 17:54:30.590 Random[4189:198277] 33 : 2149
2016-06-05 17:54:30.590 Random[4189:198277] 34 : 2016
2016-06-05 17:54:30.590 Random[4189:198277] 35 : 2022
2016-06-05 17:54:30.590 Random[4189:198277] 36 : 2033
2016-06-05 17:54:30.590 Random[4189:198277] 37 : 2158
2016-06-05 17:54:30.590 Random[4189:198277] 38 : 1996
2016-06-05 17:54:30.590 Random[4189:198277] 39 : 2158
2016-06-05 17:54:30.590 Random[4189:198277] 40 : 2072
2016-06-05 17:54:30.590 Random[4189:198277] 41 : 2112
2016-06-05 17:54:30.590 Random[4189:198277] 42 : 2065
2016-06-05 17:54:30.590 Random[4189:198277] 43 : 2051
2016-06-05 17:54:30.590 Random[4189:198277] 44 : 2085
2016-06-05 17:54:30.590 Random[4189:198277] 45 : 2109
2016-06-05 17:54:30.590 Random[4189:198277] 46 : 2093
2016-06-05 17:54:30.590 Random[4189:198277] 47 : 2094
2016-06-05 17:54:30.590 Random[4189:198277] 48 : 2007
2016-06-05 17:54:30.590 Random[4189:198277] Fin
590 - 586 = 4 centièmes de secondes pour 100 000 tirages, qui dit
mieux ? Bon je sors, c'est de l'Objective-C ;-)
Avatar
josephb
LMA a écrit,
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.
Avatar
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.
Avatar
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 !
Avatar
michel.vauquois
Re-bonjour,
J'ai écrit il y a peu :
17 secondes pour les 100 000 boucles !

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 !
Avatar
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é.
Avatar
g4fleurot
Bonsoir,
Le sympathique M.V. nous a écrit :
Pour 1 000 000 de tirages :
Temps écoulé : 242 sec

Ton script sur moniMac
Pour 1 000 000 de tirages :
"Temps écoulé : 36 sec
1 : 20966
2 : 20713
3 : 20901
4 : 20662
5 : 20895
6 : 20603
7 : 20699
8 : 20805
9 : 20950
10 : 20462
11 : 20801
12 : 20684
13 : 20875
14 : 21025
15 : 20876
16 : 20692
17 : 20920
18 : 20824
19 : 20764
20 : 21010
21 : 20887
22 : 20676
23 : 20733
24 : 20825
25 : 20977
26 : 20764
27 : 20861
28 : 20893
29 : 20660
30 : 20591
31 : 20760
32 : 20778
33 : 20942
34 : 20984
35 : 21091
36 : 21051
37 : 20747
38 : 20937
39 : 20829
40 : 20746
41 : 20957
42 : 20973
43 : 20702
44 : 20817
45 : 21047
46 : 20970
47 : 20772
48 : 20903"
Pour 100 000 -> 5 sec
Salutations.
--
Gérard FLEUROT [ 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...
Avatar
josephb
M.V. 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
Amicalement
--
J. B.
1 2 3 4