diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-03-05 16:17:13 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-03-05 16:17:13 +0000 |
| commit | 3969b7ef92f224d4425030c25954ba3c3692ecf0 (patch) | |
| tree | 07ad35c5f0f81f7b63b513ad223ead126ef606c7 /challenge-050 | |
| parent | 4b57942b233fa007b47bab02d160d017158b23c7 (diff) | |
| parent | 10f630aeee5db52e901c0d3e868a5104cd991852 (diff) | |
| download | perlweeklychallenge-club-3969b7ef92f224d4425030c25954ba3c3692ecf0.tar.gz perlweeklychallenge-club-3969b7ef92f224d4425030c25954ba3c3692ecf0.tar.bz2 perlweeklychallenge-club-3969b7ef92f224d4425030c25954ba3c3692ecf0.zip | |
Merge branch 'master' of https://github.com/manwar/perlweeklychallenge-club
Diffstat (limited to 'challenge-050')
| -rwxr-xr-x | challenge-050/e-choroba/perl/ch-1.pl | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/challenge-050/e-choroba/perl/ch-1.pl b/challenge-050/e-choroba/perl/ch-1.pl index ccd05e335b..436d44f96c 100755 --- a/challenge-050/e-choroba/perl/ch-1.pl +++ b/challenge-050/e-choroba/perl/ch-1.pl @@ -4,27 +4,27 @@ use strict; { package MyInterval; + use enum 'BITMASK:' => qw( LEFT RIGHT SINGLE ); + sub new { bless {}, shift } sub insert { my ($self, $from, $to) = @_; - $self->{$from} ||= 0, undef $self->{same}{$from}, return - if $from == $to; - $self->{$from} |= 1; - $self->{$_} = 3 for $from + 1 .. $to - 1; - $self->{$to} |= 2; + $self->{$from} |= SINGLE, return if $from == $to; + $self->{$from} |= LEFT; + $self->{$_} = LEFT | RIGHT for $from + 1 .. $to - 1; + $self->{$to} |= RIGHT; } sub out { my ($self) = @_; my @r; - my $same = $self->{same}; - for my $k (sort { $a <=> $b } grep $_ ne 'same', keys %$self) { - if ($self->{$k} == 1) { + for my $k (sort { $a <=> $b } grep 'same' ne $_, keys %$self) { + if (($self->{$k} & (LEFT | RIGHT)) == LEFT) { push @r, [$k]; - } elsif ($self->{$k} == 2) { + } elsif (($self->{$k} & (LEFT | RIGHT)) == RIGHT) { push @{ $r[-1] }, $k - } elsif ((! @r || 1 != @{ $r[-1] }) && exists $same->{$k}) { + } elsif ((! @r || 1 != @{ $r[-1] }) && ($self->{$k} == SINGLE)) { push @r, [$k, $k]; } } |
