Grid
NAME
Grid - Role for Arrays.
SYNOPSIS
use Grid;
my @grid = < a b c d e f g h i j k l m n o p q r s t u v w x >;
@grid does Grid[:4columns];DESCRIPTION
Grid is a Role that transforms an Array to Array+{Grid}, And provides additional methods (e.g flip, rotate, transpose).
To flip a Grid horizontaly or vertically:
@grid.flip: :horizontal
@grid.flip: :verticalIt is also possible to apply methods to a subgrid of Grid, provided a valid subgrid indices:
my @indices  = 9, 10, 13, 14; @grid.flip: :vertical(@indices); # or
my @vertical = 9, 10, 13, 14; @grid.flip: :@vertical;`Grid preserves the overall shape, So some operations require is-square to be True for Grid (or Subgrid), otherwise fails and returns self.
EXAMPLES
grid
flip
rotate
transpose
append
prepend
pop
shift
METHODS
grid
method grid ( Bool:D :$formatted = False ) { ... }Returns list of strings or a formatted string of Grid.
columns
method columns { ... }Returns Grid's columns count.
rows
method columns { ... }Returns Grid's rows count.
check
multi method check ( :@rows! --> Bool:D ) { ... }Check if Rows can fit in Grid.
multi method check ( :@columns! --> Bool:D ) { ... }Check if Columns can fit in Grid.
reshape
method reshape ( Grid:D:  Int :$columns! where * > 0 --> Grid:D ) { ... }flip
multi method flip ( Grid:D: Int:D :$horizontal! --> Grid:D ) { ... }Horizontal Flip.
multi method flip ( Grid:D: Int:D :$vertical! --> Grid:D ) { ... }Verical Flip.
multi method flip ( Grid:D: Int:D :$diagonal! --> Grid:D ) { ... }Diagonal Flip.
multi method flip ( Grid:D: Int:D :$antidiagonal! --> Grid:D ) { ... }Anti-Diagonal Flip.
multi method flip ( Grid:D: :@horizontal! --> Grid:D ) { ... }Horizontal Flip (Subgrid).
multi method flip ( Grid:D: :@vertical! --> Grid:D ) { ... }Vertical Flip (Subgrid).
multi method flip ( Grid:D: :@diagonal! --> Grid:D ) { ... }Diagonal Flip (Subgrid).
multi method flip ( Grid:D: :@antidiagonal! --> Grid:D ) { ... }Anti-Diagonal Flip (Subgrid).
rotate
multi method rotate ( Grid:D:  Int:D :$left! --> Grid:D ) { ... }Left Rotate. (Columns)
multi method rotate ( Grid:D:  Int:D :$right! --> Grid:D ) { ... }Right Rotate. (Columns)
multi method rotate ( Grid:D:  Int:D :$up! --> Grid:D ) { ... }Up Rotate. (Rows)
multi method rotate ( Grid:D:  Int:D :$down! --> Grid:D ) { ... }Up Rotate. (Rows)
multi method rotate ( Grid:D: Int:D :$clockwise! --> Grid:D ) { ... }Clockwise Rotate.
multi method rotate ( Grid:D: Int:D :$anticlockwise! --> Grid:D ) { ... }Anti-Clockwise Rotate.
multi method rotate ( Grid:D: :@clockwise! --> Grid:D ) { ... }Clockwise Rotate (Subgrid)
multi method rotate ( Grid:D: :@anticlockwise! --> Grid:D ) { ... }Clockwise Rotate (Subgrid)
transpose
multi method transpose ( Grid:D: --> Grid:D ) { ... }Transpose.
multi method transpose ( Grid:D: :@indices! --> Grid:D ) { ... }Transpose (Subgrid)
append
multi method append ( Grid:D: :@rows! --> Grid:D ) { ... }Append Rows.
multi method append ( Grid:D: :@columns! --> Grid:D ) { ... }Append Columns.
Prepend
multi method prepend ( Grid:D: :@rows! --> Grid:D ) {Prepend Rows.
multi method prepend ( Grid:D: :@columns! --> Grid:D ) { ... }Prepend Columns.
push
multi method push ( Grid:D: :@rows! --> Grid:D ) { ... }Push Rows.
multi method push ( Grid:D: :@columns! --> Grid:D ) {Push Columns.
pop
multi method pop ( Grid:D:  Int :$rows! --> Grid:D ) { ... }Pop Rows.
multi method pop ( Grid:D:  Int :$columns! --> Grid:D ) { ... }Pop Columns.
shift
multi method shift ( Grid:D:  Int :$rows! --> Grid:D ) { ... }Shift Rows.
multi method shift ( Grid:D:  Int :$columns! --> Grid:D ) { ... }Shift Columns.
unshift
multi method unshift ( Grid:D: :@rows! --> Grid:D ) { ... }Unshift Rows.
multi method unshift ( Grid:D: :@columns! --> Grid:D ) {Unshift Columns.
has-subgrid
method has-subgrid( :@indices!, :$square = False --> Int:D ) { ... }
Returns `columns` if `:@indices` is a subgrid of `Grid`, `False` otherwise.is-square
method is-square ( --> Bool:D ) { ... }Returns True if Grid is a square, False otherwise.
AUTHOR
Haytham Elganiny [email protected]
COPYRIGHT AND LICENSE
Copyright 2019 Haytham Elganiny
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.