import Ġkotlin . collections .* Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= Ġif Ġ( args . size Ġ> Ġ 0 ) Ġargs [ 0 ]. toInt () Ġelse Ġ 1 0 0 ĊĠĠĠ Ġval Ġn Ġ= Ġif Ġ( args . size Ġ> Ġ 1 ) Ġargs [ 1 ]. toInt () Ġelse Ġ 1 0 0 ĊĠĠĠ Ġval Ġmod Ġ= Ġ( size Ġ* Ġ 1 0 ). to UInt () ĊĠĠĠ Ġvar Ġhit Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġmissed Ġ= Ġ 0 ĊĠĠĠ Ġval Ġrng 0 Ġ= ĠL CG ( 0 . to UInt ()) ĊĠĠĠ Ġval Ġrng 1 Ġ= ĠL CG ( 1 . to UInt ()) ĊĠĠĠ Ġval Ġl ru Ġ= ĠL RU ( size ) ĊĠĠĠ Ġrepeat ( n ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn 0 Ġ= Ġrng 0 . next () Ġ% Ġmod ĊĠĠĠĠĠĠĠ Ġl ru . put ( n 0 , Ġn 0 ) ĊĠĠĠĠĠĠĠ Ġvar Ġn 1 Ġ= Ġrng 1 . next () Ġ% Ġmod ĊĠĠĠĠĠĠĠ Ġif Ġ( lru . get ( n 1 ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmissed Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhit Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln ("$ hit \ n $ missed ") Ċ } Ċ Ċ class ĠL RU ( size : ĠInt ) Ġ{ ĊĠĠĠ Ġpublic Ġval Ġsize Ġ= Ġsize ĊĠĠĠ Ġval Ġmap Ġ= ĠLinkedHashMap < UInt , ĠUInt >( size ) ĊĊĠĠĠ Ġpublic Ġfun Ġget ( key : ĠUInt ): ĠUInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġmap . get ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( v Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . remove ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put ( key , Ġv ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġfun Ġput ( key : ĠUInt , Ġvalue : ĠUInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( map . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . remove ( key ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( map . size Ġ== Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . remove ( map . keys . first ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmap . put ( key , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠL CG ( seed : ĠUInt ) Ġ{ ĊĠĠĠ Ġvar Ġ_ seed Ġ= Ġseed ĊĠĠĠ Ġpublic Ġfun Ġnext (): ĠUInt Ġ{ ĊĠĠĠĠĠĠĠ Ġl cg () ĊĠĠĠĠĠĠĠ Ġreturn Ġ_ seed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġl cg () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ seed Ġ= Ġ( A Ġ* Ġ_ seed Ġ+ ĠC ) Ġ% ĠM ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠA Ġ= Ġ 1 1 0 3 5 1 5 2 4 5 . to UInt () ĊĠĠĠĠĠĠĠ Ġval ĠC Ġ= Ġ 1 2 3 4 5 . to UInt () ĊĠĠĠĠĠĠĠ Ġval ĠM Ġ= Ġ( 1 . sh l ( 3 1 )). to UInt () ĊĠĠĠ Ġ} Ċ } Ċ