aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2021-01-04 08:58:44 +0000
committerdrbaggy <js5@sanger.ac.uk>2021-01-04 08:58:44 +0000
commitc783e2d35c0528bfbc0817f635ddb7fc048947fd (patch)
tree0b8fee23fa7aaef9cec22ad1fe6ecbbd1b977c24
parent9091342ab5bce0a161761c376508a09ae3ad2a82 (diff)
downloadperlweeklychallenge-club-c783e2d35c0528bfbc0817f635ddb7fc048947fd.tar.gz
perlweeklychallenge-club-c783e2d35c0528bfbc0817f635ddb7fc048947fd.tar.bz2
perlweeklychallenge-club-c783e2d35c0528bfbc0817f635ddb7fc048947fd.zip
94 sols
-rw-r--r--challenge-094/james-smith/perl/Tree.pm22
-rw-r--r--challenge-094/james-smith/perl/ch-1.pl28
-rw-r--r--challenge-094/james-smith/perl/ch-2.pl27
3 files changed, 77 insertions, 0 deletions
diff --git a/challenge-094/james-smith/perl/Tree.pm b/challenge-094/james-smith/perl/Tree.pm
new file mode 100644
index 0000000000..76a6e6a917
--- /dev/null
+++ b/challenge-094/james-smith/perl/Tree.pm
@@ -0,0 +1,22 @@
+package Tree;
+
+sub new {
+ my $class = shift;
+ my $value = shift;
+ my $self = [ $value ];
+ bless $self, $class;
+}
+
+sub add_child {
+ my( $self,$child ) = @_;
+ push @{$self}, $child;
+ return $self;
+}
+
+sub flatten {
+ my $self = shift;
+ my ($v,@sub) = @{$self};
+ return ( $v, map { $_->flatten } @sub );
+}
+
+1;
diff --git a/challenge-094/james-smith/perl/ch-1.pl b/challenge-094/james-smith/perl/ch-1.pl
new file mode 100644
index 0000000000..f4348e4fe7
--- /dev/null
+++ b/challenge-094/james-smith/perl/ch-1.pl
@@ -0,0 +1,28 @@
+#!/usr/local/bin/perl
+
+use strict;
+
+use warnings;
+use feature qw(say);
+use Test::More;
+
+warn render(group_anagrams(qw(opt bat saw tab pot top was)));
+warn render(group_anagrams(qw(x)));
+
+is( render(group_anagrams(qw(opt bat saw tab pot top was))), '[bat tab] [saw was] [opt pot top]' );
+is( render(group_anagrams(qw(x))), '[x]');
+
+
+done_testing();
+
+sub render {
+ my $anagrams = shift;
+ return join q( ), map { sprintf '[%s]', join q( ), sort @{$anagrams->{$_}} } sort keys %{$anagrams};
+}
+
+sub group_anagrams {
+ my $anagrams = {};
+ push @{$anagrams->{ join q(),sort split m{}}}, $_ foreach @_;
+ return $anagrams;
+}
+
diff --git a/challenge-094/james-smith/perl/ch-2.pl b/challenge-094/james-smith/perl/ch-2.pl
new file mode 100644
index 0000000000..66f3b0e821
--- /dev/null
+++ b/challenge-094/james-smith/perl/ch-2.pl
@@ -0,0 +1,27 @@
+#!/usr/local/bin/perl
+
+use strict;
+
+use warnings;
+use feature qw(say);
+use Test::More;
+use lib '.';
+use Tree;
+
+my $x = Tree->new(1)->add_child(
+ Tree->new(2)->add_child(
+ Tree->new(4)->add_child(
+ Tree->new(5)->add_child(
+ Tree->new(6)
+ )->add_child(
+ Tree->new(7)
+ )
+ )
+ )
+ )->add_child(
+ Tree->new(3)
+ );
+is( (join ' -> ', $x->flatten ), '1 -> 2 -> 4 -> 5 -> 6 -> 7 -> 3' );
+
+done_testing();
+