aboutsummaryrefslogtreecommitdiff
path: root/challenge-062
diff options
context:
space:
mode:
authorLuca Ferrari <fluca1978@gmail.com>2020-05-26 12:29:46 +0200
committerLuca Ferrari <fluca1978@gmail.com>2020-05-26 12:29:46 +0200
commitb1e1adc6bbcfbd5f1f22df772ea2ca97acb6de30 (patch)
tree1145790ac6101ccbbd4b12f750e58bc267716f9a /challenge-062
parent75a412e82817ea64798c3870043aa821e036dccb (diff)
downloadperlweeklychallenge-club-b1e1adc6bbcfbd5f1f22df772ea2ca97acb6de30.tar.gz
perlweeklychallenge-club-b1e1adc6bbcfbd5f1f22df772ea2ca97acb6de30.tar.bz2
perlweeklychallenge-club-b1e1adc6bbcfbd5f1f22df772ea2ca97acb6de30.zip
Task2 done.
Diffstat (limited to 'challenge-062')
-rw-r--r--challenge-062/luca-ferrari/raku/ch-2.p664
1 files changed, 64 insertions, 0 deletions
diff --git a/challenge-062/luca-ferrari/raku/ch-2.p6 b/challenge-062/luca-ferrari/raku/ch-2.p6
new file mode 100644
index 0000000000..7679e57f2c
--- /dev/null
+++ b/challenge-062/luca-ferrari/raku/ch-2.p6
@@ -0,0 +1,64 @@
+#!env raku
+
+# Task 2
+# N-queens
+
+sub place-queen( @chessboard, $row, $column, $height, $dimension ){
+
+ for 0 ..^ $dimension {
+ @chessboard[ $row ][ $_ ][ $height ] = False;
+ @chessboard[ $row ][ $column ][ $_ ] = False;
+ @chessboard[ $_ ][ $column ][ $height ] = False;
+ }
+
+ # diagonal (only on one level)
+ for 0 ..^ $dimension {
+ @chessboard[ $row + $_ ][ $column + $_ ][ $height ] = False if ( $row + $_ < $dimension && $column + $_ < $dimension);
+ @chessboard[ $row - $_ ][ $column - $_ ][ $height ] = False if ( $row - $_ >= 0 && $column - $_ >= 0 );
+ @chessboard[ $row - $_ ][ $column + $_ ][ $height ] = False if ( $row - $_ >= 0 && $column + $_ < $dimension );
+ @chessboard[ $row + $_ ][ $column - $_ ][ $height ] = False if ( $row + $_ < $dimension && $column - $_ >= 0 );
+ }
+
+ @chessboard[ $row ][ $column ][ $height ] = 'QUEEN';
+}
+
+
+
+sub show-chessboard( @chessboard, $dimension ) {
+ for 0 ..^ $dimension -> $height {
+ say "Layer $height";
+
+ for 0 ..^ $dimension -> $row {
+ for 0 ..^ $dimension -> $column {
+ given @chessboard[ $row ][ $column ][ $height ] {
+ when Str { print "\t ", @chessboard[ $row ][ $column ][ $height ]; }
+ default { print "\t x "; }
+ }
+
+ }
+
+ print "\n";
+ }
+ }
+}
+
+sub MAIN( Int $dimension = 3 ){
+ my $val = True;
+ my @chessboard = [[True xx $dimension] xx $dimension] xx $dimension;
+
+ for 0 ..^ $dimension -> $height {
+ for 0 ..^ $dimension -> $row {
+ for 0 ..^ $dimension -> $column {
+
+ # is the cell available?
+ next if ! @chessboard[ $row ][ $column ][ $height ];
+
+ # # place the queen
+ place-queen( @chessboard, $row, $column, $height, $dimension );
+ }
+ }
+ }
+
+
+ show-chessboard( @chessboard, $dimension );
+}