#!/usr/bin/perl # Copyright 2002-2007, Paul Johnson (pjcj@cpan.org) # This software is free. It is licensed under the same terms as Perl itself. # The latest version of this software should be available from my homepage: # http://www.pjcj.net use strict; use warnings; my @x; for my $y (0, 0) { for my $z (1, 0) { if ($y && $z) { $x[1]++; } else { $x[2]++; } if ($y || $z) { $x[3]++; } else { $x[4]++; } $y && $x[5]++; $x[5]++ if $y; $z && $x[6]++; $x[6]++ if $z; $y || $x[7]++; $x[7]++ unless $y; $z || $x[8]++; $x[8]++ unless $z; $y ? $x[9]++ : $x[10]++; $z ? $x[11]++ : $x[12]++; if ($y) { $x[13]++; } elsif ($y && $z) { $x[14]++; } elsif ($y || $z) { $x[15]++; } else { $x[16]++; } $y && $z && $x[17]++; $y && $z && $x[18]++; } } for my $y (0, 1) { $y || next; $x[18]++; } for my $y (1, 0) { $y || next; $x[19]++; } for my $y (0, 1) { $y && next; $x[20]++; } for my $y (1, 0) { $y && next; $x[21]++; } for my $y (0, 1) { no warnings "void"; my $w = $y xor next; $x[22]++; } for my $y (1, 0) { no warnings "void"; my $w = $y xor next; $x[23]++; } for my $y (0, 1) { $y || last; $x[24]++; } for my $y (1, 0) { $y || last; $x[25]++; } for my $y (0, 1) { $y && last; $x[26]++; } for my $y (1, 0) { $y && last; $x[27]++; } for my $y (0, 1) { no warnings "void"; my $w = $y xor last; $x[28]++; } for my $y (1, 0) { no warnings "void"; my $w = $y xor last; $x[29]++; } for my $y (0, 1) { $y || goto G1; $x[30]++; } G1: for my $y (1, 0) { $y || goto G2; $x[31]++; } G2: for my $y (0, 1) { $y && goto G3; $x[32]++; } G3: for my $y (1, 0) { $y && goto G4; $x[33]++; } G4: for my $y (0, 1) { no warnings "void"; my $w = $y xor goto G5; $x[34]++; } G5: for my $y (1, 0) { no warnings "void"; my $w = $y xor goto G6; $x[35]++; } G6: my $z; $z = -1; for my $y (0, 1) { $z++; last if $z > 1; $z || redo; $x[36]++; } $z = -1; for my $y (1, 0) { $z++; last if $z > 1; !$z || redo; $x[37]++; } $z = -1; for my $y (0, 1) { $z++; last if $z > 1; $z && redo; $x[38]++; } $z = -1; for my $y (1, 0) { $z++; last if $z > 1; !$z && redo; $x[39]++; } $z = -1; for my $y (0, 1) { $z++; last if $z > 1; no warnings "void"; my $w = $z xor redo; $x[40]++; } $z = -1; for my $y (1, 0) { $z++; last if $z > 1; no warnings "void"; my $w = !$z xor redo; $x[41]++; } my $s; $s = sub { shift || return; $x[42]++; }; for my $y (0, 1) { $s->($y) } for my $y (1, 0) { $s->($y) } $s = sub { shift && return; $x[43]++; }; for my $y (0, 1) { $s->($y) } for my $y (1, 0) { $s->($y) } $s = sub { no warnings "void"; shift xor return; $x[44]++; }; for my $y (0, 1) { $s->($y) } for my $y (1, 0) { $s->($y) } my ($a, $b) = (0, 1); if ($a && $b) { print "path 1\n"; } elsif (!$a && !$b) { print "path 2\n"; } elsif ($b || 0) { print "path 3\n"; if (!$b || $a) { print "path 4\n"; } elsif (!$a && $b) { print "path 5\n"; } }