package Ġprocess Ċ Ċ import Ġmodel . Attribute Ċ import Ġmodel . DataObject Ċ import Ġmodel . Object Class Ċ import Ġutils . Table Ċ import Ġkotlin . math . abs Ċ Ċ fun Ġfind Class ( ĊĠĠĠ Ġk : ĠInt , ĊĠĠĠ Ġattributes With Values : ĠMap < Attribute , ĠDouble >, ĊĠĠĠ Ġindexes : ĠTable < Attribute , ĠData Object , ĠDouble > Ċ ): ĠObject Class Ġ{ ĊĠĠĠ Ġreturn Ġattributes With Values ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfind Near Class By Value ( k , Ġit . key , Ġit . value , Ġindexes . getBy Column ( it . key )) Ġ} ĊĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ. max By Ġ{ Ġit . value . size Ġ} !! ĊĠĠĠĠĠĠĠ Ġ. key Ċ } Ċ Ċ private Ġfun Ġfind Near Class By Value ( ĊĠĠĠ Ġk : ĠInt , ĊĠĠĠ Ġattr : ĠAttribute , ĊĠĠĠ Ġvalue : ĠDouble , ĊĠĠĠ Ġindexes : ĠMap < DataObject , ĠDouble > Ċ ): ĠObject Class Ġ{ ĊĠĠĠ Ġreturn Ġindexes ĊĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPair ( it . key , Ġabs ( it . value Ġ- Ġvalue )) Ġ} ĊĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠ Ġ. take ( k ) ĊĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . first . type Ġ} ĊĠĠĠĠĠĠĠ Ġ. max By Ġ{ Ġit . value . size Ġ} !! ĊĠĠĠĠĠĠĠ Ġ. key Ċ } Ċ