import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġsx h Ġon Ġ 8 / 2 8 / 1 5 . Ċ Ġ*/ Ċ Ċ // TODO : ĠI Ġdon ' like Ġthe Ġarguments Ġof Ġthe Ġprimary Ġconstructor ... Ċ class ĠW ey l Group Ġ( basis : ĠMatrix , Ġcutoff : ĠInt , Ġno Reflection : ĠInt ) Ġ{// if Ġyou Ġwant Ġto Ġget Ġfull ĠW ey l Ġgroup Ġand Ġnot Ġthe ĠLe vi ĠW ey l Ġsub group Ġno Reflection Ġshould Ġbe Ġ- 1 ĊĠĠĠ Ġval Ġcarrier : ĠMutable Set < Matrix > Ġ= ĠHashSet () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġlo l ( br s : ĠBased Root System , Ġsim : ĠSet < Vector >): ĠPair < Matrix , ĠMatrix ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġbr s . rank () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġbr s . simple Reflection s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwb Ġ= Ġbr s . two Color DD ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw v Ġ= Ġwb . first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbv Ġ= Ġwb . second ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Ġ= Ġw v . fold ( Matrix ( n ), Ġ{ m , Ġi Ġ-> Ġm . mul ( s [ i ]) }) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġbv . fold ( Matrix ( n ), Ġ{ m , Ġi Ġ-> Ġm . mul ( s [ i ]) }) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw w Ġ= ĠMatrix ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw wo : ĠMatrix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlen : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew Len Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġflag Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlen Ġ= Ġnew Len ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw wo Ġ= Ġw w ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw w Ġ= Ġw w . mul ( w ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw w Ġ= Ġw w . mul ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Len Ġ= Ġbr s . length ( ww ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( new Len Ġ> Ġlen ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw w 2 : ĠMatrix ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( v Ġin Ġ 0 .. ( n - 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw w 2 c Ġ= Ġw wo . mul ( s [ v ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlen 2 Ġ= Ġbr s . length ( ww 2 c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( len 2 Ġ== Ġlen Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw w 2 Ġ= Ġw w 2 c ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" W WO : Ġ"+ br s . my Positive Roots . intersect ( sim . map Ġ{ Ġw wo . mul ( it ) Ġ}). size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" WW 2 : Ġ"+ br s . my Positive Roots . intersect ( sim . map Ġ{ Ġw w 2 ?. mul ( it ) Ġ}). size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" W WO Ġlength : Ġ"+ br s . length ( ww o )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println (" WW 2 Ġlength : Ġ"+ br s . length ( ww 2 !! )) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( ww o , Ġw w 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġbasis . height ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġno Reflection ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcarrier . add ( Vector ( basis . my C oo [ i ]). get Reflection ()) ĊĠĠĠĠĠĠĠ Ġval Ġiter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġflag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġnew Elements : ĠMutable Set < Matrix > ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Elements Ġ= ĠHashSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġcarrier . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// int Ġold Count Ġ= Ġcount ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc 2 Ġ= ĠArrayList ( carrier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġc 2 . indices . reversed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġc 2 [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( f Ġin Ġcarrier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġe . mul ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! carrier . contains ( g ) Ġ&& Ġ! new Elements . contains ( g )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Elements . add ( g ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ>= Ġcutoff ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Finished Ġ@ Ġ$ count ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flag ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcarrier . addAll ( new Elements ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// System . out . println (" Iteration Ġ# " Ġ+ Ġ( iter ++) Ġ+ Ġ"; Ġfound Ġtotal Ġ# Ġof ĠW ey l Ġgroup Ġelements : Ġ" Ġ+ Ġcarrier . size ()); ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( new Elements . size Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcarrier . addAll ( new Elements ) ĊĠĠĠ Ġ} Ċ } Ċ