aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Bell_West <roger@firedrake.org>2020-03-23 11:27:57 +0000
committerRoger Bell_West <roger@firedrake.org>2020-03-23 11:27:57 +0000
commitade47cc863d4756c1d13a71435bb429d782a5fe5 (patch)
tree7778e8aec9f0776060129f03173f580ade81e509
parentedc3a464e45e45970570b381c78ef6bd37a4a8b0 (diff)
downloadperlweeklychallenge-club-ade47cc863d4756c1d13a71435bb429d782a5fe5.tar.gz
perlweeklychallenge-club-ade47cc863d4756c1d13a71435bb429d782a5fe5.tar.bz2
perlweeklychallenge-club-ade47cc863d4756c1d13a71435bb429d782a5fe5.zip
Solutions for challenge #53.
-rwxr-xr-xchallenge-053/roger-bell-west/perl5/ch-1.pl37
-rwxr-xr-xchallenge-053/roger-bell-west/perl5/ch-2.pl31
-rwxr-xr-xchallenge-053/roger-bell-west/perl6/ch-1.p634
-rwxr-xr-xchallenge-053/roger-bell-west/perl6/ch-2.p628
4 files changed, 130 insertions, 0 deletions
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>],
+ a => [<e i>],
+ e => [<i>],
+ i => [<a e o u>],
+ o => [<a u>],
+ u => [<o e>],
+ );
+
+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;
+}