#!/usr/bin/perl use strict; use warnings; my $bits = shift; my $den = 2**$bits; foreach my $num (1 .. $den-1) { my $str = sprintf "%0${bits}b", $num; $str =~ s/10*$//; my $t = 0; my @groups = grep $t^=1, $str =~ /((.)\2*)/g; s/0/R & /g, s/1/R | /g, s/^/(/ for @groups; $str = join('', @groups) . 'R' . (')'x@groups); $str =~ s/^\((.*)\)$/$1/; print "E($num/$den) = $str\n"; }