summaryrefslogblamecommitdiffstats
path: root/SETO.pl
blob: e36a7939fc7ceefa1913ef689334ef280d371548 (plain) (tree)







































                                                                 
#!/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)) . '}';
}