package Ġcom . sys 1 y agi . counter point . validator . rule Ċ Ċ import Ġcom . sys 1 y agi . counter point . Interval Ċ import Ġcom . sys 1 y agi . counter point . validator . exception . Whole Note Counter Point Invalid Exception Ċ Ċ class ĠPer fect 8 th Con secutive Rule Ġ: ĠWh ole Note Counter Point Rule Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġvalidation ( intervals : ĠList < Interval >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorigin Ġ= Ġintervals . map Ġ{ Ġit . interval Int Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdiff 1 Ġ= Ġintervals . drop ( 1 ). map Ġ{ Ġit . interval Int Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdiff 2 Ġ= Ġintervals . drop ( 2 ). map Ġ{ Ġit . interval Int Ġ} ĊĊĠĠĠĠĠĠĠ Ġorigin . zip ( diff 1 ). forEach Indexed Ġ{ Ġi , Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( i , Ġpair . first , Ġpair . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġorigin . zip ( diff 2 ). forEach Indexed Ġ{ Ġi , Ġpair Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( i , Ġpair . first , Ġpair . second ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck ( index : ĠInt , Ġfirst : ĠInt , Ġsecond : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( first Ġ== ĠInterval . INTERVAL _ PERF ECT _ 8 TH Ġ&& Ġsecond Ġ== ĠInterval . INTERVAL _ PERF ECT _ 8 TH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠWh ole Note Counter Point Invalid Exception (" Con secutive Ġperfect Ġ 8 th . Ġpos =$ index ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }