Skip to content

Instantly share code, notes, and snippets.

@codesnakers
Created March 29, 2019 20:47
Show Gist options
  • Save codesnakers/389bcf46feaf3c3c59df1a499437f914 to your computer and use it in GitHub Desktop.
Save codesnakers/389bcf46feaf3c3c59df1a499437f914 to your computer and use it in GitHub Desktop.
/**
Solution for: http://codesnakers.com/projects/5.png
*/
function solution(S, T) {
// write your code in JavaScript (Node.js 8.9.4)
if(S===T) return "EQUAL";
var lenS = S.length;
var lenT = T.length;
var diff;
var swap = [];
var sortedS = S.split(""), sortedT = T.split("");
var sortFunc = function(x,y){
return x.charCodeAt(0) - y.charCodeAt(0);
};
var diff = function(a1, a2) {
var a = [], diff = [];
for (var i = 0; i < a1.length; i++) {
a[a1[i]] = true;
}
for (var i = 0; i < a2.length; i++) {
if (a[a2[i]]) {
delete a[a2[i]];
} else {
a[a2[i]] = true;
}
}
for (var k in a) {
diff.push(k);
}
return diff.length>1?false:diff[0];
}
sortedS = sortedS.sort(sortFunc);
sortedT = sortedT.sort(sortFunc);
/*swap or replace*/
if(lenS === lenT){
diff = 0;
for(var i=0; i<lenS; i++){
if(sortedS[i] !== sortedT[i]){
diff++;
}
}
if(diff>1){
return "IMPOSSIBLE";
}
if(diff === 0){/* SWAP: its an anagram */
for(var i=0; i<(lenS-1); i++){
if(S.charAt(i) === T.charAt(i+1) && S.charAt(i+1) === T.charAt(i)){
swap.push(S.charAt(i)+" "+S.charAt(i+1));
}
}
if(swap.length === 1){
return "SWAP "+swap[0];
}else{
return "IMPOSSIBLE";
}
}
if(diff === 1){/* REPLACE */
for(var i=0; i<lenS; i++){
if(S.charAt(i) !== T.charAt(i)){
return "REPLACE "+S.charAt(i)+" "+T.charAt(i);
}
}
}
}else if(Math.abs(lenS-lenT) === 1){/* INSERT */
var insertLetters;
if(lenS>lenT){
insertLetters = diff(sortedT, sortedS);
}else{
insertLetters = diff(sortedT, sortedS);
}
return insertLetters===false?"IMPOSSIBLE":"INSERT " + insertLetters;
}
return "IMPOSSIBLE";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment