use warnings; use strict; my @lines = <>; s/\///g for @lines; chomp for @lines; my $len = scalar @lines; my $bitcount; while ($len > 1) { $len % 2 and die "Number of lines is not a power of 2"; $len /= 2; ++$bitcount; } $len = scalar @lines; length == $bitcount + 1 or die "Length of line '$_' is incorrect" for @lines; @lines = sort @lines; my @transitions = map chop, @lines; @lines = map oct "0b$_", @lines; $lines[$_] == $_ or die "Lines must cover all combinations" for 0..($len-1); printf "%d\n", 7 + ($len / 2); print < "8", '1' => "9", '$' => "8D"); for my $n (0 .. ($xs / 2) - 1) { printf "%dAB\t8.48\n", $n * 2 + 8; printf "%dc\t%d\n", $n * 2 + 8, (4 * $n + 0) % $xs + 8; printf "%dC\t%d\n", $n * 2 + 8, (4 * $n + 2) % $xs + 8; printf "%dabc\t%sa\n", $n * 2 + 8, $tencode{shift @transitions}; printf "%dabC\t%sa\n", $n * 2 + 8, $tencode{shift @transitions}; printf "%dAB\t9.49\n", $n * 2 + 9; printf "%dc\t%d\n", $n * 2 + 9, (4 * $n + 1) % $xs + 8; printf "%dC\t%d\n", $n * 2 + 9, (4 * $n + 3) % $xs + 8; printf "%dabc\t%saC7\n", $n * 2 + 9, $tencode{shift @transitions}; printf "%dabC\t%saC7\n", $n * 2 + 9, $tencode{shift @transitions}; } print "AAA 2 9 3 6 aa\n";