第 7 章 おわりに 51
B.2 シミュレーションメインプログラム
付録
B
ソースコードB.2
シミュレーションメインプログラム124
29 " d " = > x ,# a r r i v a l at T / C 30 " e " = > x ,# d e p a t u r e f r o m T / C 31 " f " = > x ,# s t a r t O U T g a t e w a i t i n g 32 " g " = > x ,# a r r i v a l at O U T g a t e 33 " h " = > x ,# p a s s t h e g a t e 34 " t y p e " = > $type ,
35 " tag " = > $id
36 };
37 $IT { ’ IT ’ . s p r i n t f ( " %06 d " , $ X T c o u n t ) }={
38 " ar " = > x ,# a r r i v a l
39 " a " = > x ,# a r r i v a l at IN g a t e 40 " b " = > x ,# p a s s t h e g a t e 41 " c " = > x ,# a r r i v a l at b l o c k 42 " d " = > x ,# a r r i v a l at T / C 43 " e " = > x ,# d e p a t u r e f r o m T / C 44 " f " = > x ,# s t a r t O U T g a t e w a i t i n g 45 " g " = > x ,# a r r i v a l at O U T g a t e 46 " h " = > x ,# p a s s t h e g a t e 47 " t y p e " = > x ,
48 " tag " = > x
49 };
50 p u s h ( @XTid , ’ XT ’ . s p r i n t f ( " %06 d " , $ X T c o u n t ) ) ; 51 p u s h ( @XTar , $ar ) ;
52 $ X T c o u n t ++;
53 }
54 c l o s e ( I N F I L E ) ;
55 # # # # # # I N P U T SH - I N P U T / # # # # # # # # # # # # # # # # # #
56 my $ f i l e n a m e 2 = ’ SH - I N P U T / SH ’ . $ { A R G V [ 0 ] } . ’ S ’ . $ { A R G V [ 1 ] } . ’ . txt ’ ; 57 o p e n ( INFILE , " < $ f i l e n a m e 2 " ) or die " $ ! " ;
58 w h i l e ( < INFILE >) {
59 c h o m p $_ ;
60 my ( $id , $ar , $ n u m ) = s p l i t (/ / , $_ ) ;
61 p u s h ( @shipID , $id ) ;
62 p u s h ( @shipAR , $ar ) ;
63 $ s h i p { $id }
64 ={ " ar " = > $ar , 65 " c o n t " = > $ n u m };
66 }
67 c l o s e ( I N F I L E ) ;
68 # # # # # # # # # # # # # # # D E F # # # # # # # # # # # # # # # # # # # # # # # # # 69 @ b l o c k =([ ’ AA ’ , ’ AB ’ , ’ AC ’ , ’ AD ’ , ’ AE ’ ] , 70 [ ’ BA ’ , ’ BB ’ , ’ BC ’ , ’ BD ’ , ’ BE ’ ] , 71 [ ’ CA ’ , ’ CB ’ , ’ CC ’ , ’ CD ’ , ’ CE ’ ] , 72 [ ’ DA ’ , ’ DB ’ , ’ DC ’ , ’ DD ’ , ’ DE ’ ] , 73 [ ’ EA ’ , ’ EB ’ , ’ EC ’ , ’ ED ’ , ’ EE ’ ] ,
74 ) ;
75 $n =4;
76 $m =4;
77 $ b l o c k l = 1 1 ; 78 $ b l o c k h =5;
79 $ b l o c k w =5;
80 for ( my $i =0; $i <= $n ; $i ++) { 81 for ( my $j =0; $j <= $m ; $j ++) {
82 for ( my $l =1; $l <= $ b l o c k l ; $l ++) {
83 for ( my $k =1; $k <= $ A R G V [ 2 ] ; $k ++) {
84 @ { ’ b l o c k ’ . $ b l o c k [ $i ][ $j ]. ’ TC ’ . $k }=( $k , $k ,0 ,0) ;
85 }
86 for ( my $w =1; $w <= $ b l o c k w ; $w ++) {
87 for ( my $h =1; $h <= $ b l o c k h ; $h ++) {
88 $ { ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}{ s p r i n t f ( " %02 d " , $l ) . $w . $h }
付録
B
ソースコードB.2
シミュレーションメインプログラム125
89 ={ " ID " = > ’ f r e e ’ ,
90 " row " = > $i ,
91 " c o l u m n " = > $j ,
92 " l e n g t h " = > $l ,
93 " w i d t h " = > $w ,
94 " h e i g h t " = > $h ,
95 " I T i n " = >(9*( $i +1) + 5 + 5 6 * $j ) ,
96 " I T o u t " = >9*( $i +1) +56*(4 - $j ) +4 ,
97 " X T i n " = >9*(6 - $i ) + 1 0 + 5 6 * $j ,
98 " X T o u t " = >9*(6 - $i ) +56*(4 - $j ) +9
99 };
100 }
101 }
102 }
103 }
104 }
105 # # # # # # # # # # # # # # # # M A I N s i m u l a t i o n # # # # # # # # # # # # # # # # 106 $Td = 2 4 6 7 2 ;
107 $ q c i n t e r v a l = 1 0 ; 108 $ I T c o u n t e r =0;
109 $ s p a n = $ X T a r [ - 1 ] + 2 4 6 7 2 ; 110 # p r i n t $X T a r [ -1] ,"\ n ";
111 # = p o d
112 $ s i m c o u n t =0;
113 for ( $t =1; $t <= $ s p a n ; $t ++) { 114 # f o r ($t = 0 ;$t < 6 *$T d ;$t + + ) { 115 # T C t a b l e i n i t i a l i z e 116 for ( my $i =0; $i <= $n ; $i ++) {
117 for ( my $j =0; $j <= $m ; $j ++) {
118 $ { ’ T A B L E ’ . $ b l o c k [ $i ][ $j ]}[ $t ] [ 0 ] = $t ;
119 }
120 }
121 if ( $t % 2 4 6 7 2 == 0) {
122 p r i n t " [ day " , int ( $t / 2 4 6 7 2 ) , " ] " , $# XTar , " ␣ " ,$# XTid , " \ n " ;
123 }
124 if ( $t > $ s i m c o u n t * $Td * $ { A R G V [ 1 ] } / 1 0 0 ) { 125 & B l o c k s e a r c h () ;
126 my $ s i m s u m =0;
127 for ( my $i =0; $i <5; $i ++) {
128 for ( my $j =0; $j <5; $j ++) {
129 $ s i m s u m += $ b l o c k s t a t e [ $i ][ $j ];
130 $simsum -= $ t o d a y [ $i ][ $j ];
131 }
132 }
133 p r i n t " s i m c o u n t ␣ $ s i m c o u n t ␣ $ s i m s u m \ n " ;
134 $ s i m c o u n t ++;
135 }
136 # XT a r r i v a l t a b l e 137 if ( $t == $ X T a r [ 0 ] ) {
138 my $ t a g = s h i f t ( @ X T i d ) ;
139 my $id = $XT { $ t a g }{ tag };
140 my $ t i m e = s h i f t ( @ X T a r ) ; 141 & X T f r e e s t a c k i n g ( $ t a g ) ;
142 my $ b e t = $ { ’ Y a r d ’ . $ C o n t L i s t { $id }{ p o s i t i o n }}{ $ b l o c k l . $ b l o c k w . $ b l o c k h }{ X T i n } / 8 + 0 . 5 ;
143 p u s h ( @ { ’ L a n e ’ . $ C o n t L i s t { $id }{ p o s i t i o n }. ’ T A B L E ’ } , $ t i m e + int ( $ b e t ) ) ; 144 p u s h ( @ { ’ L a n e ’ . $ C o n t L i s t { $id }{ p o s i t i o n }} , $ t a g ) ;
145 & a r r a n g e m e n t ( $ C o n t L i s t { $id }{ p o s i t i o n }) ;
146 $XT { $ t a g }{ b }= $ t i m e ;
147 $XT { $ t a g }{ c }= $ t i m e + int ( $ b e t ) ;
付録
B
ソースコードB.2
シミュレーションメインプログラム126
148 }
149 # s h i p a r r i v a l t a b l e 150 if ( $t == $ s h i p A R [ 0 ] ) { 151 s h i f t ( @ s h i p A R ) ;
152 my $ t a g = s h i f t ( @ s h i p I D ) ; 153 # = p o d
154 p r i n t " [ s h i p ␣ $ t a g ␣ a r r i v a l ] $ s h i p { $ t a g }{ c o n t } ␣ $t \ n " ; 155 # = p o d
156 p r i n t " - - - -\ n " ; 157 & B l o c k s e a r c h () ;
158 & S t a t e p r i n t () ;
159 p r i n t " - - - -\ n " ; 160 # = c u t
161 & B l o c k s e a r c h () ; 162 & F r e e s t a c k i n g ( $ t a g ) ;
163 & QC ( $ t a g ) ;
164 # p r i n t " - - - -\ n ";
165 for ( my $i =0; $i <= $n ; $i ++) {
166 for ( my $j =0; $j <= $m ; $j ++) {
167 p r i n t s p r i n t f ( " %2 s " , $ X T H [ $i ][ $j ]) , " ␣ " ;
168 } p r i n t " ␣ | ␣ " ;
169 for ( my $j =0; $j <= $m ; $j ++) {
170 p r i n t s p r i n t f ( " %2 s " , $ X T R [ $i ][ $j ]) , " ␣ " ;
171 $ X T R [ $i ][ $j ] = 0 ;
172 $ X T H [ $i ][ $j ] = 0 ;
173 } p r i n t " ␣ | ␣ " ;
174 for ( my $j =0; $j <= $m ; $j ++) {
175 p r i n t s p r i n t f ( " %2 s " , $ X T S [ $i ][ $j ]) , " ␣ " ;
176 $ X T S [ $i ][ $j ] = 0 ;
177 } p r i n t " \ n " ;
178 }
179 p r i n t " - - - -\ n " ; 180 & S t a t e p r i n t () ;
181 p r i n t " - - - -\ n " ;
182 }
183 # QC o u t p u t t a b l e
184 for ( $i =1; $i < 1 7 ; $i ++) {
185 if ( $t == $ { ’ Q C t a b l e ’ . $i } [ 0 ] ) {
186 my $ t a g = s h i f t ( @ { ’ QC ’ . $i }) ;
187 my $ t i m e = s h i f t ( @ { ’ Q C t a b l e ’ . $i }) ; 188 # p r i n t $time ," " ,$tag , " \ n ";
189 my $ b e t =( $ { ’ Y a r d ’ . $ C o n t L i s t { $ t a g }{ p o s i t i o n }}{ $ b l o c k l . $ b l o c k w . $ b l o c k h }{
I T i n } + 2 5 * ( $i +1) ) / 8 + 0 . 5 ;
190 p u s h ( @ { ’ L a n e ’ . $ C o n t L i s t { $ t a g }{ p o s i t i o n }. ’ T A B L E ’ } , $ t i m e + int ( $ b e t ) ) ; 191 p u s h ( @ { ’ L a n e ’ . $ C o n t L i s t { $ t a g }{ p o s i t i o n }} , ’ IT ’ . s p r i n t f ( " %06 d " ,
$ I T c o u n t e r ) ) ;
192 & a r r a n g e m e n t ( $ C o n t L i s t { $ t a g }{ p o s i t i o n }) ; 193 $IT { ’ IT ’ . s p r i n t f ( " %06 d " , $ I T c o u n t e r ) }{ b }= $ t i m e ;
194 $IT { ’ IT ’ . s p r i n t f ( " %06 d " , $ I T c o u n t e r ) }{ c }= $ t i m e + int ( $ b e t ) ; 195 $IT { ’ IT ’ . s p r i n t f ( " %06 d " , $ I T c o u n t e r ) }{ tag }= $ t a g ;
196 $ I T c o u n t e r ++;
197 }
198 }
199 # L a n e a r r i v a l
200 for ( my $i =0; $i <5; $i ++) {
201 for ( my $j =0; $j <5; $j ++) {
202 # # # # # # # # # # # # # # # # # # # #
203 if ( $t eq $ { ’ L a n e ’ . $ b l o c k [ $i ][ $j ]. ’ T A B L E ’ } [ 0 ] ) { 204 # p r i n t "[" , s p r i n t f ( " % 0 6 d " ,$t ) ,$b l o c k [$i ][$j ] , " ] " ; 205 s h i f t ( @ { ’ L a n e ’ . $ b l o c k [ $i ][ $j ]. ’ T A B L E ’ }) ;
付録
B
ソースコードB.2
シミュレーションメインプログラム127
206 my $ t r a i l 1 = s h i f t ( @ { ’ L a n e ’ . $ b l o c k [ $i ][ $j ]}) ;
207 my $ t r a i l 2 = s u b s t r ( $trail1 ,0 ,2) ;
208 my $ t a g = $ { $ t r a i l 2 }{ $ t r a i l 1 }{ tag };
209 my $ p o s i t =& I D s e a r c h ( $ t a g ) ;
210 # XT s t a c k
211 # p r i n t "$t r a i l 1 \ n ";
212 if ( $ p o s i t ) {
213 do {
214 my $ m a t c h = s u b s t r ( $posit ,0 ,3) ;
215 my @ W c a n d =& a b o v e s e a r c h ( $tag , $ p o s i t ) ;
216 # p r i n t "$t a g ";
217 c a n d : for ( my $k =0; $k < = $ # W c a n d ; $k ++) {
218 # p r i n t "$W c a n d [$k ] $p o s i t $m a t c h \ n ";
219 if ( $ W c a n d [ $k ] eq $ p o s i t ) {
220 my $tc =& T C s e a r c h 1 ( $posit , $ b l o c k [ $i ][ $j ]) ;
221 $ X T R [ $i ][ $j ] + + ;
222 my ( $timed , $ t i m e e ) =& s t a c k ( $tc , $posit , $ b l o c k [ $i ][ $j
]) ;
223 if ( $ { $ t r a i l 2 }{ $ t r a i l 1 }{ d } eq ’ x ’ || $ { $ t r a i l 2 }{
$ t r a i l 1 }{ d } eq " " ) {
224 $ { $ t r a i l 2 }{ $ t r a i l 1 }{ d }= $ t i m e d ;
225 }# e l s i f (${$t r a i l 2 }{$t r a i l 1 }{ d })
226 $ { $ t r a i l 2 }{ $ t r a i l 1 }{ e }= $ t i m e e ;
227 my $ b e t = $ { ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}{ $ b l o c k l . $ b l o c k w .
$ b l o c k h }{ $ t r a i l 2 . ’ out ’ } / 8 + 0 . 5 ;
228 $ { $ t r a i l 2 }{ $ t r a i l 1 }{ f }= $ { $ t r a i l 2 }{ $ t r a i l 1 }{ e }+ int (
$ b e t ) ;
229 $ { ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}{ $ p o s i t }{ ID }= ’ f r e e ’ ;
230 # if ($t r a i l 2 eq ’ XT ’ && $t a g = ~ / i n$/) {
231 # p r i n t "$t r a i l 1 $t a g r e t r i e v a l f r o m " ,$b l o c k [$i
][$j ] ,$p o s i t , " [ d ]$t i m e d [ e ]$t i m e e [ b e t ]$b e t \ n ";
232 # }
233 l a s t c a n d ;
234 } e l s i f ( $ W c a n d [ $k ] = ~ / ^ $ m a t c h /) {
235 my $tc =& T C s e a r c h 1 ( $ W c a n d [ $k ] , $ b l o c k [ $i ][ $j ]) ;
236 my $ n e w t a g =& l o w e s t ( $tag , $posit , $ W c a n d [ $k ]) ;
237 # p r i n t "[ n e w t a g ]$n e w t a g ";
238 if ( $ n e w t a g ) {
239 my ( $timed , $ t i m e e ) =& r e h a n d l i n g ( $tc , $ W c a n d [ $k ] ,
$newtag , $ b l o c k [ $i ][ $j ]) ;
240 if ( $ { $ t r a i l 2 }{ $ t r a i l 1 }{ d } eq ’ x ’ ) {
241 $ { $ t r a i l 2 }{ $ t r a i l 1 }{ d }= $ t i m e d ;
242 }
243 l a s t c a n d ;
244 } e l s e {
245 my ( $timed , $ t i m e e ) =& h c h a n g e ( $tc , $posit , $ W c a n d [
$k ] , $ b l o c k [ $i ][ $j ]) ;
246 if ( $ { $ t r a i l 2 }{ $ t r a i l 1 }{ d } eq ’ x ’ ) {
247 $ { $ t r a i l 2 }{ $ t r a i l 1 }{ d }= $ t i m e d ;
248 }
249 $ p o s i t = $ W c a n d [ $k ];
250 l a s t c a n d ;
251 }
252 } e l s e {
253 n e x t c a n d ;
254 }
255 }
256 } w h i l e ( $ { ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}{ $ p o s i t }{ ID } ne ’ f r e e ’ ) ;
257 # IT s t a c k
258 } e l s e {
付録
B
ソースコードB.2
シミュレーションメインプログラム128
259 my @ c a n d =& h e i g h t c o u n t ( $ b l o c k [ $i ][ $j ]) ; 260 my $tc =& T C s e a r c h 1 ( $ c a n d [0] , $ b l o c k [ $i ][ $j ]) ;
261 $ X T S [ $i ][ $j ] + + ;
262 my ( $timed , $ t i m e e ) =& s t a c k ( $tc , $ c a n d [0] , $ b l o c k [ $i ][ $j ]) ;
263 $ { $ t r a i l 2 }{ $ t r a i l 1 }{ d }= $ t i m e d ;
264 $ { $ t r a i l 2 }{ $ t r a i l 1 }{ e }= $ t i m e e ;
265 my $ b e t = $ { ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}{ $ b l o c k l . $ b l o c k w . $ b l o c k h }{
$ t r a i l 2 . ’ out ’ } / 8 + 0 . 5 ;
266 $ { $ t r a i l 2 }{ $ t r a i l 1 }{ f }= $ { $ t r a i l 2 }{ $ t r a i l 1 }{ e }+ int ( $ b e t ) ;
267 $ t o d a y [ $i ][ $j ] - -;
268 $ { ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}{ $ c a n d [ 0 ] } { ID }= $ t a g ; 269 # if ($t r a i l 2 eq ’ IT ’ && $t a g = ~ / i n$/) {
270 # p r i n t "$t r a i l 1 $t a g s t a c k at " ,$b l o c k [$i ][$j ] ,$c a n d [ 0 ] , " [ d ]$t i m e d [ e ]$t i m e e [ b e t ]$b e t \ n ";
271 # }
272 }
273 }
274 # # # # # # # # # # # # # # # # # # # #
275 }
276 }
277 }
278 for ( my $i =0; $i <= $n ; $i ++) { 279 for ( my $j =0; $j <= $m ; $j ++) {
280 p r i n t s p r i n t f ( " %2 s " , $ X T H [ $i ][ $j ]) , " ␣ " ; 281 } p r i n t " ␣ | ␣ " ;
282 for ( my $j =0; $j <= $m ; $j ++) {
283 p r i n t s p r i n t f ( " %2 s " , $ X T R [ $i ][ $j ]) , " ␣ " ;
284 $ X T R [ $i ][ $j ] = 0 ;
285 $ X T H [ $i ][ $j ] = 0 ;
286 } p r i n t " ␣ | ␣ " ;
287 for ( my $j =0; $j <= $m ; $j ++) {
288 p r i n t s p r i n t f ( " %2 s " , $ X T S [ $i ][ $j ]) , " ␣ " ;
289 $ X T S [ $i ][ $j ] = 0 ;
290 } p r i n t " \ n " ; 291 }
292 p r i n t " - - - END - - - -\ n " ; 293 & B l o c k s e a r c h () ;
294 & S t a t e p r i n t () ;
295 p r i n t " - - - -\ n " ; 296 for ( my $i =0; $i <5; $i ++) {
297 for ( my $j =0; $j <5; $j ++) {
298 f o r e a c h $_ ( k e y s %{ ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}) {
299 if ( $ { ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}{ $_ }{ ID } ne ’ f r e e ’ ) {
300 p r i n t " [ Y a r d " , $ b l o c k [ $i ][ $j ] , $_ , " ] " , $ { ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}{ $_ }{
ID } , " \ n " ;
301 }
302 }
303 }
304 }
305 # # # # # # # XT O U T P U T # # # # # # # # # # # # # # # # # # #
306 $ f i l e n a m e 1 = $ o u t f i l e n a m e . ’ / TC ’ . s p r i n t f ( " %02 d " , $ { A R G V [ 2 ] } ) . ’ / XT / XT ’ . $ { A R G V [ 0 ] } . ’ S ’ . $ { A R G V [ 1 ] } . ’ . txt ’ ;
307 o p e n ( OUTFILE , " > $ f i l e n a m e 1 " ) or die " $ ! " ; 308 f o r e a c h $_ ( s o r t k e y s % XT ) {
309 p r i n t O U T F I L E $_ , " ␣ " , $XT { $_ }{ tag } , " ␣ " , $XT { $_ }{ b } , " ␣ " , $XT { $_ }{ c } , " ␣ " , $XT { $_ }{ d } , " ␣ " , $XT { $_ }{ e } , " ␣ " , $XT { $_ }{ f } , " \ n " ;
310 }
311 c l o s e ( O U T F I L E ) ;
312 # # # # # # # IT O U T P U T # # # # # # # # # # # # # # # # # # #
付録
B
ソースコードB.2
シミュレーションメインプログラム129
313 $ f i l e n a m e 2 = $ o u t f i l e n a m e . ’ / TC ’ . s p r i n t f ( " %02 d " , $ { A R G V [ 2 ] } ) . ’ / IT / IT ’ . $ { A R G V [ 0 ] } . ’ S ’ . $ { A R G V [ 1 ] } . ’ . txt ’ ;
314 o p e n ( OUTFILE , " > $ f i l e n a m e 2 " ) or die " $ ! " ; 315 f o r e a c h $_ ( s o r t k e y s % IT ) {
316 p r i n t O U T F I L E $_ , " ␣ " , $IT { $_ }{ tag } , " ␣ " , $IT { $_ }{ b } , " ␣ " , $IT { $_ }{ c } , " ␣ " , $IT { $_ }{ d } , " ␣ " , $IT { $_ }{ e } , " ␣ " , $IT { $_ }{ f } , " \ n " ;
317 }
318 c l o s e ( O U T F I L E ) ;
319 # # # # # # # TC O U T P U T # # # # # # # # # # # # # # # # # # #
320 $ f i l e n a m e 3 = $ o u t f i l e n a m e . ’ / TC ’ . s p r i n t f ( " %02 d " , $ { A R G V [ 2 ] } ) . ’ / TC / TC ’ . $ { A R G V [ 0 ] } . ’ S ’ . $ { A R G V [ 1 ] } . ’ . txt ’ ;
321 o p e n ( OUTFILE , " > $ f i l e n a m e 3 " ) or die " $ ! " ; 322 for ( my $i =0; $i <5; $i ++) {
323 for ( my $j =0; $j <5; $j ++) {
324 for ( my $k =1; $k <= $ A R G V [ 2 ] ; $k ++) {
325 p r i n t O U T F I L E $ b l o c k [ $i ][ $j ] , " T C $ k \ n \ n " ;
326 for ( my $l =1; $l < = $ # { ’ b l o c k ’ . $ b l o c k [ $i ][ $j ]. ’ TC ’ . $k }; $l ++) { 327 p r i n t O U T F I L E $ { ’ b l o c k ’ . $ b l o c k [ $i ][ $j ]. ’ TC ’ . $k }[ $l ] , " ␣ " ; 328 if ( $l % 3 = = 0 ) { p r i n t O U T F I L E " \ n " ;}
329 }
330 }
331 }
332 }
333 c l o s e ( O U T F I L E ) ;
334 # # # # # # # # # # # # # # # S U B R O U T I N E # # # # # # # # # # # # # # # # # 335 sub S t a t e p r i n t {
336 for ( my $i =0; $i <5; $i ++) {
337 for ( my $j =0; $j <5; $j ++) {
338 p r i n t s p r i n t f ( " %3 s " , $ b l o c k s t a t e [ $i ][ $j ]) , " - " , s p r i n t f ( " %2 s " , $ t o d a y [ $i ][
$j ]) , " ␣ ␣ " ; 339 } p r i n t " \ n " ;
340 }
341 }
342 # # # # # # # # # # # # # # # # # # # # 343 sub a r r a n g e m e n t {
344 my $u = $_ [ 0 ] ;
345 my @ m e m =() ;
346 my @ m e m I D =() ;
347 $ m e m [ 0 ] = $ { ’ L a n e ’ . $u . ’ T A B L E ’ } [ 0 ] ; 348 $ m e m I D [ 0 ] = $ { ’ L a n e ’ . $u } [ 0 ] ;
349 out : for ( my $x =1; $x < = $ # { ’ L a n e ’ . $u . ’ T A B L E ’ }; $x ++) {
350 for ( my $y =0; $y < = $ # mem ; $y ++) {
351 if ( $ m e m [ $y ] == $ { ’ L a n e ’ . $u . ’ T A B L E ’ }[ $x ]) {
352 $ m e m [ $y ] + + ;
353 }
354 if ( $ m e m [ -1] < $ { ’ L a n e ’ . $u . ’ T A B L E ’ }[ $x ]) { 355 p u s h ( @mem , $ { ’ L a n e ’ . $u . ’ T A B L E ’ }[ $x ]) ;
356 p u s h ( @memID , $ { ’ L a n e ’ . $u }[ $x ]) ;
357 n e x t out ;
358 } e l s i f ( $ m e m [0] > $ { ’ L a n e ’ . $u . ’ T A B L E ’ }[ $x ]) { 359 u n s h i f t ( @mem , $ { ’ L a n e ’ . $u . ’ T A B L E ’ }[ $x ]) ;
360 u n s h i f t ( @memID , $ { ’ L a n e ’ . $u }[ $x ]) ;
361 n e x t out ;
362 } e l s i f ( $ m e m [ $y ] > $ { ’ L a n e ’ . $u . ’ T A B L E ’ }[ $x ]) { 363 s p l i c e ( @mem , $y ,0 , $ { ’ L a n e ’ . $u . ’ T A B L E ’ }[ $x ]) ;
364 s p l i c e ( @memID , $y ,0 , $ { ’ L a n e ’ . $u }[ $x ]) ;
365 n e x t out ;
366 } e l s e {
367
368 }
付録
B
ソースコードB.2
シミュレーションメインプログラム130
369 }
370 }
371 @ { ’ L a n e ’ . $u . ’ T A B L E ’ } = ( ) ;
372 p u s h ( @ { ’ L a n e ’ . $u . ’ T A B L E ’ } , @ m e m ) ; 373 @ { ’ L a n e ’ . $u } = ( ) ;
374 p u s h ( @ { ’ L a n e ’ . $u } , @ m e m I D ) ; 375 }
376 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 377 sub h c h a n g e {
378 my ( $x , $y1 , $y2 , $u ) = @_ ; 379 my $ y h 1 = s u b s t r ( $y1 , -1) ; 380 my $ y h 2 = s u b s t r ( $y2 , -1) ; 381 my $ y w 1 = s u b s t r ( $y1 ,2 ,1) ; 382 my $ y w 2 = s u b s t r ( $y2 ,2 ,1) ; 383 my $yl = s u b s t r ( $y1 ,0 ,2) ;
384 my $ c o p y = $y1 ;
385 my $ c h a n g e t i m e =0;
386 my $dh = int ( $yh2 - $ y h 1 ) ;
387 # p r i n t "[ x ]" ,$x , " [ y1 ]" ,$y1 , " [ y2 ]" ,$y2 , " [ u ]" ,$u , " [ dh ]" ,$d h ;
388 if ( $ y w 1 == 1) {
389 for ( my $i =1; $i <= $dh ; $i ++) {
390 $ c h a n g e t i m e + = ( ( $yh1 - $i ) * 1 . 5 + $i ) *2;
391 }
392 $ c h a n g e t i m e += $dh * 1 . 5 ; 393 } e l s i f ( $ y w 1 == 5) {
394 for ( my $i =1; $i <= $dh ; $i ++) {
395 $ c h a n g e t i m e + = ( ( $yh1 - $i ) * 1 . 5 + $i ) *2;
396 }
397 $ c h a n g e t i m e +=( $dh +1) * 1 . 5 ;
398 } e l s e {
399 if (5 - $yw1 >= $dh ) {
400 for ( my $i =1; $i <= $dh ; $i ++) {
401 $ c h a n g e t i m e + = ( ( $yh1 - $i ) * 1 . 5 + $i ) *2;
402 }
403 $ c h a n g e t i m e += $dh * 1 . 5 ;
404 } e l s e {
405 for ( my $i =1; $i <=5 - $ y w 1 ; $i ++) {
406 $ c h a n g e t i m e = $i *5;
407 }
408 for ( my $i =1; $i <= $dh -5+ $ y w 1 ; $i ++) {
409 $ c h a n g e t i m e =(( $dh +1 - $i ) * 1 . 5 + $i ) *2;
410 }
411 $ c h a n g e t i m e +=( $dh +1) * 1 . 5 ;
412 }
413 }
414 # p r i n t "[ t i m e ]" ,$c h a n g e t i m e ," h c h a n g e \ n ";
415 if ( $yl == $ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ 0 ] ) { 416 if ( $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1] < $t ) { 417 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ; 418 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t ) ;
419 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t + int ( $ c h a n g e t i m e + 0 . 1 ) ) ;
420 } e l s e {
421 my $z = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ - 1 ] + 1 ; 422 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ; 423 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z ) ;
424 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z + int ( $ c h a n g e t i m e + 0 . 1 ) ) ;
425 }
426 } e l s e {
427 my $i = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[0] - $yl ; 428 if ( $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1] < $t ) {
付録
B
ソースコードB.2
シミュレーションメインプログラム131
429 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ;
430 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t + int ( abs ( $i ) * 1 0 / 4 + 0 . 1 ) ) ;
431 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t + int ( abs ( $i ) * 1 0 / 4 + $ c h a n g e t i m e + 0 . 1 ) ) ; 432 @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ 0 ] = $yl ;
433 } e l s e {
434 my $z = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ - 1 ] + 1 ; 435 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ;
436 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z + int ( abs ( $i ) * 1 0 / 4 + 0 . 1 ) ) ;
437 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z + int ( abs ( $i ) * 1 0 / 4 + $ c h a n g e t i m e + 0 . 1 ) ) ; 438 @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ 0 ] = $yl ;
439 }
440 }
441 for ( my $i = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -2]; $i <= $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1]; $i ++) { 442 $ { ’ T A B L E ’ . $u }[ $i ][ $yl ]= ’ TC ’ . $yl ;
443 }
444 for ( my $i = $ y h 1 ; $i <= $ y h 2 ; $i ++) {
445 s u b s t r ( $copy , -1 ,1 , $i ) ;
446 p u s h ( @cand , $ { ’ Y a r d ’ . $u }{ $ c o p y }{ ID }) ;
447 }
448 my $ b u f = s h i f t ( @ c a n d ) ; 449 p u s h ( @cand , $ b u f ) ;
450 for ( my $i = $ y h 1 ; $i <= $ y h 2 ; $i ++) {
451 s u b s t r ( $copy , -1 ,1 , $i ) ;
452 $ { ’ Y a r d ’ . $u }{ $ c o p y }{ ID }= s h i f t ( @ c a n d ) ;
453 }
454 r e t u r n $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -2] , $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1];
455 }
456 # # # # # # # # # # # # # # # # # # # # # # 457 sub r e h a n d l i n g {
458 my ( $x , $y1 , $y2 , $u ) = @_ ; 459 my $ y h 1 = s u b s t r ( $y1 , -1) ; 460 my $ y h 2 = s u b s t r ( $y2 , -1) ; 461 my $ y w 1 = s u b s t r ( $y1 ,2 ,1) ; 462 my $ y w 2 = s u b s t r ( $y2 ,2 ,1) ; 463 my $yl = s u b s t r ( $y1 ,0 ,2) ;
464 my $ r e h a n d t i m e =(6 - $ y h 1 ) * 1 . 5 + abs ( $yw2 - $ y w 1 ) +(6 - $ y h 2 ) * 1 . 5 ;
465 # p r i n t "[ x ]" ,$x , " [ y1 ]" ,$y1 , " [ y2 ]" ,$y2 , " [ u ]" ,$u , " [ t i m e ]" ,$r e h a n d t i m e ," r e h a n d \ n
";
466 p r i n t " r e h a n d \ n " ;
467 $ { ’ Y a r d ’ . $u }{ $y2 }{ ID }= $ { ’ Y a r d ’ . $u }{ $y1 }{ ID };
468 $ { ’ Y a r d ’ . $u }{ $y1 }{ ID }= ’ f r e e ’ ; 469 if ( $yl == $ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ 0 ] ) { 470 if ( $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1] < $t ) { 471 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ; 472 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t ) ;
473 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t + int ( $ r e h a n d t i m e + 0 . 1 ) ) ;
474 } e l s e {
475 my $z = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ - 1 ] + 1 ; 476 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ; 477 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z ) ;
478 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z + int ( $ r e h a n d t i m e + 0 . 1 ) ) ;
479 }
480 } e l s e {
481 my $i = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[0] - $yl ; 482 if ( $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1] < $t ) { 483 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ; 484 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t ) ;
485 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t + int ( abs ( $i ) * 1 0 / 4 + 0 . 1 ) ) ; 486 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ;
487 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t + int ( abs ( $i ) * 1 0 / 4 + 0 . 1 ) ) ;
付録
B
ソースコードB.2
シミュレーションメインプログラム132
488 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t + int ( abs ( $i ) * 1 0 / 4 + $ r e h a n d t i m e + 0 . 1 ) ) ; 489 @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ 0 ] = $yl ;
490 } e l s e {
491 my $z = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ - 1 ] + 1 ; 492 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ; 493 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z ) ;
494 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z + int ( abs ( $i ) * 1 0 / 4 + 0 . 1 ) ) ; 495 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ;
496 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z + int ( abs ( $i ) * 1 0 / 4 + 0 . 1 ) ) ;
497 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z + int ( abs ( $i ) * 1 0 / 4 + $ r e h a n d t i m e + 0 . 1 ) ) ; 498 @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ 0 ] = $yl ;
499 }
500 }
501 for ( my $i = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -2]; $i <= $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1]; $i ++) { 502 $ { ’ T A B L E ’ . $u }[ $i ][ $yl ]= ’ TC ’ . $yl ;
503 }
504 r e t u r n $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -2] , $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1];
505 }
506 sub l o w e s t {
507 my ( $targ , $ p o s i t i o n , $ d e l e t e ) = @_ ; 508 my $ c o p y = $ p o s i t i o n ;
509 my @ c a n d =() ;
510 w s e a r c h : for ( my $i =5; $i >0; $i - -) {
511 s u b s t r ( $copy ,2 ,1 , $i ) ;
512 h s e a r c h : for ( my $j =5; $j >0; $j - -) {
513 s u b s t r ( $copy , -1 ,1 , $j ) ;
514 if ( $ { ’ Y a r d ’ . $ C o n t L i s t { $ t a r g }{ p o s i t i o n }}{ $ c o p y }{ ID } eq ’ f r e e ’ ) {
515 if ( s u b s t r ( $copy , -1) = = 1 ) {
516 p u s h ( @cand , $ c o p y ) ;
517 n e x t w s e a r c h ;
518 } e l s e {
519 n e x t h s e a r c h ;
520 }
521 } e l s e {
522 if ( $ c o p y eq $ d e l e t e ) {
523 n e x t w s e a r c h ;
524 } e l s e {
525 s u b s t r ( $copy , -1 ,1 , $j +1) ;
526 p u s h ( @cand , $ c o p y ) ;
527 n e x t w s e a r c h ;
528 }
529 }
530 }
531 }
532 for ( my $k =1; $k < = 5 ; $k ++) {
533 f o r e a c h $_ ( @ c a n d ) {
534 if ( s u b s t r ( $_ , -1) eq $k ) {
535 r e t u r n $_ ;
536 }
537 }
538 }
539 }
540 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 541 sub a b o v e s e a r c h {
542 my ( $targ , $ p o s i t i o n ) = @_ ; 543 my $ c o p y = $ p o s i t i o n ;
544 my @ w c a n d =() ;
545 w s e a r c h : for ( my $i =5; $i >0; $i - -) {
546 s u b s t r ( $copy ,2 ,1 , $i ) ;
547 h s e a r c h : for ( my $j =5; $j >0; $j - -) {
付録
B
ソースコードB.2
シミュレーションメインプログラム133
548 s u b s t r ( $copy , -1 ,1 , $j ) ;
549 if ( $ { ’ Y a r d ’ . $ C o n t L i s t { $ t a r g }{ p o s i t i o n }}{ $ c o p y }{ ID } eq ’ f r e e ’ ) {
550 n e x t h s e a r c h ;
551 } e l s e {
552 s u b s t r ( $copy , -1 ,1 , $j ) ;
553 p u s h ( @wcand , $ c o p y ) ;
554 n e x t w s e a r c h ;
555 }
556 }
557 }
558 r e t u r n @ w c a n d ; 559 }
560 # # # # # # # # # # # # # # # # ID s e a r c h # # # # # # # # # # # # # # # 561 sub I D s e a r c h {
562 my $ t a r g = $_ [ 0 ] ;
563 f o r e a c h $_ ( k e y s %{ ’ Y a r d ’ . $ C o n t L i s t { $ t a r g }{ p o s i t i o n }}) {
564 if ( $ { ’ Y a r d ’ . $ C o n t L i s t { $ t a r g }{ p o s i t i o n }}{ $_ }{ ID } eq $ t a r g ) {
565 r e t u r n $_ ;
566 }
567 }
568 }
569 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
570 sub QC {
571 if ($# QC1 >=0 || $# QC2 >=0 || $# QC3 >=0 || $# QC4 > = 0 ) {
572 & QC2 ( $_ [ 0 ] ) ;
573 r e t u r n ;
574 } e l s e {
575 my $ t a r g = $_ [ 0 ] ;
576 for ( my $i = $ s h i p { $ t a r g }{ c o n t } -1; $i > = 0 ; $i - -) { 577 my $id = $ t a r g . ’ - ’ . s p r i n t f ( " %04 d " , $i ) . ’ out ’ ; 578 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 9 / 1 0 ) {
579 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t } - $i ) ;
580 p u s h ( @QC4 , $id ) ;
581 p u s h ( @ Q C t a b l e 4 , $b ) ;
582 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 8 / 1 0 ) {
583 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*9/10 - $i ) ;
584 p u s h ( @QC3 , $id ) ;
585 p u s h ( @ Q C t a b l e 3 , $b ) ;
586 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 6 / 1 0 ) {
587 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*8/10 - $i ) ;
588 p u s h ( @QC2 , $id ) ;
589 p u s h ( @ Q C t a b l e 2 , $b ) ;
590 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 / 1 0 ) { 591 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 . 5 / 1 0 ) {
592 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*6/10 - $i ) ;
593 p u s h ( @QC1 , $id ) ;
594 p u s h ( @ Q C t a b l e 1 , $b ) ;
595 } e l s e {
596 my $b = $ Q C t a b l e 2 [ -1]+ $ q c i n t e r v a l ;
597 p u s h ( @QC2 , $id ) ;
598 p u s h ( @ Q C t a b l e 2 , $b ) ;
599 }
600 } e l s e {
601 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 1 . 5 / 1 0 ) {
602 my $b = $ Q C t a b l e 4 [ -1]+ $ q c i n t e r v a l ;
603 p u s h ( @QC4 , $id ) ;
604 p u s h ( @ Q C t a b l e 4 , $b ) ;
605 } e l s e {
606 my $b = $ Q C t a b l e 3 [ -1]+ $ q c i n t e r v a l ;
607 p u s h ( @QC3 , $id ) ;
付録
B
ソースコードB.2
シミュレーションメインプログラム134
608 p u s h ( @ Q C t a b l e 3 , $b ) ;
609 }
610 }
611 }
612 p r i n t " [ QC1 ] " ,$# QC1 , " [ QC2 ] " ,$# QC2 , " [ QC3 ] " ,$# QC3 , " [ QC4 ] " ,$# QC4 , " \ n " ; 613 my $ e n d t a b l e = 1 0 + $ Q C t a b l e 1 [ -1];
614 for ( my $i = $ s h i p { $ t a r g }{ c o n t } -1; $i > = 0 ; $i - -) { 615 my $id = $ t a r g . ’ - ’ . s p r i n t f ( " %04 d " , $i ) . ’ in ’ ; 616 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 / 4 ) {
617 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t } - $i ) ;
618 p u s h ( @QC1 , $id ) ;
619 p u s h ( @ Q C t a b l e 1 , $b ) ;
620 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 2 / 4 ) {
621 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*3/4 - $i ) ;
622 p u s h ( @QC2 , $id ) ;
623 p u s h ( @ Q C t a b l e 2 , $b ) ;
624 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 1 / 4 ) {
625 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*2/4 - $i ) ;
626 p u s h ( @QC3 , $id ) ;
627 p u s h ( @ Q C t a b l e 3 , $b ) ;
628 } e l s e {
629 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*1/4 - $i ) ;
630 p u s h ( @QC4 , $id ) ;
631 p u s h ( @ Q C t a b l e 4 , $b ) ;
632 }
633 }
634 }
635 p r i n t " [ QC1 ] " ,$# QC1 , " [ QC2 ] " ,$# QC2 , " [ QC3 ] " ,$# QC3 , " [ QC4 ] " ,$# QC4 , " \ n " ; 636 p r i n t " [ QC5 ] " ,$# QC5 , " [ QC6 ] " ,$# QC6 , " [ QC7 ] " ,$# QC7 , " [ QC8 ] " ,$# QC8 , " \ n " ; 637 p r i n t " [ QC9 ] " ,$# QC9 , " [ Q C 1 0 ] " ,$# QC10 , " [ Q C 1 1 ] " ,$# QC11 , " [ Q C 1 2 ] " ,$# QC12 , " \ n " ; 638 }
639 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
640 sub QC2 {
641 if ($# QC5 >=0 || $# QC6 >=0 || $# QC7 >=0 || $# QC8 > = 0 ) {
642 & QC3 ( $_ [ 0 ] ) ;
643 p r i n t " T R I P L E ␣ B O O K I N G ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! \ n " ; 644 p r i n t " T R I P L E ␣ B O O K I N G ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! \ n " ; 645 p r i n t " T R I P L E ␣ B O O K I N G ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! \ n " ;
646 r e t u r n ;
647 } e l s e {
648 my $ t a r g = $_ [ 0 ] ;
649 for ( my $i = $ s h i p { $ t a r g }{ c o n t } -1; $i > = 0 ; $i - -) { 650 my $id = $ t a r g . ’ - ’ . s p r i n t f ( " %04 d " , $i ) . ’ out ’ ; 651 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 9 / 1 0 ) {
652 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t } - $i ) ;
653 p u s h ( @QC8 , $id ) ;
654 p u s h ( @ Q C t a b l e 8 , $b ) ;
655 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 8 / 1 0 ) {
656 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*9/10 - $i ) ;
657 p u s h ( @QC7 , $id ) ;
658 p u s h ( @ Q C t a b l e 7 , $b ) ;
659 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 6 / 1 0 ) {
660 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*8/10 - $i ) ;
661 p u s h ( @QC6 , $id ) ;
662 p u s h ( @ Q C t a b l e 6 , $b ) ;
663 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 / 1 0 ) { 664 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 . 5 / 1 0 ) {
665 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*6/10 - $i ) ;
666 p u s h ( @QC5 , $id ) ;
667 p u s h ( @ Q C t a b l e 5 , $b ) ;
付録
B
ソースコードB.2
シミュレーションメインプログラム135
668 } e l s e {
669 my $b = $ Q C t a b l e 6 [ -1]+ $ q c i n t e r v a l ;
670 p u s h ( @QC6 , $id ) ;
671 p u s h ( @ Q C t a b l e 6 , $b ) ;
672 }
673 } e l s e {
674 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 1 . 5 / 1 0 ) {
675 my $b = $ Q C t a b l e 8 [ -1]+ $ q c i n t e r v a l ;
676 p u s h ( @QC8 , $id ) ;
677 p u s h ( @ Q C t a b l e 8 , $b ) ;
678 } e l s e {
679 my $b = $ Q C t a b l e 7 [ -1]+ $ q c i n t e r v a l ;
680 p u s h ( @QC7 , $id ) ;
681 p u s h ( @ Q C t a b l e 7 , $b ) ;
682 }
683 }
684 }
685 my $ e n d t a b l e = 1 0 + $ Q C t a b l e 5 [ -1];
686 for ( my $i = $ s h i p { $ t a r g }{ c o n t } -1; $i > = 0 ; $i - -) { 687 my $id = $ t a r g . ’ - ’ . s p r i n t f ( " %04 d " , $i ) . ’ in ’ ; 688 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 / 4 ) {
689 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t } - $i ) ;
690 p u s h ( @QC8 , $id ) ;
691 p u s h ( @ Q C t a b l e 8 , $b ) ;
692 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 2 / 4 ) {
693 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*3/4 - $i ) ;
694 p u s h ( @QC7 , $id ) ;
695 p u s h ( @ Q C t a b l e 7 , $b ) ;
696 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 1 / 4 ) {
697 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*2/4 - $i ) ;
698 p u s h ( @QC6 , $id ) ;
699 p u s h ( @ Q C t a b l e 6 , $b ) ;
700 } e l s e {
701 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*1/4 - $i ) ;
702 p u s h ( @QC5 , $id ) ;
703 p u s h ( @ Q C t a b l e 5 , $b ) ;
704 }
705 }
706 }
707 p r i n t " [ QC1 ] " ,$# QC1 , " [ QC2 ] " ,$# QC2 , " [ QC3 ] " ,$# QC3 , " [ QC4 ] " ,$# QC4 , " \ n " ; 708 p r i n t " [ QC5 ] " ,$# QC5 , " [ QC6 ] " ,$# QC6 , " [ QC7 ] " ,$# QC7 , " [ QC8 ] " ,$# QC8 , " \ n " ; 709 p r i n t " [ QC9 ] " ,$# QC9 , " [ Q C 1 0 ] " ,$# QC10 , " [ Q C 1 1 ] " ,$# QC11 , " [ Q C 1 2 ] " ,$# QC12 , " \ n " ; 710 }
711 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
712 sub QC3 {
713 if ($# QC9 >=0 || $# QC10 >=0 || $# QC11 >=0 || $# QC12 > = 0 ) {
714 & QC4 ( $_ [ 0 ] ) ;
715 # p r i n t " Q U A T R O B O O K I N G ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! \ n ";
716 # p r i n t " Q U A T R O B O O K I N G ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! \ n ";
717 # p r i n t " Q U A T R O B O O K I N G ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! \ n ";
718 r e t u r n ;
719 } e l s e {
720 my $ t a r g = $_ [ 0 ] ;
721 for ( my $i = $ s h i p { $ t a r g }{ c o n t } -1; $i > = 0 ; $i - -) { 722 my $id = $ t a r g . ’ - ’ . s p r i n t f ( " %04 d " , $i ) . ’ out ’ ; 723 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 9 / 1 0 ) {
724 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t } - $i ) ;
725 p u s h ( @QC12 , $id ) ;
726 p u s h ( @ Q C t a b l e 1 2 , $b ) ;
727 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 8 / 1 0 ) {
付録
B
ソースコードB.2
シミュレーションメインプログラム136
728 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*9/10 - $i ) ;
729 p u s h ( @QC11 , $id ) ;
730 p u s h ( @ Q C t a b l e 1 1 , $b ) ;
731 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 6 / 1 0 ) {
732 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*8/10 - $i ) ;
733 p u s h ( @QC10 , $id ) ;
734 p u s h ( @ Q C t a b l e 1 0 , $b ) ;
735 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 / 1 0 ) { 736 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 . 5 / 1 0 ) {
737 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*6/10 - $i ) ;
738 p u s h ( @QC9 , $id ) ;
739 p u s h ( @ Q C t a b l e 9 , $b ) ;
740 } e l s e {
741 my $b = $ Q C t a b l e 1 0 [ -1]+ $ q c i n t e r v a l ;
742 p u s h ( @QC10 , $id ) ;
743 p u s h ( @ Q C t a b l e 1 0 , $b ) ;
744 }
745 } e l s e {
746 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 1 . 5 / 1 0 ) {
747 my $b = $ Q C t a b l e 1 2 [ -1]+ $ q c i n t e r v a l ;
748 p u s h ( @QC12 , $id ) ;
749 p u s h ( @ Q C t a b l e 1 2 , $b ) ;
750 } e l s e {
751 my $b = $ Q C t a b l e 1 1 [ -1]+ $ q c i n t e r v a l ;
752 p u s h ( @QC11 , $id ) ;
753 p u s h ( @ Q C t a b l e 1 1 , $b ) ;
754 }
755 }
756 }
757 my $ e n d t a b l e = 1 0 + $ Q C t a b l e 9 [ -1];
758 for ( my $i = $ s h i p { $ t a r g }{ c o n t } -1; $i > = 0 ; $i - -) { 759 my $id = $ t a r g . ’ - ’ . s p r i n t f ( " %04 d " , $i ) . ’ in ’ ; 760 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 / 4 ) {
761 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t } - $i ) ;
762 p u s h ( @QC12 , $id ) ;
763 p u s h ( @ Q C t a b l e 1 2 , $b ) ;
764 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 2 / 4 ) {
765 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*3/4 - $i ) ;
766 p u s h ( @QC11 , $id ) ;
767 p u s h ( @ Q C t a b l e 1 1 , $b ) ;
768 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 1 / 4 ) {
769 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*2/4 - $i ) ;
770 p u s h ( @QC10 , $id ) ;
771 p u s h ( @ Q C t a b l e 1 0 , $b ) ;
772 } e l s e {
773 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*1/4 - $i ) ;
774 p u s h ( @QC9 , $id ) ;
775 p u s h ( @ Q C t a b l e 9 , $b ) ;
776 }
777 }
778 }
779 p r i n t " [ QC1 ] " ,$# QC1 , " [ QC2 ] " ,$# QC2 , " [ QC3 ] " ,$# QC3 , " [ QC4 ] " ,$# QC4 , " \ n " ; 780 p r i n t " [ QC5 ] " ,$# QC5 , " [ QC6 ] " ,$# QC6 , " [ QC7 ] " ,$# QC7 , " [ QC8 ] " ,$# QC8 , " \ n " ; 781 p r i n t " [ QC9 ] " ,$# QC9 , " [ Q C 1 0 ] " ,$# QC10 , " [ Q C 1 1 ] " ,$# QC11 , " [ Q C 1 2 ] " ,$# QC12 , " \ n " ; 782 }
783 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
784 sub QC4 {
785 if ($# QC13 >=0 || $# QC14 >=0 || $# QC15 >=0 || $# QC16 > = 0 ) { 786 # & Q C 5 ($_ [ 0 ] ) ;
787 p r i n t " Q U A T R O ␣ B O O K I N G ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! \ n " ;
付録
B
ソースコードB.2
シミュレーションメインプログラム137
788 p r i n t " Q U A T R O ␣ B O O K I N G ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! \ n " ; 789 p r i n t " Q U A T R O ␣ B O O K I N G ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! \ n " ;
790 } e l s e {
791 my $ t a r g = $_ [ 0 ] ;
792 for ( my $i = $ s h i p { $ t a r g }{ c o n t } -1; $i > = 0 ; $i - -) { 793 my $id = $ t a r g . ’ - ’ . s p r i n t f ( " %04 d " , $i ) . ’ out ’ ; 794 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 9 / 1 0 ) {
795 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t } - $i ) ;
796 p u s h ( @QC16 , $id ) ;
797 p u s h ( @ Q C t a b l e 1 6 , $b ) ;
798 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 8 / 1 0 ) {
799 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*9/10 - $i ) ;
800 p u s h ( @QC15 , $id ) ;
801 p u s h ( @ Q C t a b l e 1 5 , $b ) ;
802 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 6 / 1 0 ) {
803 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*8/10 - $i ) ;
804 p u s h ( @QC14 , $id ) ;
805 p u s h ( @ Q C t a b l e 1 4 , $b ) ;
806 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 / 1 0 ) { 807 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 . 5 / 1 0 ) {
808 my $b = $t + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*6/10 - $i ) ;
809 p u s h ( @QC13 , $id ) ;
810 p u s h ( @ Q C t a b l e 1 3 , $b ) ;
811 } e l s e {
812 my $b = $ Q C t a b l e 1 4 [ -1]+ $ q c i n t e r v a l ;
813 p u s h ( @QC14 , $id ) ;
814 p u s h ( @ Q C t a b l e 1 4 , $b ) ;
815 }
816 } e l s e {
817 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 1 . 5 / 1 0 ) {
818 my $b = $ Q C t a b l e 1 6 [ -1]+ $ q c i n t e r v a l ;
819 p u s h ( @QC16 , $id ) ;
820 p u s h ( @ Q C t a b l e 1 6 , $b ) ;
821 } e l s e {
822 my $b = $ Q C t a b l e 1 5 [ -1]+ $ q c i n t e r v a l ;
823 p u s h ( @QC15 , $id ) ;
824 p u s h ( @ Q C t a b l e 1 5 , $b ) ;
825 }
826 }
827 }
828 my $ e n d t a b l e = 1 0 + $ Q C t a b l e 1 3 [ -1];
829 for ( my $i = $ s h i p { $ t a r g }{ c o n t } -1; $i > = 0 ; $i - -) { 830 my $id = $ t a r g . ’ - ’ . s p r i n t f ( " %04 d " , $i ) . ’ in ’ ; 831 if ( $i >= $ s h i p { $ t a r g }{ c o n t } * 3 / 4 ) {
832 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t } - $i ) ;
833 p u s h ( @QC16 , $id ) ;
834 p u s h ( @ Q C t a b l e 1 6 , $b ) ;
835 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 2 / 4 ) {
836 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*3/4 - $i ) ;
837 p u s h ( @QC15 , $id ) ;
838 p u s h ( @ Q C t a b l e 1 5 , $b ) ;
839 } e l s i f ( $i >= $ s h i p { $ t a r g }{ c o n t } * 1 / 4 ) {
840 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*2/4 - $i ) ;
841 p u s h ( @QC14 , $id ) ;
842 p u s h ( @ Q C t a b l e 1 4 , $b ) ;
843 } e l s e {
844 my $b = $ e n d t a b l e + $ q c i n t e r v a l *( $ s h i p { $ t a r g }{ c o n t }*1/4 - $i ) ;
845 p u s h ( @QC13 , $id ) ;
846 p u s h ( @ Q C t a b l e 1 3 , $b ) ;
847 }
付録
B
ソースコードB.2
シミュレーションメインプログラム138
848 }
849 }
850 p r i n t " [ QC1 ] " ,$# QC1 , " [ QC2 ] " ,$# QC2 , " [ QC3 ] " ,$# QC3 , " [ QC4 ] " ,$# QC4 , " \ n " ; 851 p r i n t " [ QC5 ] " ,$# QC5 , " [ QC6 ] " ,$# QC6 , " [ QC7 ] " ,$# QC7 , " [ QC8 ] " ,$# QC8 , " \ n " ; 852 p r i n t " [ QC9 ] " ,$# QC9 , " [ Q C 1 0 ] " ,$# QC10 , " [ Q C 1 1 ] " ,$# QC11 , " [ Q C 1 2 ] " ,$# QC12 , " \ n " ; 853 }
854 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 855 sub X T f r e e s t a c k i n g {
856 my $ t a r g = $_ [ 0 ] ;
857 if ( $XT { $ t a r g }{ t y p e } eq ’ in ’ ) {
858 my $ s h i p n u m = s u b s t r ( $XT { $ t a r g }{ tag } ,0 ,2) ; 859 my $ c o n t n u m = s u b s t r ( $XT { $ t a r g }{ tag } ,3 ,4) ;
860 my $ d a y =0;
861 my @ r a t e = ( 1 , 0 . 7 , 0 . 4 , 0 . 2 , 0 . 1 ) ;
862 for ( my $i =4; $i > = 0 ; $i - -) {
863 if ( $ c o n t n u m < $ r a t e [ $i ]* $ s h i p { $ s h i p n u m }{ c o n t }) {
864 $ d a y = $i +1;
865 l a s t ;
866 }
867 }
868 if ( $ X T M [ $ s h i p n u m ][ $ d a y ] == 0) {
869 my ( $start , $ e n d ) =(0 ,0) ;
870 if ( $ d a y == 5 ) {
871 $ s t a r t =0;
872 $ e n d = $ s h i p { $ s h i p n u m }{ c o n t } / 1 0 ;
873 } e l s i f ( $ d a y == 4 ) {
874 $ s t a r t = $ s h i p { $ s h i p n u m }{ c o n t } / 1 0 ; 875 $ e n d = $ s h i p { $ s h i p n u m }{ c o n t } * 2 / 1 0 ;
876 } e l s i f ( $ d a y == 3 ) {
877 $ s t a r t = $ s h i p { $ s h i p n u m }{ c o n t } * 2 / 1 0 ; 878 $ e n d = $ s h i p { $ s h i p n u m }{ c o n t } * 4 / 1 0 ;
879 } e l s i f ( $ d a y == 2 ) {
880 $ s t a r t = $ s h i p { $ s h i p n u m }{ c o n t } * 4 / 1 0 ; 881 $ e n d = $ s h i p { $ s h i p n u m }{ c o n t } * 7 / 1 0 ;
882 } e l s e {
883 $ s t a r t = $ s h i p { $ s h i p n u m }{ c o n t } * 7 / 1 0 ;
884 $ e n d = $ s h i p { $ s h i p n u m }{ c o n t };
885 }
886 my $a = $ s t a r t ;
887 p r i n t " [ s ] " , $start , " [ e ] " , $end , " ␣ " ;
888 do {
889 OUT : for ( my $i =4; $i > = 0 ; $i - -) {
890 for ( my $j =4; $j > = 0 ; $j - -) {
891 if ( $a >= $ e n d ) {
892 l a s t OUT ;
893 }
894 my $id = $ s h i p n u m . ’ - ’ . s p r i n t f ( " %04 d " , $a ) . ’ in ’ ; 895 $ C o n t L i s t { $id }={ " t i m e " = > $Td * int ( $t / $Td ) +7710 ,
896 " p o s i t i o n " = > $ b l o c k [ $i ][ $j ]};
897 $ t o d a y [ $i ][ $j ] + + ;
898 $ X T H [ $i ][ $j ] + + ;
899 $ X T M [ $ s h i p n u m ][ $ d a y ] + + ;
900 $a ++;
901 }
902 }
903 } w h i l e ( $a < $ e n d ) ;
904 p r i n t " [ s h i p " , $ s h i p n u m , " - " , $day , " in ␣ is ␣ c o m i n g ] " , $ X T M [ $ s h i p n u m ][ $ d a y ] , "
␣ $t \ n " ; 905 # = p o d
906 for ( my $i =0; $i <= $n ; $i ++) {
付録
B
ソースコードB.2
シミュレーションメインプログラム139
907 for ( my $j =0; $j <= $m ; $j ++) {
908 p r i n t s p r i n t f ( " %2 s " , $ X T H [ $i ][ $j ]) , " ␣ " ;
909 } p r i n t " ␣ | ␣ " ;
910 for ( my $j =0; $j <= $m ; $j ++) {
911 p r i n t s p r i n t f ( " %2 s " , $ X T R [ $i ][ $j ]) , " ␣ " ;
912 $ X T R [ $i ][ $j ] = 0 ;
913 $ X T H [ $i ][ $j ] = 0 ;
914 } p r i n t " ␣ | ␣ " ;
915 for ( my $j =0; $j <= $m ; $j ++) {
916 p r i n t s p r i n t f ( " %2 s " , $ X T S [ $i ][ $j ]) , " ␣ " ;
917 $ X T S [ $i ][ $j ] = 0 ;
918 } p r i n t " \ n " ;
919 }
920 p r i n t " - - - -\ n " ;
921 & B l o c k s e a r c h () ;
922 & S t a t e p r i n t () ;
923 p r i n t " - - - -\ n " ; 924 # = c u t
925 } e l s e {
926 r e t u r n ;# a l r e a d y r e s e r v e d
927 }
928 } e l s e {
929 r e t u r n ;# o u t c o n t a i n e r w o u l d be t h r o u g h
930 }
931 }
932 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 933 sub F r e e s t a c k i n g {
934 my $ t a r g = $_ [ 0 ] ;
935 my @ C o n t =() ;
936 for ( my $i =0; $i < $ s h i p { $ t a r g }{ c o n t }; $i ++) { 937 my $id = $ t a r g . ’ - ’ . s p r i n t f ( " %04 d " , $i ) . ’ out ’ ;
938 p u s h ( @Cont , $id ) ;
939 }
940 # p r i n t "[ s t a r t ]$# C o n t \ n ";
941 my $ m i n = $ b l o c k s t a t e [4][4] - $ t o d a y [ 4 ] [ 4 ] ;
942 # my $m a x =$m i n ;
943 for ( my $i =4; $i > = 0 ; $i - -) {
944 for ( my $j =4; $j > = 0 ; $j - -) {
945 if ( $ b l o c k s t a t e [ $i ][ $j ] - $ t o d a y [ $i ][ $j ] < $ m i n ) { 946 $ m i n = $ b l o c k s t a t e [ $i ][ $j ] - $ t o d a y [ $i ][ $j ];
947 # } e l s i f ($b l o c k s t a t e [$i ][$j ] -$t o d a y [$i ][$j ] >$m a x ) {
948 # $m a x =$b l o c k s t a t e [$i ][$j ] -$t o d a y [$i ][$j ];
949 }
950 }
951 }
952 my ( $start , $ e n d ) =(0 ,0) ;
953 p r i n t " [ min ] $ m i n ␣ [ c o n t ]$# C o n t \ n " ; 954 OUT : for ( my $i =0; $i < = 4 ; $i ++) {
955 for ( my $j =0; $j < = 4 ; $j ++) {
956 my $ d e f = $ b l o c k s t a t e [ $i ][ $j ] - $ t o d a y [ $i ][ $j ];
957 if ( $def > $ m i n && $min >0) {
958 $ e n d = $ s t a r t + $def - $ m i n ;
959 } e l s i f ( $ d e f == $ m i n ) {
960 n e x t ;
961 } e l s e {
962 $ e n d = $ s t a r t + $ d e f + $ m i n ;
963 }
964 for ( my $k = $ s t a r t ; $k < $ e n d ; $k ++) { 965 my @ r a t e = ( 1 , 9 / 1 0 , 8 / 1 0 , 6 / 1 0 , 3 / 1 0 ) ;
966 my $ t i m e =0;
付録
B
ソースコードB.2
シミュレーションメインプログラム140
967 for ( my $l =4; $l > = 0 ; $l - -) {
968 my $ n u m = s u b s t r ( $ C o n t [0] ,0 ,2) ;
969 if ( $k < $ r a t e [ $i ]* $ s h i p { $ n u m }{ c o n t }) {
970 $ t i m e = $Td *( int ( $t / $Td ) + $l +1) ;
971 }
972 }
973 $ C o n t L i s t { s h i f t ( @ C o n t ) }={
974 " t i m e " = > $ t i m e +7710 ,
975 " p o s i t i o n " = > $ b l o c k [ $i ][ $j ]};
976 $ t o d a y [ $i ][ $j ] + + ;
977 $ X T H [ $i ][ $j ] + + ;
978 if ($# Cont <0) {
979 r e t u r n ;
980 }
981 }
982 $ s t a r t += $ e n d ;
983 }
984 }
985 $ e n d =$# C o n t ;
986 for ( my $a =0; $a <= $ e n d ; $a ++) {
987 for ( my $i =0; $i < = 4 ; $i ++) {
988 for ( my $j =0; $j < = 4 ; $j ++) {
989 my $ n u m = s u b s t r ( $ C o n t [0] ,3 ,4) ;
990 my $ s h i p n u m = s u b s t r ( $ C o n t [0] ,0 ,2) ;
991 my @ r a t e = ( 1 , 9 / 1 0 , 8 / 1 0 , 6 / 1 0 , 3 / 1 0 ) ;
992 for ( my $l =4; $l > = 0 ; $l - -) {
993 if ( $num < $ r a t e [ $i ]* $ s h i p { $ s h i p n u m }{ c o n t }) {
994 $ t i m e = $Td *( int ( $t / $Td ) + $l +1) ;
995 l a s t ;
996 }
997 }
998 $ C o n t L i s t { s h i f t ( @ C o n t ) }={ " t i m e " = > $ t i m e +7710 ,
999 " p o s i t i o n " = > $ b l o c k [ $i ][ $j ]};
1000 $ t o d a y [ $i ][ $j ] + + ;
1001 $ X T H [ $i ][ $j ] + + ;
1002 if ($# Cont <0) {
1003 r e t u r n ;
1004 }
1005 }
1006 }
1007 }
1008 # p r i n t "[ s t a r t ]$# C o n t \ n ";
1009 }
1010 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1011 sub B l o c k s e a r c h {
1012 for ( my $i =0; $i <5; $i ++) {
1013 for ( my $j =0; $j <5; $j ++) {
1014 $ b l o c k s t a t e [ $i ][ $j ] = 0 ;
1015 f o r e a c h $_ ( k e y s %{ ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}) {
1016 if ( $ { ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}{ $_ }{ ID } eq ’ f r e e ’ ) {
1017 $ b l o c k s t a t e [ $ { ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}{ $_ }{ row }][ $ { ’ Y a r d ’ . $ b l o c k [ $i ][ $j ]}{ $_ }{ c o l u m n } ] + + ;
1018 } e l s e {
1019 # if ($C o n t L i s t {$_ } = = 2 4 6 7 2 * i n t ($t / 2 4 6 7 2 ) + 7 7 1 0 ) {
1020 # $t o d a y [${ ’ Y a r d ’.$b l o c k [$i ][$j ] } {$_ }{ r o w } ] [${ ’ Y a r d ’.$b l o c k [
$i ][$j ] } {$_ }{ c o l u m n } ] + + ;
1021 # }
1022 }
1023 }# p r i n t "\ n ";
1024 }
付録
B
ソースコードB.2
シミュレーションメインプログラム141
1025 }
1026 }
1027 # # # # # # # # # # # # # S T A C K # # # # # # # # # # # # # # # # # # # # # # # 1028 sub T C s e a r c h 1 {
1029 my $ t a r g = $_ [ 0 ] ;
1030 my $ t a g l = s u b s t r ( $targ ,0 ,2) ;
1031 my $ l e f t =0;
1032 my $ r i g h t =0;
1033 for ( my $i =1; $i <= $ A R G V [ 2 ] ; $i ++) {
1034 if ( $ { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $i } [ 0 ] < $ t a g l ) {
1035 $ l e f t = $i ;
1036 } e l s i f ( $ { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $i } [ 0 ] == $ t a g l ) {
1037 r e t u r n $i ;
1038 } e l s i f ( $ { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $i } [ 0 ] > $ t a g l ) {
1039 $ r i g h t = $i ;
1040 l a s t ;
1041 }
1042 }
1043 if ( $ r i g h t = = 0 ) {
1044 r e t u r n $ l e f t ;
1045 } e l s i f ( $ l e f t = = 0 ) {
1046 r e t u r n $ r i g h t ;
1047 } e l s e {
1048 if ( abs ( $ { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $ l e f t }[0] - $ t a g l ) > abs ( $ { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ .
$ r i g h t }[0] - $ t a g l ) ) {# n e a r e s t
1049 r e t u r n $ r i g h t ;
1050 } e l s i f ( abs ( $ { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $ l e f t }[0] - $ t a g l ) eq abs ( $ { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $ r i g h t }[0] - $ t a g l ) ) {
1051 if ( $ # { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $ l e f t } >$#{ ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $ r i g h t }) {#
m i n i m u m h a n d l i n g
1052 r e t u r n $ r i g h t ;
1053 } e l s i f ( $ # { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $ l e f t } = = $ # { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $ r i g h t }) { 1054 if ( $ { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $ l e f t }[ -1] > $ { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $ r i g h t
}[ -1]) {# l o n g e r f r e e t i m e
1055 r e t u r n $ r i g h t ;
1056 } e l s i f ( $ { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ . $ l e f t }[ -1]== $ { ’ b l o c k ’ . $_ [ 1 ] . ’ TC ’ .
$ r i g h t }[ -1]) {
1057 r e t u r n $ l e f t ;
1058 } e l s e {
1059 r e t u r n $ l e f t ;
1060 }
1061 } e l s e {
1062 r e t u r n $ l e f t ;
1063 }
1064 } e l s e {
1065 r e t u r n $ l e f t ;
1066 }
1067 }
1068 }
1069 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1070 sub s t a c k {
1071 my ( $x , $y , $u ) = @_ ;
1072 my $yl = s u b s t r ( $y ,0 ,2) ; 1073 my $yw = s u b s t r ( $y ,2 ,1) ; 1074 my $yh = s u b s t r ( $y , -1) ;
1075 my $ s t o r a g e t i m e =5+ $yw /2+6 - $yh +1;
1076 my $ r e t r i e v a l t i m e = ( 5 + $yw +6 - $yh ) / 2 + 1 ; 1077 if ( $yl == $ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ 0 ] ) { 1078 if ( $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1] < $t ) { 1079 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ;
付録
B
ソースコードB.2
シミュレーションメインプログラム142
1080 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t ) ;
1081 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t + int ( $ s t o r a g e t i m e + $ r e t r i e v a l t i m e + 0 . 1 ) ) ;
1082 } e l s e {
1083 my $z = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ - 1 ] + 1 ; 1084 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ; 1085 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z ) ;
1086 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z + int ( $ s t o r a g e t i m e + $ r e t r i e v a l t i m e + 0 . 1 ) ) ;
1087 }
1088 } e l s e {
1089 my $i = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[0] - $yl ; 1090 if ( $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1] < $t ) { 1091 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ; 1092 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t ) ;
1093 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t + int ( abs ( $i ) * 1 0 / 4 + 0 . 1 ) ) ; 1094 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ;
1095 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t + int ( abs ( $i ) * 1 0 / 4 + 0 . 1 ) ) ;
1096 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $t + int ( abs ( $i ) * 1 0 / 4 + $ s t o r a g e t i m e +
$ r e t r i e v a l t i m e + 0 . 1 ) ) ; 1097 @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ 0 ] = $yl ;
1098 } e l s e {
1099 my $z = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ - 1 ] + 1 ; 1100 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ; 1101 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z ) ;
1102 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z + int ( abs ( $i ) * 1 0 / 4 + 0 . 1 ) ) ; 1103 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $yl ) ;
1104 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z + int ( abs ( $i ) * 1 0 / 4 + 0 . 1 ) ) ;
1105 p u s h ( @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } , $z + int ( abs ( $i ) * 1 0 / 4 + $ s t o r a g e t i m e +
$ r e t r i e v a l t i m e + 0 . 1 ) ) ; 1106 @ { ’ b l o c k ’ . $u . ’ TC ’ . $x } [ 0 ] = $yl ;
1107 }
1108 }
1109 for ( my $i = $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -2]; $i <= $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1]; $i ++) { 1110 $ { ’ T A B L E ’ . $u }[ $i ][ $yl ]= ’ TC ’ . $yl ;
1111 }
1112 r e t u r n $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -2] , $ { ’ b l o c k ’ . $u . ’ TC ’ . $x }[ -1];
1113 }
1114 # # # # # # # # # # # # # # # # # # # # # # # # 1115 sub h e i g h t c o u n t {
1116 my $bl = $_ [ 0 ] ;
1117 @ { $bl . ’ h1 ’ } = ( ) ; 1118 @ { $bl . ’ h2 ’ } = ( ) ; 1119 @ { $bl . ’ h3 ’ } = ( ) ; 1120 @ { $bl . ’ h4 ’ } = ( ) ; 1121 @ { $bl . ’ h5 ’ } = ( ) ;
1122 f o r e a c h $_ ( s o r t k e y s %{ ’ Y a r d ’ . $bl }) { 1123 if ( $ { ’ Y a r d ’ . $bl }{ $_ }{ h e i g h t } = = 1 ) { 1124 if ( $ { ’ Y a r d ’ . $bl }{ $_ }{ ID } = ~ / f r e e /) {
1125 p u s h ( @ { $bl . ’ h1 ’ } , $_ ) ;
1126 }
1127 } e l s i f ( $ { ’ Y a r d ’ . $bl }{ $_ }{ h e i g h t } = = 2 ) { 1128 if ( $ { ’ Y a r d ’ . $bl }{ $_ }{ ID } = ~ / f r e e /) {
1129 p u s h ( @ { $bl . ’ h2 ’ } , $_ ) ;
1130 }
1131 } e l s i f ( $ { ’ Y a r d ’ . $bl }{ $_ }{ h e i g h t } = = 3 ) { 1132 if ( $ { ’ Y a r d ’ . $bl }{ $_ }{ ID } = ~ / f r e e /) {
1133 p u s h ( @ { $bl . ’ h3 ’ } , $_ ) ;
1134 }
1135 } e l s i f ( $ { ’ Y a r d ’ . $bl }{ $_ }{ h e i g h t } = = 4 ) { 1136 if ( $ { ’ Y a r d ’ . $bl }{ $_ }{ ID } = ~ / f r e e /) {
1137 p u s h ( @ { $bl . ’ h4 ’ } , $_ ) ;