package Ġcc . v ile da . ml . fn ord predict Ċ Ċ import Ġde . j ol ly day . H oliday Calendar Ċ import Ġde . j ol ly day . H oliday Manager Ċ import Ġde . j ol ly day . Manager Parameters Ċ import Ġorg . apache . commons . math 3 . util . Math Arrays Ċ import Ġjava . io . Serializable Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . time .* Ċ import Ġjava . time . format . DateTime Formatter Ċ Ċ fun Ġfn ord Open s In Hours From Now ( trained Data : ĠList < Status Date Data >): ĠLocalDateTime Ġ{ ĊĠĠĠ Ġval Ġnow Ġ= Ġut c ( Z onedDateTime . of ( LocalDate . now (), ĠLocal Time . MIN , ĠZone Id . system Default ())) ĊĠĠĠ Ġval Ġresult Ġ= Ġfn ord Open s In Hours From ( now , Ġtrained Data ) ĊĊĠĠĠ Ġreturn Ġresult ?. input !! Ċ } Ċ Ċ fun Ġfn ord Open s In Hours From ( dateTime : ĠLocalDateTime , Ġtrained Data : ĠList < Status Date Data >): ĠClass ify Result With Distance ? Ġ{ ĊĠĠĠ Ġreturn ĠInt Progress ion . from Closed Range ( 0 , Ġ 4 Ġ* Ġ 2 4 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠdateTime . plus Hours ( it . to Long ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġclassify ( it , Ġtrained Data ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. min By Ġ{ Ġit . distance Ġ} Ċ } Ċ Ċ val Ġdata : ĠList < Status Date Data > Ġby Ġlazy Ġ{ ĊĠĠĠ Ġval Ġlines Ġ= ĠFiles . read All Lines ( Paths . get (" normalized . csv ")) ĊĠĠĠ Ġlines . map Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġit . split ("; ") ĊĠĠĠĠĠĠĠ ĠStatus Date Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit [ 1 ]. toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit [ 2 ]. toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit [ 3 ]. toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit [ 4 ]. toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit [ 5 ]. toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsplit [ 6 ]. toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime . parse ( split [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġnormalize T weets (): ĠList < Status Date Data > Ġ{ ĊĠĠĠ Ġreturn Ġdate T weets ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . contains (" open ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . replace ( Regex (" (? i )# fn or de ing ang Ġis Ġnow Ġopen ! Ġ"), Ġ"") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . replace ( Regex (" (? i ) Ġ# man ually Triggered "), Ġ"") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . replace ( Regex (" (? i ) is Ġnow Ġopen ! Ġ"), Ġ"") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map (:: parse DateTime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map (:: status Date Data From DateTime ) Ċ } Ċ Ċ fun Ġclassify ( unknown : ĠLocalDateTime , Ġtrained Data : ĠList < Status Date Data >, Ġne ighbours : ĠInt Ġ= Ġ 2 ): ĠList < Class ify Result With Distance > Ġ{ ĊĠĠĠ Ġval Ġstatus Date Data From DateTime Ġ= Ġstatus Date Data From DateTime ( unknown ) ĊĠĠĠ Ġreturn Ġtrained Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass ify Result With Distance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġunknown , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath Arrays . distance ( it . data , Ġstatus Date Data From DateTime . data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . distance Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( ne ighbours ) Ċ } Ċ Ċ private Ġfun Ġstatus Date Data From DateTime ( date : ĠLocalDateTime ): ĠStatus Date Data Ġ{ ĊĠĠĠ Ġreturn ĠStatus Date Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate . month . value . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate . day OfWeek . value . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate . hour . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate . minute . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Week day ( date . day OfWeek . value ). toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Vac ation Day ( date ). toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġfun Ġis Vac ation Day ( value : ĠLocalDateTime ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( holiday Manager . is H oliday ( value . to LocalDate ())) Ġ 1 Ġelse Ġ 0 Ċ } Ċ Ċ private Ġval Ġh oliday Manager : ĠH oliday Manager Ġby Ġlazy Ġ{ ĊĠĠĠ Ġval Ġmanager Parameter Ġ= ĠManager Parameters . create ( H oliday Calendar . GER MAN Y ) ĊĠĠĠ Ġval Ġh oliday Manager Ġ= ĠH oliday Manager . getInstance ( manager Parameter ) ĊĠĠĠ Ġh oliday Manager Ċ } Ċ Ċ private Ġfun Ġis Week day ( value : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( listOf ( 6 , Ġ 7 ). contains ( value )) Ġ 1 Ġelse Ġ 0 Ċ } Ċ Ċ fun Ġut c ( dateTime : ĠZ onedDateTime ): ĠLocalDateTime Ġ{ ĊĠĠĠ Ġreturn ĠLocalDateTime . of Instant ( dateTime . to Instant (), ĠZone Offset . UTC ) Ċ } Ċ Ċ private Ġfun Ġparse DateTime ( dateTime : ĠString ): ĠLocalDateTime Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġut c ( Z onedDateTime . parse ( dateTime )) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠDateTime Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġut c ( Z onedDateTime . parse ( dateTime , ĠDateTime Formatter . of Pattern (" EE ĠM MM Ġd Ġy ĠH : m : s Ġ' GMT ' Z Ġ( zz ) "))) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠClass ify Result With Distance ( ĊĠĠĠĠĠĠĠ Ġval Ġinput : ĠLocalDateTime , ĊĠĠĠĠĠĠĠ Ġval Ġdistance : ĠDouble Ċ ) Ġ: ĠSerializable Ċ Ċ class ĠStatus Date Data ( ĊĠĠĠĠĠĠĠ Ġmonth : ĠDouble , ĊĠĠĠĠĠĠĠ Ġday : ĠDouble , ĊĠĠĠĠĠĠĠ Ġhour : ĠDouble , ĊĠĠĠĠĠĠĠ Ġminute : ĠDouble , ĊĠĠĠĠĠĠĠ Ġis Week day : ĠDouble , ĊĠĠĠĠĠĠĠ Ġis Vac ation Day : ĠDouble , ĊĠĠĠĠĠĠĠ Ġval Ġdate : ĠLocalDateTime Ċ ) Ġ{ Ġval Ġdata Ġ= ĠarrayOf ( month , Ġday , Ġhour , Ġminute , Ġis Week day , Ġis Vac ation Day ). toDouble Array () Ġ} ĊĊĊ