From ade47cc863d4756c1d13a71435bb429d782a5fe5 Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Mon, 23 Mar 2020 11:27:57 +0000 Subject: Solutions for challenge #53. --- challenge-053/roger-bell-west/perl5/ch-1.pl | 37 +++++++++++++++++++++++++++++ challenge-053/roger-bell-west/perl5/ch-2.pl | 31 ++++++++++++++++++++++++ challenge-053/roger-bell-west/perl6/ch-1.p6 | 34 ++++++++++++++++++++++++++ challenge-053/roger-bell-west/perl6/ch-2.p6 | 28 ++++++++++++++++++++++ 4 files changed, 130 insertions(+) create mode 100755 challenge-053/roger-bell-west/perl5/ch-1.pl create mode 100755 challenge-053/roger-bell-west/perl5/ch-2.pl create mode 100755 challenge-053/roger-bell-west/perl6/ch-1.p6 create mode 100755 challenge-053/roger-bell-west/perl6/ch-2.p6 diff --git a/challenge-053/roger-bell-west/perl5/ch-1.pl b/challenge-053/roger-bell-west/perl5/ch-1.pl new file mode 100755 index 0000000000..b8610926bd --- /dev/null +++ b/challenge-053/roger-bell-west/perl5/ch-1.pl @@ -0,0 +1,37 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +my @in=([1,2,3], + [4,5,6], + [7,8,9], + ); + +my @out=rotate(1,@in); + +foreach my $r (@out) { + print '[ '.join(', ',@{$r})." ]\n"; +} + +sub rotate { + my ($rotations,@in)=@_; + my $xs=$#in; + foreach my $ya (@in) { + if ($#{$ya} != $xs) { + die "not a square matrix\n"; + } + } + my @out=@in; + foreach (1..$rotations) { + my @im=@out; + my @tmp; + foreach my $x (0..$xs) { + foreach my $y (0..$xs) { + $tmp[$y][$xs-$x]=$im[$x][$y]; + } + } + @out=@tmp; + } + return @out; +} diff --git a/challenge-053/roger-bell-west/perl5/ch-2.pl b/challenge-053/roger-bell-west/perl5/ch-2.pl new file mode 100755 index 0000000000..3c3a1a9e10 --- /dev/null +++ b/challenge-053/roger-bell-west/perl5/ch-2.pl @@ -0,0 +1,31 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +my %tree=( + '' => [qw(a e i o u)], + a => [qw(e i)], + e => [qw(i)], + i => [qw(a e o u)], + o => [qw(a u)], + u => [qw(o e)], + ); + +print map {"$_\n"} generate(2,\%tree); + +sub generate { + my ($len,$tree)=@_; + my @list=(''); + while (1) { + if (length($list[0])==$len) { + last; + } + my $r=shift @list; + my $s=substr($r,-1,1) || ''; + foreach my $extension (@{$tree{$s}}) { + push @list,$r.$extension; + } + } + return @list; +} diff --git a/challenge-053/roger-bell-west/perl6/ch-1.p6 b/challenge-053/roger-bell-west/perl6/ch-1.p6 new file mode 100755 index 0000000000..72d28167f9 --- /dev/null +++ b/challenge-053/roger-bell-west/perl6/ch-1.p6 @@ -0,0 +1,34 @@ +#! /usr/bin/perl6 + +my @in=([1,2,3], + [4,5,6], + [7,8,9], + ); + +my @out=rotate(1,@in); + +for @out -> @r { + print '[ ' ~ join(', ',@r) ~ " ]\n"; +} + +sub rotate { + my ($rotations,@in)=@_; + my $xs=@in.end; + for @in -> @ya { + if (@ya.end != $xs) { + die "not a square matrix\n"; + } + } + my @out=@in; + for 1..$rotations { + my @im=@out; + my @tmp; + for 0..$xs -> $x { + for 0..$xs -> $y { + @tmp[$y][$xs-$x]=@im[$x][$y]; + } + } + @out=@tmp; + } + return @out; +} diff --git a/challenge-053/roger-bell-west/perl6/ch-2.p6 b/challenge-053/roger-bell-west/perl6/ch-2.p6 new file mode 100755 index 0000000000..42b3d24a3d --- /dev/null +++ b/challenge-053/roger-bell-west/perl6/ch-2.p6 @@ -0,0 +1,28 @@ +#! /usr/bin/perl6 + +my %tree=( + '' => [], + a => [], + e => [], + i => [], + o => [], + u => [], + ); + +print map {"$_\n"}, generate(2,%tree); + +sub generate { + my ($len,%tree)=@_; + my @list=(''); + while (1) { + if (@list[0].chars==$len) { + last; + } + my $r=shift @list; + my $s = substr($r,*-1,1) || ''; + for @(%tree{$s}) -> $extension { + push @list,$r ~ $extension; + } + } + return @list; +} -- cgit