import Ġjava . awt . Point č Ċ import Ġkotlin . math . abs č Ċ import Ġkotlin . random . Random čĊč Ċ operator Ġfun ĠPoint . plus ( other Ġ: ĠPoint ) Ġ: ĠPoint Ġ{ čĊĠĠĠ Ġreturn ĠPoint ( this . x Ġ+ Ġother . x , Ġthis . y Ġ+ Ġother . y ) č Ċ } čĊč Ċ fun ĠPoint . toString () Ġ: ĠString Ġ{ čĊĠĠĠ Ġreturn Ġ" (${ this . x }, Ġ${ this . y })" č Ċ } čĊč Ċ fun Ġ< T > ĠArrayList < ArrayList < T >> . at Point ( point : ĠPoint ) Ġ: ĠT Ġ{ čĊĠĠĠ Ġreturn Ġthis [ point . x ][ point . y ] č Ċ } čĊč Ċ fun Ġ< T > Ġfill Random ly 2 d Array ( čĊĠĠĠĠĠĠĠ Ġdefault : ĠArrayList < ArrayList < T >>, čĊĠĠĠĠĠĠĠ Ġelements : ĠArray < T >, čĊĠĠĠĠĠĠĠ Ġarray Size : ĠInt , čĊĠĠĠĠĠĠĠ Ġamount : ĠDouble ): čĊĠĠĠĠĠĠĠ ĠArrayList < ĠArrayList < T > Ġ> Ġ{ čĊĠĠĠ Ġreturn Ġfill Random ly 2 d Array ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault , Ġelements , Ġarray Size , Ġamount . toInt () čĊĠĠĠ Ġ) č Ċ } čĊč Ċ fun Ġ< T > Ġfill Random ly 2 d Array ( čĊĠĠĠĠĠĠĠ Ġdefault : ĠArrayList < ArrayList < T >>, čĊĠĠĠĠĠĠĠ Ġelements : ĠArray < T >, čĊĠĠĠĠĠĠĠ Ġarray Size : ĠInt , čĊĠĠĠĠĠĠĠ Ġamount : ĠFloat ): čĊĠĠĠĠĠĠĠ ĠArrayList < ĠArrayList < T > Ġ> Ġ{ čĊĠĠĠ Ġreturn Ġfill Random ly 2 d Array ( čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault , Ġelements , Ġarray Size , Ġamount . toInt () čĊĠĠĠ Ġ) č Ċ } čĊč Ċ fun Ġ< T > Ġfill Random ly 2 d Array ( čĊĠĠĠĠĠĠĠ Ġdefault : ĠArrayList < ArrayList < T >>, čĊĠĠĠĠĠĠĠ Ġelements : ĠArray < T >, čĊĠĠĠĠĠĠĠ Ġarray Size : ĠInt , čĊĠĠĠĠĠĠĠ Ġamount : ĠInt ): čĊĠĠĠĠĠĠĠ ĠArrayList < ĠArrayList < T > Ġ> Ġ{ čĊčĊĠĠĠ Ġ// ĠFunction ĠGlobals čĊĠĠĠ Ġvar Ġarray X Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġarray Y Ġ= Ġ 0 čĊĠĠĠ Ġvar Ġ_ amount Ġ= Ġamount čĊčĊĠĠĠ Ġfun Ġnext Right Index () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ(++ array X Ġ>= Ġarray Size ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray X Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ array Y Ġ>= Ġarray Size ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray Y Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// ĠS afety ĠCheck čĊĠĠĠ Ġif Ġ( amount Ġ> Ġarray Size Ġ* Ġarray Size ) čĊĠĠĠĠĠĠĠ Ġthrow ĠArray Index OutOfBoundsException (" all Ġof Ġb om bs Ġcannot Ġbe Ġplaced Ġinside ") čĊčĊĠĠĠ Ġif Ġ( elements . size Ġ!= Ġ 2 ) čĊĠĠĠĠĠĠĠ Ġthrow ĠArray Index OutOfBoundsException (" incorrect Ġarray Ġsize ") čĊčĊĠĠĠ Ġ// ĠF illing ĠAll ĠWith ĠFirst ĠValue Ġ/ ĠResize ĠIt čĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġarray Size ) Ġ{ čĊĠĠĠĠĠĠĠ Ġdefault . add ( ArrayList ( array Size )) čĊĠĠĠĠĠĠĠ Ġdefault [ i ]. fill ( array Size , Ġelements [ 0 ]) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġwhile Ġ(_ amount -- Ġ!= Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠ Ġarray X Ġ= Ġabs ( Random . nextInt ()) Ġ% Ġarray Size čĊĠĠĠĠĠĠĠ Ġarray Y Ġ= Ġabs ( Random . nextInt ()) Ġ% Ġarray Size čĊčĊĠĠĠĠĠĠĠ Ġwhile Ġ( default [ array X ][ array Y ] Ġ== Ġelements [ 1 ]) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Right Index () čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġdefault [ array X ][ array Y ] Ġ= Ġelements [ 1 ] čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġreturn Ġdefault č Ċ } čĊč Ċ fun Ġ< T , ĠK > Ġfind Random B omb ( array : ĠArrayList < ArrayList < T >>, Ġselected : ĠArrayList < ArrayList < K >>, Ġb omb Indicator : ĠT , Ġselected Indicator : ĠK ) Ġ: ĠPoint Ġ{ čĊĠĠĠ Ġwhile Ġ( Ġtrue Ġ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġabs ( Random . nextInt ()) Ġ% Ġarray . size čĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġabs ( Random . nextInt ()) Ġ% Ġarray . size čĊĠĠĠĠĠĠĠ Ġif Ġ( array [ x ][ y ] Ġ== Ġb omb Indicator Ġ&& Ġselected [ x ][ y ] Ġ!= Ġselected Indicator ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPoint ( x , Ġy ) čĊĠĠĠ Ġ} č Ċ }