in reply to Boolean algebra
There is room for someone to come along and to reduce my code's verbosity further. Welcommen.
#!/usr/bin/perl -w use strict; my $input = "(abdc)(adc-b)"; my @expr; while ($input =~ s!\(([-a-z,]+)\)!!) { my @items = split '', $1; my (@and, @or) = (); while (@items) { my $elem = shift @items; if ($elem eq '-') { push @or, shift @items; } else { push @and, $elem; } } push @expr, [ \@and, \@or ]; } my $first = shift @expr; my @output = @{ @$first[0] }; while (my $next = shift @expr) { my (%keep, %drop); @keep{@{ @$next[0] }} = (); @drop{@{ @$next[1] }} = (); foreach (@output) { next if (exists $keep{$_}); $_ = undef if (exists $drop{$_}); } } my $output = join('', grep{ defined($_) } @output); print "Result is; $output\n";
Update: I realized early this morning that this only handles the OR case in the second and subsequent input units. Back to the drawing board.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
RE: Re: Boolean algebra
by le (Friar) on Nov 13, 2000 at 17:57 UTC |