Rev 12038 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
20 | reyssat | 1 | !if $wims_read_parm!=slib_header |
13586 | bpr | 2 | !goto proc |
20 | reyssat | 3 | !endif |
4161 | bpr | 4 | |
20 | reyssat | 5 | slib_parms=2\ |
6 | ,[x_1,...,x_n] \ |
||
7 | ,[a_1,...,a_m] |
||
7192 | bpr | 8 | slib_author=Adeline, Grelot; Bernadette, Perrin-Riou |
4161 | bpr | 9 | |
7192 | bpr | 10 | slib_example=[1,1,1,3,4,5,6,2],[1,4]\ |
11 | [1,1,1,3,4,5,6,2],[1,4,6]\ |
||
12038 | bpr | 12 | [1,1,1,3,6,2],[1,4,5,6]\ |
7192 | bpr | 13 | [1,1,1,3,4,5,6,2,7,4,7],[2,3,6]\ |
14 | [1,1,1,3,4,5,6,2]\ |
||
12038 | bpr | 15 | [1,1,2]\ |
16 | [1,1.5,2.7,0,3,5.5,4] |
||
20 | reyssat | 17 | |
18 | !exit |
||
19 | :proc |
||
20 | slib_out= |
||
12038 | bpr | 21 | !reset slib_END1 slib_END |
22 | !distribute items $wims_read_parm into slib_data,slib_w |
||
20 | reyssat | 23 | slib_v=!declosing $slib_data |
12038 | bpr | 24 | slib_w=!declosing $slib_w |
20 | reyssat | 25 | !if $slib_v$slib_w=$empty |
13586 | bpr | 26 | slib_out=0 |
27 | !exit |
||
20 | reyssat | 28 | !else |
13586 | bpr | 29 | slib_v=!sort numeric item $slib_v |
30 | slib_max=!item -1 of $slib_v |
||
31 | slib_min=!item 1 of $slib_v |
||
32 | slib_cnt= !itemcnt $slib_v |
||
33 | slib_cntw=!itemcnt $slib_w |
||
34 | !if $slib_cntw=2 |
||
35 | !distribute item $slib_w into slib_b,slib_p |
||
36 | slib_c=$[ceil(($slib_max-$slib_b)/$slib_p)] |
||
37 | slib_d=$[min(0,floor(($slib_min-($slib_b))/$slib_p))] |
||
38 | slib_w=!values $slib_b+x*$slib_p for x=$slib_d to $slib_c |
||
39 | !endif |
||
40 | slib_w=!sort numeric item $slib_w |
||
41 | !if $slib_w=$empty |
||
42 | slib_N=$[ceil(4*($slib_cnt)^(1/4))] |
||
43 | slib_w=!values $slib_min+x*$[(($slib_max-($slib_min))/$slib_N)] for x=0 to $slib_N |
||
44 | !else |
||
45 | slib_m=!item -1 of $slib_w |
||
46 | slib_max=$[max($slib_max,$slib_m)] |
||
47 | slib_m=!item 1 of $slib_w |
||
48 | slib_min=$[min($slib_min,$slib_m)] |
||
49 | slib_w=$slib_min,$slib_w,$slib_max |
||
50 | slib_w= !listuniq $slib_w |
||
51 | !endif |
||
52 | slib_cpt=0 |
||
53 | slib_cntw=!itemcnt $slib_w |
||
54 | slib_wpointer=2 |
||
55 | # end est le point de separation |
||
56 | slib_end=!item $slib_wpointer of $slib_w |
||
57 | slib_result= |
||
58 | !for slib_i=1 to $slib_cnt |
||
59 | slib_dat=!item $slib_i of $slib_v |
||
60 | !if $slib_dat<$slib_end or ($slib_dat=$slib_max and $slib_wpointer=$slib_cntw) |
||
61 | # On est toujours dans le meme intervalle |
||
62 | !advance slib_cpt |
||
63 | !else |
||
64 | # Le point de separation franchi |
||
65 | # creer un nouveau point de separation |
||
66 | :point |
||
67 | !advance slib_wpointer |
||
68 | slib_end=!item $slib_wpointer of $slib_w |
||
69 | !if $slib_wpointer < $slib_cntw |
||
70 | slib_end1=!item $[$slib_wpointer] of $slib_w |
||
71 | !else |
||
72 | slib_end1=$[$slib_end+1] |
||
7192 | bpr | 73 | !endif |
13586 | bpr | 74 | slib_END1=!append item $slib_end1 to $slib_END1 |
75 | slib_END=!append item $slib_end to $slib_END |
||
76 | slib_result=!append item $[$slib_cpt] to $slib_result |
||
77 | !ifval $slib_dat>=$slib_end1 |
||
78 | slib_cpt=0 |
||
79 | !goto point |
||
80 | !else |
||
81 | slib_cpt=1 |
||
82 | !endif |
||
83 | !endif |
||
84 | !next slib_i |
||
85 | #Le dernier intervalle |
||
86 | slib_result=!append item $[$slib_cpt] to $slib_result |
||
87 | !if $[$slib_wpointer+1] <=$slib_cntw |
||
88 | slib_zero=!values 0 for x=$[$slib_wpointer+1] to $slib_cntw |
||
89 | slib_result=$slib_result,$slib_zero |
||
90 | !endif |
||
20 | reyssat | 91 | !endif |
92 | slib_out=!trim $slib_result |
||
93 | slib_out=!line -1 of $slib_out |
||
12038 | bpr | 94 | slib_out=[$slib_out],[$slib_w], [$slib_END], [$slib_END1] |