diff options
| author | drbaggy <js5@sanger.ac.uk> | 2021-01-04 08:58:44 +0000 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2021-01-04 08:58:44 +0000 |
| commit | c783e2d35c0528bfbc0817f635ddb7fc048947fd (patch) | |
| tree | 0b8fee23fa7aaef9cec22ad1fe6ecbbd1b977c24 | |
| parent | 9091342ab5bce0a161761c376508a09ae3ad2a82 (diff) | |
| download | perlweeklychallenge-club-c783e2d35c0528bfbc0817f635ddb7fc048947fd.tar.gz perlweeklychallenge-club-c783e2d35c0528bfbc0817f635ddb7fc048947fd.tar.bz2 perlweeklychallenge-club-c783e2d35c0528bfbc0817f635ddb7fc048947fd.zip | |
94 sols
| -rw-r--r-- | challenge-094/james-smith/perl/Tree.pm | 22 | ||||
| -rw-r--r-- | challenge-094/james-smith/perl/ch-1.pl | 28 | ||||
| -rw-r--r-- | challenge-094/james-smith/perl/ch-2.pl | 27 |
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(); + |
