package Ġcom . cri st ian ove c chi . mik ro kan on . AIM US IC Ċ Ċ import Ġcom . cri st ian ove c chi . mik ro kan on . p map Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġkotlin . coroutines . Coroutine Context Ċ import Ġkotlin . math . abs Ċ Ċ suspend Ġfun Ġwaves ( counter points : ĠList < Counter point >, Ġinterval Set : ĠList < Int >, Ġn W aves : ĠInt ) Ġ: ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn ĠCounter point . findAll With W aves ( counter points , Ġ Ġinterval Set , Ġn W aves ) Ċ } Ċ suspend Ġfun Ġfree Parts ( counter point : ĠCounter point , Ġinterval Set : ĠList < Int >, Ġdirections : ĠList < Int >) Ġ: ĠList < Counter point >{ ĊĠĠĠ Ġreturn ĠCounter point . findAll Free Parts ( counter point , Ġinterval Set , Ġdirections ) Ċ } Ċ inline Ġfun Ġis Interval In Set ( interval Set : ĠInt Array , Ġpitch 1 : ĠInt , Ġpitch 2 : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠ Ġval Ġinterval Ġ= Ġabs ( pitch 2 Ġ- Ġpitch 1 ) ĊĠĠĠĠ Ġreturn Ġinterval Set . contains ( interval ) Ċ } Ċ fun Ġis Interval In Set Bit wise ( interval Set : ĠInt , Ġpitch 1 : ĠInt , Ġpitch 2 : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠ Ġval Ġinterval Byte Ġ= Ġ 1 Ġshl Ġabs ( pitch 2 Ġ- Ġpitch 1 ) ĊĠĠĠĠ Ġreturn Ġinterval Set Ġand Ġinterval Byte Ġ!= Ġ 0 Ċ } Ċ fun Ġconvert Interval Set To Byte ( interval Set : ĠInt Array ): ĠInt Ġ{ ĊĠĠĠĠ Ġvar Ġbyte Ġ= Ġ 0 ĊĠĠĠĠ Ġinterval Set . forEach { Ġbyte Ġ= Ġbyte Ġor Ġ( 1 Ġshl Ġit )} ĊĠĠĠĠ Ġreturn Ġbyte Ċ } Ċ suspend Ġfun Ġm ik ro K an ons 4 ( ĊĠĠĠĠ Ġcontext : ĠCor outine Context , ĊĠĠĠĠ Ġsequence : ĠList < Clip >, ĊĠĠĠĠ Ġdeep Search : ĠBoolean , ĊĠĠĠĠ Ġinterval Set : ĠList < Int > Ċ ): ĠList < Counter point > Ġ= Ġwith Context ( context ){ ĊĠĠĠĠ Ġval Ġe mpt iness Gate Ġ= Ġif (! deep Search ) Ġ 1 . 0 f Ġelse Ġwhen Ġ( interval Set . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ 0 . 6 9 f ĊĠĠĠĠĠĠĠĠĠ Ġin Ġ 1 .. 2 Ġ-> Ġ 0 . 6 6 f ĊĠĠĠĠĠĠĠĠĠ Ġin Ġ 3 .. 4 Ġ-> Ġ 0 . 6 3 f ĊĠĠĠĠĠĠĠĠĠ Ġin Ġ 5 .. 6 Ġ-> Ġ 0 . 6 0 f ĊĠĠĠĠĠĠĠĠĠ Ġin Ġ 7 .. 8 Ġ-> Ġ 0 . 5 5 f ĊĠĠĠĠĠĠĠĠĠ Ġin Ġ 9 .. 1 0 Ġ-> Ġ 0 . 2 5 f ĊĠĠĠĠĠĠĠĠĠ Ġin Ġ 1 1 .. 1 2 Ġ-> Ġ 0 . 1 5 f ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 . 0 0 1 f ĊĠĠĠĠ Ġ} ĊĠĠĠĠ Ġval Ġdepth Ġ= Ġif ( deep Search ) Ġ 4 Ġelse Ġ 2 ĊĠĠĠĠĠ ĠM ik ro K anon . findAll 4 Abs Part M ik ro K an ons Parallel ( context , Ġsequence . map Ġ{ Ġit . abstract Note Ġ}, Ġ Ġinterval Set , Ġdepth , Ġe mpt iness Gate ) ĊĠĠĠĠĠĠĠĠĠ Ġ. p map Ġ{ Ġit . to Counter point () Ġ} Ċ } Ċ suspend Ġfun Ġm ik ro K an ons 5 red uct ed ( ĊĠĠĠĠ Ġcontext : ĠCor outine Context , ĊĠĠĠĠ Ġsequence : ĠList < Clip >, ĊĠĠĠĠ Ġinterval Set : ĠList < Int > Ċ ): ĠList < Counter point > Ġ= Ġwith Context ( context ){ ĊĠĠĠĠ Ġval Ġe mpt iness Gate Ġ= Ġ 1 . 0 f ĊĠĠĠĠ Ġval Ġdepth Ġ= Ġ 2 ĊĠĠĠĠ ĠM ik ro K anon . findAll 5 Abs Part M ik ro K an ons Parallel Red uct ed ( context , Ġsequence . map Ġ{ Ġit . abstract Note Ġ}, Ġ Ġinterval Set , Ġdepth , Ġe mpt iness Gate ) ĊĠĠĠĠĠĠĠĠĠ Ġ. p map Ġ{ Ġit . to Counter point () Ġ} Ċ } Ċ suspend Ġfun Ġm ik ro K an ons 3 ( sequence : ĠList < Clip >, Ġinterval Set : ĠList < Int >, Ġdepth : ĠInt Ġ= Ġ 6 ): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn ĠM ik ro K anon . findAll 3 Abs Part M ik ro K an ons Parallel ( sequence . map Ġ{ Ġit . abstract Note Ġ}, Ġinterval Set , Ġdepth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. p map Ġ{ Ġit . to Counter point () Ġ} Ċ } Ċ suspend Ġfun Ġm ik ro K an ons 2 ( sequence : ĠList < Clip >, Ġinterval Set : ĠList < Int >, Ġdepth : ĠInt Ġ= Ġ 6 ): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn ĠM ik ro K anon . findAll 2 Abs Part M ik ro K an ons ( sequence . map Ġ{ Ġit . abstract Note Ġ}, Ġinterval Set , Ġdepth ) ĊĠĠĠĠĠĠĠĠĠ Ġ. p map Ġ{ Ġit . to Counter point () Ġ} Ċ } Ċ suspend Ġfun Ġf lour ish ( original Counter points : ĠList < Counter point >, Ġinterval Set : ĠList < Int >, Ġhor Interval Set : ĠList < Int >): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn Ġoriginal Counter points . map { Counter point . f lour ish ( it , Ġinterval Set , Ġhor Interval Set )} Ċ } Ċ suspend Ġfun Ġbuild Round ( original Counter points : ĠList < Counter point > Ġ): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn Ġoriginal Counter points . map { it . build Round ()} Ċ } Ċ suspend Ġfun Ġadd Cad enz as On Counter points ( hor Interval Set : ĠList < Int >, Ġoriginal Counter points : ĠList < Counter point >, Ġvalues : ĠList < Int >): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn Ġoriginal Counter points . map { it . add Cad enz as ( hor Interval Set , Ġvalues )} Ċ } Ċ suspend Ġfun Ġduplicate All In Counter point ( counter point : ĠCounter point Ġ): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn Ġcounter point . duplicate All Ph rases () Ċ } Ċ suspend Ġfun Ġerase Horizontal Intervals On Counter points ( hor Interval Set : ĠList < Int >, Ġoriginal Counter points : ĠList < Counter point > Ġ): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn Ġoriginal Counter points . map { it . erase Intervals On Both Notes ( hor Interval Set )} Ċ } Ċ suspend Ġfun Ġsort Columns On Counter points ( original Counter points : ĠList < Counter point >, Ġsort Type : ĠInt Ġ): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn Ġoriginal Counter points . map { Ġit . sort Columns ( sort Type ) Ġ} Ċ } Ċ suspend Ġfun Ġup side Down Counter points ( original Counter points : ĠList < Counter point >): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn Ġoriginal Counter points . map { Ġit . up side Down () Ġ} Ċ } Ċ suspend Ġfun Ġreduce Counter points To Single Part ( original Counter points : ĠList < Counter point > Ġ): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn Ġoriginal Counter points . map { Ġit . reduce To Single Part () Ġ} Ċ } Ċ suspend Ġfun Ġexplode Counter points To D opp el g Ã¤n ger ( original Counter points : ĠList < Counter point >, Ġmax Parts : ĠInt , Ġensemble Types : ĠList < En semble Type >, Ġrange Type : ĠPair < Int , Int >, Ġme lo dy Type : ĠInt ): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn Ġoriginal Counter points . map { Ġit . explode To D opp el g Ã¤n ger ( max Parts , Ġensemble Types , Ġrange Type , Ġme lo dy Type ) Ġ} Ċ } Ċ suspend Ġfun Ġfind Ped als On Counter point ( nP ed als : Int , Ġcounter point : ĠCounter point , Ġinterval Set : ĠList < Int >): ĠCounter point { ĊĠĠĠĠ Ġreturn ĠCounter point . add Ped als ( nP ed als , Ġcounter point , Ġ Ġinterval Set ) Ċ } Ċ suspend Ġfun Ġtranspose All Counter points ( original Counter points : ĠList < Counter point >, Ġtransp osition s : ĠList < Int >): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn Ġoriginal Counter points . map { it . rit orn el lo ( transp osition s . size Ġ- Ġ 1 , Ġtransp osition s )} Ċ } Ċ suspend Ġfun Ġexpand ( original Counter points : ĠList < Counter point >, Ġextension : ĠInt ): ĠList < Counter point >{ ĊĠĠĠĠ Ġreturn Ġoriginal Counter points . map { Counter point . expand ( it , extension )} Ċ } Ċ suspend Ġfun Ġadd Sequence ( counter point : ĠCounter point , sequence : ĠList < Clip >, Ġinterval Set : ĠList < Int >, Ġrepeat : ĠBoolean , depth : ĠInt Ġ= Ġ 6 ): ĠList < Counter point > Ġ{ ĊĠĠĠĠ Ġreturn Ġif ( repeat ){ ĊĠĠĠĠĠĠĠĠĠ ĠCounter point . findAll Counter points With Repeated Sequence ( counter point , Ġsequence . map Ġ{ Ġit . abstract Note Ġ}, Ġinterval Set , Ġdepth ) ĊĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠCounter point . findAll Counter points ( counter point , Ġsequence . map Ġ{ Ġit . abstract Note Ġ}, Ġinterval Set , Ġdepth ) ĊĠĠĠĠ Ġ} Ċ }