• 検索結果がありません。

シミュレーションメインプログラム

第 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 ’ } , $_ ) ;

関連したドキュメント