package Ġdata . structure Ċ Ċ class ĠUnder ground System () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtime Ġ= Ġmutable ListOf < Int >() ĊĠĠĠ Ġprivate Ġval Ġids Ġ= Ġmutable ListOf < Int >() ĊĠĠĠ Ġprivate Ġval Ġnames Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġprivate Ġval Ġin Station Ġ= Ġmutable ListOf < Boolean >() ĊĊĠĠĠ Ġfun Ġcheck In ( id : ĠInt , Ġstation Name : ĠString , Ġt : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtime . add ( t ) ĊĠĠĠĠĠĠĠ Ġids . add ( id ) ĊĠĠĠĠĠĠĠ Ġnames . add ( station Name ) ĊĠĠĠĠĠĠĠ Ġin Station . add ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Out ( id : ĠInt , Ġstation Name : ĠString , Ġt : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtime . add ( t ) ĊĠĠĠĠĠĠĠ Ġids . add ( id ) ĊĠĠĠĠĠĠĠ Ġnames . add ( station Name ) ĊĠĠĠĠĠĠĠ Ġin Station . add ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Average Time ( start Station : ĠString , Ġend Station : ĠString ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsum Time Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġout Ids Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠ Ġval Ġout Time Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġnames . last Index Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( names [ i ] Ġ== Ġend Station Ġ&& Ġ! in Station [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Ids . add ( ids [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Time . add ( time [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġnames . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( names [ i ] Ġ== Ġstart Station Ġ&& Ġin Station [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ Ġout Ids . indexOf ( ids [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum Time Ġ+= Ġ( out Time [ index ] Ġ- Ġtime [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsum Time . toDouble () Ġ/ Ġcount . toDouble () ĊĠĠĠ Ġ} Ċ Ċ }