package Ġcom . dur hack . sharp shot . gui . container Ċ Ċ import Ġcom . dur hack . sharp shot . core . nodes . Abstract Node Ċ import Ġcom . dur hack . sharp shot . core . state . Coordinate Ċ Ċ class ĠExtract ( all Nodes : ĠMap < Coordinate , ĠAbstract Node >, Ġlow : ĠCoordinate , Ġhigh : ĠCoordinate ) Ġ{ ĊĠĠĠ Ġvar Ġnodes : ĠMap < Coordinate , ĠAbstract Node > Ġprivate Ġset ĊĠĠĠ Ġvar Ġwidth : ĠInt Ġprivate Ġset ĊĠĠĠ Ġvar Ġheight : ĠInt Ġprivate Ġset ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Normal isation ĊĠĠĠĠĠĠĠ Ġnodes Ġ= Ġall Nodes . filter Keys Ġ{ Ġit . inside ( low , Ġhigh ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Keys Ġ{ Ġ( coord , Ġ_) Ġ-> Ġcoord Ġ- Ġlow Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdif Ġ= Ġhigh Ġ- Ġlow ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġdif . x ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġdif . y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmirror Horizontal () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Nodes Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes . map Keys Ġ{ Ġ( coord , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew X Ġ= Ġwidth Ġ- Ġcoord . x Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Keys ĠCoordinate ( new X , Ġcoord . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnew Nodes . values . forEach Ġ{ Ġit . direction Ġ= Ġit . direction . mirror Horizontal Ġ} ĊĠĠĠĠĠĠĠ Ġnodes Ġ= Ġnew Nodes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmirror Vertical (){ ĊĠĠĠĠĠĠĠ Ġval Ġnew Nodes Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnodes . map Keys Ġ{ Ġ( coord , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Y Ġ= Ġheight Ġ- Ġcoord . x Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Keys ĠCoordinate ( coord . x , Ġnew Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnew Nodes . values . forEach Ġ{ Ġit . direction Ġ= Ġit . direction . mirror Vertical Ġ} ĊĠĠĠĠĠĠĠ Ġnodes Ġ= Ġnew Nodes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrotate Clock wise (){ ĊĠĠĠĠĠĠĠ Ġval Ġnew Nodes Ġ= Ġnodes . map Keys Ġ{( coord , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew X Ġ= Ġheight Ġ- Ġcoord . y Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Y Ġ= Ġwidth Ġ- Ġcoord . x Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Keys ĠCoordinate ( new X , Ġnew Y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnew Nodes . forEach Ġ{ Ġ_, Ġnode Ġ-> Ġnode . direction Ġ= Ġnode . direction . clock wise } ĊĠĠĠĠĠĠĠ Ġnodes Ġ= Ġnew Nodes ĊĊĠĠĠĠĠĠĠ Ġval Ġold Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġval Ġold Height Ġ= Ġheight ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġold Height ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġold Width ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtrim (){ ĊĠĠĠĠĠĠĠ Ġval Ġmin X Ġ= Ġnodes . keys . map ( Coordinate :: x ). min () !! ĊĠĠĠĠĠĠĠ Ġval Ġmin Y Ġ= Ġnodes . keys . map ( Coordinate :: y ). min () !! ĊĠĠĠĠĠĠĠ Ġval Ġmin Coord Ġ= ĠCoordinate ( min X , Ġmin Y ) ĊĠĠĠĠĠĠĠ Ġnodes Ġ= Ġnodes . map Keys Ġ{ Ġ( coord , Ġ_) Ġ-> Ġcoord Ġ- Ġmin Coord Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmax X Ġ= Ġnodes . keys . map ( Coordinate :: x ). max () !! ĊĠĠĠĠĠĠĠ Ġval Ġmax Y Ġ= Ġnodes . keys . map ( Coordinate :: y ). max () !! ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġmax X Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġmax Y Ġ+ Ġ 1 ĊĠĠĠ Ġ} Ċ }