BrowserUk has asked for the wisdom of the Perl Monks concerning the following question:
Given two strings of equal length that contain digits and some placeholder value, I want a fast way to determine if the pair are 'compatible'.
Eg. Given (where underscore represents the placeholder but this could be substituted by any other non-digit value that helped the algorithm)
_8__3__19 48____7__
These two strings are compatible because no single digit appears in both strings except where it appears in the same position (8)
Whereas these two would be incompatible
_8__3__19 4_8___7__
because the digit 8 appears in both, but at a different position. And these two are incompatible
_8__3__19 48_____7_
because the second last digit in both strings contains a different value.
I know how to do this with a loop and substr and a hash, but it is rather slow and I have a set N of M sets of these strings and I want to produce a set P, where each element of P is a string that is combines one string from as many of the N sets of strings as are compatible. Given the combinatorial nature of the problem, I need to make it as quick as possible.
I keep thinking that this can be done using string-wise boolean operations, but I cannot see how?
If there is a better way of structuring the data (eg. arrays of char rather than strings) that makes the process quicker or easier that's good to.