_8__3__19 4_8___7__ ##```## _8__3__19 48_____7_ ##``````## sub appendinverse { my \$string = shift; my @revarray; for my \$i (0..8) { \$revarray[0+substr(\$string, \$i, 1)] = \$i; } delete \$revarray[0]; for my \$i (1..9) { if(exists \$revarray[\$i]) { \$string .= \$revarray[\$i]; } else { \$string .= "_"; } } return \$string; } # test harness stolen from steves my @tests = (qw/ _8__3__19 48____7__ _8__3__19 4_2___7__ _8__3__19 4_8___7__ __8_3__19 48____7__ __8_3__19 84____7__ _8__3__19 48_____7_ / ); # Schwartzian transform for my \$i (@tests) { \$i = appendinverse \$i; # print "\$i\n"; } sub compatible { my \$a = shift; my \$b = shift; # modified as suggested by steves # print "\n\$a\n\$b\n"; print "\n",substr(\$a,0,9),"\n",substr(\$b,0,9),"\n"; if ((\$a^\$b)=~/[\001-\017]/) { print "incompatible\n"; } else { print "compatible\n"; } } # test harness stolen from steves my (\$s1, \$s2); while (defined(\$s1 = shift(@tests))) { \$s2 = shift(@tests); compatible(\$s1, \$s2); } ##``````## _8__3__197_4____18 48____7_____0__61_ compatible _8__3__197_4____18 4_2___7___2_0__6__ compatible _8__3__197_4____18 4_8___7_____0__62_ incompatible __8_3__197_4____28 48____7_____0__61_ incompatible __8_3__197_4____28 84____7_____1__60_ incompatible _8__3__197_4____18 48_____7____0__71_ incompatible ##``````## _8__3__19 48____7__ compatible _8__3__19 4_2___7__ compatible _8__3__19 4_8___7__ incompatible __8_3__19 48____7__ incompatible __8_3__19 84____7__ incompatible _8__3__19 48_____7_ incompatible ```