strdiff <- function(src, dest)
{
x <- unlist(strsplit(attr(adist(src, dest, counts = TRUE), "trafos"), ""))
n <- length(x)
spos <- 1:(n + 1) - c(0, cumsum(x == "I"))
dpos <- 1:(n + 1) - c(0, cumsum(x == "D"))
cat(src, "->", dest, "\n")
for (i in 1:n) {
if (x[i] == "D" | x[i] == "S") {
cat
(sprintf("-%d:%s\n", i
, substr
(src
, spos
[i
], spos
[i
]))) }
if (x[i] == "I" | x[i] == "S") {
cat
(sprintf("+%d:%s\n", i
, substr
(dest
, dpos
[i
], dpos
[i
]))) }
}
cat("\n")
}
strdiff("abcdef", "abdef")
strdiff("abdef", "bcdef")
strdiff("bcdef", "abcdef")
c3RyZGlmZiA8LSBmdW5jdGlvbihzcmMsIGRlc3QpCnsKICB4IDwtIHVubGlzdChzdHJzcGxpdChhdHRyKGFkaXN0KHNyYywgZGVzdCwgY291bnRzID0gVFJVRSksICJ0cmFmb3MiKSwgIiIpKQogIG4gPC0gbGVuZ3RoKHgpCiAgc3BvcyA8LSAxOihuICsgMSkgLSBjKDAsIGN1bXN1bSh4ID09ICJJIikpCiAgZHBvcyA8LSAxOihuICsgMSkgLSBjKDAsIGN1bXN1bSh4ID09ICJEIikpCgogIGNhdChzcmMsICItPiIsIGRlc3QsICJcbiIpCiAgZm9yIChpIGluIDE6bikgewogICAgaWYgKHhbaV0gPT0gIkQiIHwgeFtpXSA9PSAiUyIpIHsKICAgICAgY2F0KHNwcmludGYoIi0lZDolc1xuIiwgaSwgc3Vic3RyKHNyYywgIHNwb3NbaV0sIHNwb3NbaV0pKSkKICAgIH0KICAgIGlmICh4W2ldID09ICJJIiB8IHhbaV0gPT0gIlMiKSB7CiAgICAgIGNhdChzcHJpbnRmKCIrJWQ6JXNcbiIsIGksIHN1YnN0cihkZXN0LCBkcG9zW2ldLCBkcG9zW2ldKSkpCiAgICB9CiAgfQogIGNhdCgiXG4iKQp9CgpzdHJkaWZmKCJhYmNkZWYiLCAiYWJkZWYiKQpzdHJkaWZmKCJhYmRlZiIsICJiY2RlZiIpCnN0cmRpZmYoImJjZGVmIiwgImFiY2RlZiIp