From 42de3429122f018e501f84453cd40983e0541c98 Mon Sep 17 00:00:00 2001 From: Adam Russell Date: Sun, 29 Nov 2020 13:57:44 -0500 Subject: Perl solutions and blog for challenge 088. --- challenge-088/adam-russell/blog.txt | 1 + challenge-088/adam-russell/perl/ch-1.pl | 30 ++++++++++++++ challenge-088/adam-russell/perl/ch-2.pl | 70 +++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 challenge-088/adam-russell/blog.txt create mode 100644 challenge-088/adam-russell/perl/ch-1.pl create mode 100644 challenge-088/adam-russell/perl/ch-2.pl diff --git a/challenge-088/adam-russell/blog.txt b/challenge-088/adam-russell/blog.txt new file mode 100644 index 0000000000..12e2892ddf --- /dev/null +++ b/challenge-088/adam-russell/blog.txt @@ -0,0 +1 @@ +http://www.rabbitfarm.com/cgi-bin/blosxom/perl/2020/11/29 diff --git a/challenge-088/adam-russell/perl/ch-1.pl b/challenge-088/adam-russell/perl/ch-1.pl new file mode 100644 index 0000000000..9f5394cc86 --- /dev/null +++ b/challenge-088/adam-russell/perl/ch-1.pl @@ -0,0 +1,30 @@ +use strict; +use warnings; +## +# You are given an array of positive integers @N. +# Write a script to return an array @M where $M[i] +# is the product of all elements of @N except the index $N[i]. +## +sub list_product{ + my @numbers = @_; + my $product = 1; + map {$product *= $_ } @numbers; + return $product; +} + +MAIN:{ + my(@N, @M); + @N = (5, 2, 1, 4, 3); + for my $i (0 .. (@N - 1)){ + my @numbers = @N[0 .. $i - 1, $i+1 .. (@N - 1)]; + push @M, list_product(@numbers); + } + print "(" . join(", ", @M) . ")\n"; + @M = (); + @N = (2, 1, 4, 3); + for my $i (0 .. (@N - 1)){ + my @numbers = @N[0 .. $i - 1, $i+1 .. (@N - 1)]; + push @M, list_product(@numbers); + } + print "(" . join(", ", @M) . ")\n"; +} \ No newline at end of file diff --git a/challenge-088/adam-russell/perl/ch-2.pl b/challenge-088/adam-russell/perl/ch-2.pl new file mode 100644 index 0000000000..4b2706aba4 --- /dev/null +++ b/challenge-088/adam-russell/perl/ch-2.pl @@ -0,0 +1,70 @@ +use strict; +use warnings; +## +# You are given m x n matrix of positive integers. +# Write a script to print spiral matrix as a list. +## +sub print_remove_top{ + my(@matrix) = @_; + print join(", ", @{$matrix[0]}) . ", "; + splice(@matrix, 0, 1); + return @matrix; +} + +sub print_remove_right{ + my(@matrix) = @_; + my @right; + for my $row (@matrix){ + push @right, $row->[-1]; + my @a = @{$row}[0 .. (@{$row} - 2)]; + $row = \@a; + } + print join(", ", @right) . ", "; + return @matrix; +} + +sub print_remove_bottom{ + my(@matrix) = @_; + print join(", ", reverse(@{$matrix[-1]})) . ", "; + splice(@matrix, -1); + return @matrix; +} + +sub print_remove_left{ + my(@matrix) = @_; + my @left; + for my $row (@matrix){ + push @left, $row->[0]; + my @a = @{$row}[1 .. (@{$row} - 1)]; + $row = \@a; + } + print join(", ", reverse(@left)) . ", "; + return @matrix; +} + +sub spiral_print{ + my(@matrix) = @_; + print "["; + { + @matrix = print_remove_top(@matrix) if @matrix; + @matrix = print_remove_right(@matrix) if @matrix; + @matrix = print_remove_bottom(@matrix) if @matrix; + @matrix = print_remove_left(@matrix) if @matrix; + redo if @matrix; + } + print "\b\b]\n"; +} + +MAIN:{ + spiral_print( + [1, 2, 3], + [4, 5, 6], + [7, 8, 9] + ); + spiral_print( + [ 1, 2, 3, 4], + [ 5, 6, 7, 8], + [ 9, 10, 11, 12], + [13, 14, 15, 16] + ); +} \ No newline at end of file -- cgit