package Ġutils . notation Formatter Ċ Ċ import Ġcoordinates . Coordinate 2 D Ċ import Ġmoves .* Ċ Ċ /** Ċ Ġ* ĠChe ss Not ation Input Ċ Ġ* ĠConverts Ġstandard Ġc hes Ġnotation Ġto ĠCoordinate 2 D Ġand ĠCoordinate 2 D , Ċ Ġ* ĠMove Hex Ġto Ġreadable Ġstring Ġformat . ĠIs Ġused Ġfor Ġconsole Ġfront Ġend . Ċ Ġ*/ Ċ class ĠChe ss Not ation Input Hex () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTakes Ġa ĠString Ġrepresentation Ġof Ġa Ġcoordinate Ġand Ġconverts Ġto Ġa ĠCoordinate 2 D . ĊĠĠĠĠ Ġ* Ġ@ return ĠCoordinate 2 D ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstr To Coordinate ( s : ĠString ): ĠCoordinate 2 D ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠCheck Ġthat Ġthe Ġinput Ġstring Ġmatches Ġthe Ġpattern Ġfor Ġstandard Ġche ss Ġnotation . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġregex Ġ= Ġ""" ([ a - z ]+ )( \ d +) """. to Regex () ĊĠĠĠĠĠĠĠ Ġval Ġmatch Result Ġ= Ġregex . match Ent ire ( s ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġ( l , Ġn ) Ġ= Ġmatch Result . de structured ĊĊĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= Ġl [ 0 ]. toInt () Ġ- Ġ' a '. toInt () ĊĠĠĠĠĠĠĠ Ġval Ġc 2 Ġ= Ġn . toInt () Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġreturn ĠCoordinate 2 D ( c 1 , Ġc 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTakes Ġa ĠCoordinate 2 D Ġand Ġconverts Ġit Ġinto Ġstandard Ġche ss Ġnotation . Ġe . g ĠCoordinate ( 0 , Ġ 6 ) Ġ-> ĠA 1 ĊĠĠĠĠ Ġ* Ġ@ returns Ġstring Ġcoordinate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcoordinate To Str ( c : ĠCoordinate 2 D ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc 1 Ġ= Ġ( c . x Ġ+ Ġ' a '. toInt ()). to Char () ĊĠĠĠĠĠĠĠ Ġval Ġc 2 Ġ= Ġc . y Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ c 1 $ c 2 " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTakes Ġa ĠMove Hex Ġand Ġconverts Ġit Ġto Ġa Ġreadable Ġche ss Ġnotation . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġstring Ġrepresenting Ġthe Ġmove . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmove To Str ( move : ĠMove Hex ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( move ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBasic Move Hex Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( basic MoveTo Str ( move )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAdd Piece Move Hex Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("${ move . piece . get Symbol ()} Ġis Ġplaced Ġon Ġthe Ġboard Ġat Ġ${ coordinate To Str ( move . coordinate )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRemove Piece Move Hex Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("${ move . piece . get Symbol ()} Ġis Ġremoved Ġfrom Ġthe Ġboard Ġat Ġ${ coordinate To Str ( move . coordinate )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠComposite Move Hex Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmoves Ġ= Ġmove . moves ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġm ) Ġin Ġmoves . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( moveTo Str ( m )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġmoves . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . trim End () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTakes Ġa ĠBasic Move Ġand Ġconverts Ġit Ġto Ġa Ġreadable Ġche ss Ġnotation . ĊĠĠĠĠ Ġ* ĠUsed Ġas Ġa Ġhelper Ġfunction Ġfor Ġmove To Str (). ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġstring Ġrepresenting Ġthe Ġmove . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbasic MoveTo Str ( move : ĠBasic Move Hex ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġsb . append ("${ move . piece Moved . get Symbol ()} Ġmoves Ġfrom Ġ${ coordinate To Str ( move . from )} Ġto Ġ${ coordinate To Str ( move . to )} ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( move . piece Capt ured Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (", Ġcapturing Ġ${ move . piece Capt ured . get Symbol () }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( move . piece Prom oted To Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" Ġand Ġprom oting Ġto Ġ${ move . piece Prom oted To . get Symbol () }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} Ċ } Ċ