I'm trying to find a language or a way to express any change that has occurred to a string.I'm given two strings; a seed string and a new string of the same length that came from it. I'm trying to find the algorithm or causes that made the second string what it is.Now, my current thinking is to come up with a master list of steps that I could then experiment with in different combinations in order to determine the correct algorithm to go from the first string to the second. This master list is potentially infinite, but I'm hoping to find a subset of steps that, taken in combination could describe any possible change to any possible string. Below I have an example of a string and and altered string. I've come up with two steps that can be combined in an algorithm that, taken together, explain how it changed. That is to say given the original string, I can reproduce the mutated string by applying both steps to the original string:Original String A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   QMutated String:A   B   F   D   E   G   H   N   I   J   K   M   C   L   O   P   QThe first step could be to express simply which indices changed. Something perhaps like this: _ _ X _ _ X X X _ _ _ X X X _ _ _The second step could be to express which indices will adopt the values of other indices in the string. For example: index 2 adopts index 5's value, index 5 adopts 6, 6 gets 7, 7 gets 13, 13 gets 11, 11 gets 12, and 12 gets 2 for example. That might be expressed by something like this: _ _ 5 _ _ 6 7 (13) _ _ _  (12) 2 (11) _ _ _The steps above could be done in any order but must both be applied to the seed string. The first step tells us which letter have and have not changed, and the second step tells us what they changed into.These steps make up an algorithm which is sufficient to describe how this string has changed but can't describe strings that introduce new letters or have other types of changes, thus I'll need more possible types of steps to express different kinds of changes. Now I suppose this is a type of compression. idk. But is making a myriad of steps, and then combining them in different ways the appropriate way to do this? Or am I barking up the wrong tree here?It seems intuitive to me that if I'm going to receive many strings like the one above that change in many different ways that I can predict yet then in order to express those changes succinctly I should create a bunch of these types of steps that I can put together as needed to create algorithms for expressing such change. Is my intuition correct? What kinds of problems is this related to? I don't know the correct vocabulary to use.
How to efficiently represent any possible mutations to a string of a given length?
formal languages;data compression