diff options
Diffstat (limited to 'challenge-068')
| -rw-r--r-- | challenge-068/luca-ferrari/blog-1.txt | 1 | ||||
| -rw-r--r-- | challenge-068/luca-ferrari/blog-2.txt | 1 | ||||
| -rw-r--r-- | challenge-068/luca-ferrari/raku/ch-1.p6 | 35 | ||||
| -rw-r--r-- | challenge-068/luca-ferrari/raku/ch-2.p6 | 52 |
4 files changed, 89 insertions, 0 deletions
diff --git a/challenge-068/luca-ferrari/blog-1.txt b/challenge-068/luca-ferrari/blog-1.txt new file mode 100644 index 0000000000..f1b4eafe0c --- /dev/null +++ b/challenge-068/luca-ferrari/blog-1.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2020/07/06/PerlWeeklyChallenge68.html#task1 diff --git a/challenge-068/luca-ferrari/blog-2.txt b/challenge-068/luca-ferrari/blog-2.txt new file mode 100644 index 0000000000..fef19560a5 --- /dev/null +++ b/challenge-068/luca-ferrari/blog-2.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2020/07/06/PerlWeeklyChallenge68.html#task2 diff --git a/challenge-068/luca-ferrari/raku/ch-1.p6 b/challenge-068/luca-ferrari/raku/ch-1.p6 new file mode 100644 index 0000000000..47d3530ec5 --- /dev/null +++ b/challenge-068/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,35 @@ +#!raku + +# You are given a matrix of size M x N having only 0s and 1s. +# +# Write a script to set the entire row and column to 0 if an element is 0. + +sub print-matrix( @matrix, $m, $n ){ + say "----" ~ "--" x $m; + for 0 ..^ $m -> $row { + print "| "; + for 0 ..^ $n -> $column { + print "@matrix[ ( $row * $m ) + $column ] "; + } + say " |"; + } + say "----" ~ "--" x $m; +} + + +sub MAIN( Int $m, Int $n, *@incoming-matrix ) { + my @matrix = @incoming-matrix; + "Original matrix was ".say; + print-matrix( @incoming-matrix, $m, $n ); + my @zeros = @matrix.grep( * == 0, :k ); + + for @zeros -> $zero-at { + my ( $row, $column ) = ( $zero-at - 1 / $m ).Int, ( $zero-at % $n ).Int; + @matrix[ $_ + $row ] = 0 for 0 ..^ $m; # zero the rows + @matrix[ $column + ( $_ * $m ) ] = 0 for 0 ..^ $n; # zero the columns + } + + "Transformed matrix is".say; + print-matrix( @matrix, $m, $n ); + +} diff --git a/challenge-068/luca-ferrari/raku/ch-2.p6 b/challenge-068/luca-ferrari/raku/ch-2.p6 new file mode 100644 index 0000000000..c8e92d20a9 --- /dev/null +++ b/challenge-068/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,52 @@ +#!raku + +class Node { + has Str $.value is rw; + has Node $.next is rw; +} + + +sub MAIN() { + # build the list + my Node $root = Node.new( :value( "L0" ) ); + my Node $current-node = $root; + for 0 ^..^ 10 { + $current-node.next = Node.new( :value( "L$_" ) ); + $current-node = $current-node.next; + } + + + + # convert into an array + my @nodes; + $current-node = $root; + while ( $current-node ) { + @nodes.push: $current-node; + $current-node = $current-node.next; + } + + + # sort into another array + my @new-nodes; + for 0 ..^ @nodes.elems / 2 { + "switching elements $_ and { @nodes.elems - $_ - 1 }".say; + @new-nodes.push: @nodes[ $_ ]; + @new-nodes.push: @nodes[ @nodes.elems - $_ -1 ]; + + } + + # debug printing + # for 0 ..^ @new-nodes.elems { + # say @new-nodes[ $_ ].value; + # } + + # now adjust linked references + for 0 ..^ @new-nodes.elems - 1 { + @new-nodes[ $_ ].next = @new-nodes[ $_ + 1 ]; + } + + @new-nodes[ @new-nodes.elems - 1 ].next = Nil; + + # all done + $root.say; +} |
