package Ġcom . mad ness . collision . unit . school _ timetable . data Ċ Ċ class ĠRe petition ( val Ġfrom Week : ĠInt , Ġval Ġto Week : ĠInt , Ġval Ġrepeat Week s : ĠInt Ġ= ĠW EE KS _ ALL ) Ġ{ ĊĠĠĠ Ġval Ġfort nightly Ġ= Ġrepeat Week s Ġ!= ĠW EE KS _ ALL ĊĠĠĠ Ġprivate Ġval Ġrange Ġ= Ġ( from Week .. to Week ). run Ġ{ Ġif Ġ( fort nightly ) Ġthis Ġstep Ġ 2 Ġelse Ġthis Ġ} ĊĠĠĠ Ġvar Ġdisplay From Ġ= Ġfrom Week ĊĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġdisplay To Ġ= Ġto Week ĊĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠW EE KS _ ALL : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠW EE KS _ O DD : ĠInt Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠW EE KS _ E VEN : ĠInt Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCN _ O DD : ĠChar Ġ= Ġ' åįķ ' ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCN _ E VEN : ĠChar Ġ= Ġ' åıĮ ' ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠO DD : ĠChar Ġ= Ġ' o ' ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠEVEN : ĠChar Ġ= Ġ' e ' ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠALL : ĠChar Ġ= Ġ' a ' ĊĠĠĠĠĠĠĠ Ġval ĠREG EX _ RAW Ġ= Ġ"( \\ d +) -( \\ d +) ([ ${ "$ CN _ O DD $ CN _ E VEN "}] ?) ". to Regex () ĊĠĠĠĠĠĠĠ Ġval ĠREG EX _ STANDARD Ġ= Ġ"( \\ d +) -( \\ d +) \\ *( \\ d +) -( \\ d +) ([ ${ "$ ALL $ E VEN $ O DD "} ]) ". to Regex () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġweek Ġ 1 Ġ- Ġweek Ġ 7 Ġsingle Ġweek Ġ& Ġweek Ġ 1 0 Ġ- Ġ 1 5 Ġ: Ġ 1 - 7 åįķ , Ġ 1 0 - 1 5 ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparse Raw ( re pet itions Text : ĠString ): ĠArray < Re petition > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re pet itions Text . isBlank ()) Ġreturn Ġempty Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsrc Text Ġ= Ġrepet itions Text . replace (" Ġ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre ps Text : ĠArray < String > Ġ= Ġif Ġ( src Text . contains ("," )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsrc Text . split ("," . to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠarrayOf ( src Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre ps Result Ġ= ĠArrayList < Re petition >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( period Ġin Ġre ps Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfrom Week : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġto Week : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdisplay From : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdisplay To : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrepeat Week s Ġ= ĠW EE KS _ ALL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( period . contains ("- ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Period Ġ= Ġperiod . split ("- ". to Regex ()). drop Last While Ġ{ Ġit . isEmpty () Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay From Ġ= ĠInteger . parseInt ( sub Period [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Week Ġ= Ġdisplay From ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( sub Period [ 1 ]. last ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCN _ O DD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Week s Ġ= ĠW EE KS _ O DD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from Week Ġ% Ġ 2 Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Week Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCN _ E VEN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Week s Ġ= ĠW EE KS _ E VEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from Week Ġ% Ġ 2 Ġ!= Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Week Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay To Ġ= ĠInteger . parseInt ( sub Period [ 1 ]. let Ġ{ Ġif Ġ( repeat Week s Ġ!= ĠW EE KS _ ALL ) Ġit . drop Last ( 1 ) Ġelse Ġit Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Week Ġ= Ġdisplay To ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( repeat Week s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW EE KS _ O DD Ġ-> Ġif Ġ( to Week Ġ% Ġ 2 Ġ== Ġ 0 ) Ġto Week Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW EE KS _ E VEN Ġ-> Ġif Ġ( to Week Ġ% Ġ 2 Ġ!= Ġ 0 ) Ġto Week Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Week Ġ= ĠInteger . parseInt ( period ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Week Ġ= Ġfrom Week ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay From Ġ= Ġfrom Week ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay To Ġ= Ġto Week ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from Week Ġ> Ġto Week ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Week Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Week Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay From Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay To Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRe petition ( from Week , Ġto Week , Ġrepeat Week s ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . display From Ġ= Ġdisplay From ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . display To Ġ= Ġdisplay To ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre ps Result . add ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġre ps Result . to Typed Array () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġweek Ġ 1 Ġ- Ġweek Ġ 7 Ġsingle Ġweek Ġ& Ġweek Ġ 1 0 Ġ- Ġ 1 5 Ġ: Ġ 1 - 7 * 1 - 7 o , Ġ 1 0 - 1 5 * 1 0 - 1 5 a ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġparse Standard ( re pet itions Text : ĠString ): ĠArray < Re petition > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re pet itions Text . isBlank ()) Ġreturn Ġempty Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsrc Text Ġ= Ġrepet itions Text . replace (" Ġ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre ps Result Ġ= ĠArrayList < Re petition >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( period Ġin ĠREG EX _ STANDARD . findAll ( src Text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( from Week , Ġto Week , Ġdisplay From , Ġdisplay To , Ġrepeat Week s ) Ġ= Ġperiod . de structured ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRe petition ( from Week . toInt (), Ġto Week . toInt (), Ġwhen Ġ( repeat Week s [ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEVEN Ġ-> ĠW EE KS _ E VEN ; O DD Ġ-> ĠW EE KS _ O DD ; else Ġ-> ĠW EE KS _ ALL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . display From Ġ= Ġdisplay From . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . display To Ġ= Ġdisplay To . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre ps Result . add ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġre ps Result . to Typed Array () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse Fort nightly ( from Week : ĠInt , Ġto Week : ĠInt , Ġfort nightly : ĠBoolean Ġ= Ġfalse ): ĠRe petition Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepeat Week s Ġ= Ġif Ġ( fort nightly ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from Week Ġ% Ġ 2 Ġ== Ġ 0 ) ĠW EE KS _ E VEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠW EE KS _ O DD ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠW EE KS _ ALL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRe petition ( from Week , Ġto Week , Ġrepeat Week s ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠtoString ( re pet itions : ĠArray < Re petition >): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re pet itions . isEmpty ()) Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepet itions . forEach Ġ{ Ġrepet ition Ġ-> Ġresult . append ( re petition . toString ()). append (", Ġ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . drop Last ( 2 ). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġto Standard String ( re pet itions : ĠArray < Re petition >): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re pet itions . isEmpty ()) Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepet itions . forEach Ġ{ Ġrepet ition Ġ-> Ġresult . append ( re petition . to Standard String ()). append (", Ġ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult . drop Last ( 2 ). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġin fix Ġfun Ġcontains ( value : ĠInt ): ĠBoolean Ġ= Ġvalue Ġin Ġrange ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStandard Ġ=> ĠRaw ĊĠĠĠĠ Ġ* Ġ 3 - 1 7 * 2 - 1 8 o Ġ=> Ġ 2 - 1 8 åįķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġto Standard String (): ĠString { ĊĠĠĠĠĠĠĠ Ġreturn ĠStringBuilder ("$ from Week -$ to Week *$ display From -$ display To "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( repeat Week s ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW EE KS _ O DD Ġ-> Ġappend ( O DD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW EE KS _ E VEN Ġ-> Ġappend ( E VEN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġappend ( ALL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( display From Ġ== Ġdisplay To ) Ġreturn Ġdisplay From . toString () ĊĠĠĠĠĠĠĠ Ġreturn ĠStringBuilder ("$ display From -$ display To "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( repeat Week s ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW EE KS _ O DD Ġ-> Ġappend ( CN _ O DD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW EE KS _ E VEN Ġ-> Ġappend ( CN _ E VEN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. toString () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/* ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠRe petition ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( from Week Ġ== Ġother . from Week ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġto Week Ġ== Ġother . to Week ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġfort nightly Ġ== Ġother . fort nightly ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfrom Week ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġto Week ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġfort nightly . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ}*/ Ċ } Ċ