package Ġcom . twitter . challenge . util Ċ Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util . Date Ċ import Ġjava . util . Locale Ċ import Ġkotlin . math . round ToInt Ċ Ċ object ĠWeather Data Formatter Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtime Formatter Ġ= ĠSimpleDateFormat (" h : mm Ġa ", ĠLocale . US ) ĊĠĠĠ Ġprivate Ġval Ġday OfWeek Formatter Ġ= ĠSimpleDateFormat (" EEEE ", ĠLocale . US ) ĊĠĠĠ Ġprivate Ġval Ġday OfMonth Formatter Ġ= ĠSimpleDateFormat (" d ", ĠLocale . US ) ĊĠĠĠ Ġprivate Ġval ĠdateFormat Ġ= ĠSimpleDateFormat (" MMM Ġd ", ĠLocale . US ) ĊĊĠĠĠ Ġprivate Ġval Ġcomp ass Direction Labels Ġ= Ġmutable ListOf < String >( ĊĠĠĠĠĠĠĠ Ġ" North ", ĊĠĠĠĠĠĠĠ Ġ" North ĠEast ", ĊĠĠĠĠĠĠĠ Ġ" East ", ĊĠĠĠĠĠĠĠ Ġ" South ĠEast ", ĊĠĠĠĠĠĠĠ Ġ" South ", ĊĠĠĠĠĠĠĠ Ġ" South ĠWest ", ĊĠĠĠĠĠĠĠ Ġ" West ", ĊĠĠĠĠĠĠĠ Ġ" North ĠWest " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġvar Ġcur Unit : ĠUnits Ġ= ĠUnits . METRIC ĊĊĠĠĠ Ġfun Ġget Temp Str ( temp : ĠDouble ?): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( temp Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" N / A " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Val Ġ= Ġif Ġ( cur Unit Ġ== ĠUnits . IMP ERIAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTemperature Converter . cel s ius To F ah ren heit ( temp . toFloat ()). round ToInt (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . round ToInt (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Val Ġ+ Ġcur Unit . temp ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Wind Speed ( wind Speed : ĠDouble ?, Ġdegree : ĠInt ?): ĠString ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif ( wind Speed Ġ== Ġnull Ġ|| Ġdegree Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" N / A " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Speed Ġ= Ġif ( cur Unit Ġ== ĠUnits . IMP ERIAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDistance Converter . meters To Fe et ( wind Speed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwind Speed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ w Speed . round ( 2 )} Ġ" Ġ+ Ġcur Unit . speed Ġ+ Ġ" Ġ" Ġ+ Ġget Comp ass Direction ( degree ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Comp ass Direction ( degree : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġdegree Ġ/ Ġ 4 5 ĊĠĠĠĠĠĠĠ Ġreturn Ġcomp ass Direction Labels [ angle Ġ% Ġcomp ass Direction Labels . size ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetTime OfDay ( dateTime : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtime Formatter . format ( Date ( dateTime )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget DayOfWeek ( dateTime : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġday OfWeek Formatter . format ( Date ( dateTime )). toUpperCase ( Locale . getDefault ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Weather Icon Url ( icon Code : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" https :// open weather map . org / img / wn /${ icon Code }@ 2 x . png " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Sun Icon Url (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Weather Icon Url (" 0 1 d ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Scatter ed Cloud s Url (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Weather Icon Url (" 0 3 d ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Day OfMonth ( dateTime : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġday OfMonth Formatter . format ( Date ( dateTime )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Desc ( description : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdescription [ 0 ]. toUpperCase () Ġ+ Ġdescription . substring ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Date ( dateTime : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠdateFormat . format ( dateTime ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠUnits ( val Ġlabel : ĠString , Ġval Ġtemp : ĠString , Ġval Ġspeed : ĠString , Ġval Ġchoice Label : ĠString ) Ġ{ ĊĠĠĠ ĠMET RIC (" metric ", Ġ" Â° C ", Ġ" m / s ", Ġ" Metric Ġ- ĠÂ ° C , Ġm / s Ġ"), ĊĠĠĠ ĠIMP ERIAL (" imp erial ", Ġ" Â° F ", Ġ" ft / s ", Ġ" Imp erial Ġ- ĠÂ ° F , Ġft / s ") Ċ }