aboutsummaryrefslogtreecommitdiff
path: root/challenge-050
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-03-05 16:17:13 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-03-05 16:17:13 +0000
commit3969b7ef92f224d4425030c25954ba3c3692ecf0 (patch)
tree07ad35c5f0f81f7b63b513ad223ead126ef606c7 /challenge-050
parent4b57942b233fa007b47bab02d160d017158b23c7 (diff)
parent10f630aeee5db52e901c0d3e868a5104cd991852 (diff)
downloadperlweeklychallenge-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-xchallenge-050/e-choroba/perl/ch-1.pl20
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];
}
}