summaryrefslogtreecommitdiffstats
path: root/SETO.pl
blob: e36a7939fc7ceefa1913ef689334ef280d371548 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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)) . '}';
}