summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-10-25 02:34:49 -0500
committerJesse Luehrs <doy@tozt.net>2012-10-25 02:34:49 -0500
commit4550e7c7a184a8786a204ed6962a7e2302eb6baf (patch)
treeec7a7aeb9cc6bdd162fcdbba57895d176fb4139b
parentf941a821ef1b78baf66799c94084d69cc4c334fa (diff)
downloadrosalind-4550e7c7a184a8786a204ed6962a7e2302eb6baf.tar.gz
rosalind-4550e7c7a184a8786a204ed6962a7e2302eb6baf.zip
another solution
-rw-r--r--SETO.pl40
1 files changed, 40 insertions, 0 deletions
diff --git a/SETO.pl b/SETO.pl
new file mode 100644
index 0000000..e36a793
--- /dev/null
+++ b/SETO.pl
@@ -0,0 +1,40 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use 5.016;
+
+chomp(my $size = <>);
+my %universe = map { $_ => 1 } 1..$size;
+my %A = parse_set(scalar <>);
+my %B = parse_set(scalar <>);
+
+my %union = (%A, %B);
+my %intersection = (map { $_ => 1 } grep { $B{$_} } keys %A);
+my %differenceA = %A;
+delete $differenceA{$_} for keys %B;
+my %differenceB = %B;
+delete $differenceB{$_} for keys %A;
+my %Ac = %universe;
+delete $Ac{$_} for keys %A;
+my %Bc = %universe;
+delete $Bc{$_} for keys %B;
+
+say show_set(%union);
+say show_set(%intersection);
+say show_set(%differenceA);
+say show_set(%differenceB);
+say show_set(%Ac);
+say show_set(%Bc);
+
+sub parse_set {
+ my ($str) = @_;
+
+ chomp($str);
+ $str =~ s/^{|}$//g;
+ return map { $_ => 1 } split ', ', $str;
+}
+
+sub show_set {
+ my %set = @_;
+ return '{' . join(', ', sort { $a <=> $b } keys(%set)) . '}';
+}