JSFiddle - React, Tailwind, and code Playground
by marlanga
JavaScript
var MORSE = {
a:".-",
b:"-...",
c:"-.-.",
d:"-..",
e:".",
f:"..-.",
g:"--.",
h:"....",
i:"..",
j:".---",
k:"-.-",
l:".-..",
m:"--",
n:"-.",
o:"---",
p:".--.",
q:"--.-",
r:".-.",
s:"...",
t:"-",
u:"..-",
v:"...-",
w:".--",
x:"-..-",
y:"-.--",
z:"--.."
};
function codificaMorse(str){
str=str.toLowerCase();
var n=str.length;
var morse="";
for (var i=0;i<n;i++)
{
morse+=(str[i]!=" ")?MORSE[str[i]]:" ";
}
return morse;
}
function decodificaPalabraMorse(str){
var soluciones=[];
(function recursiva(sol,cadena){
if (cadena=="")
{
soluciones.push(sol);
}
else for (var key in MORSE)
{
if (cadena.indexOf(MORSE[key])==0)
{
recursiva(sol+key,cadena.slice(MORSE[key].length));
}
}
})("",str);
return soluciones;
}
function decodificaMorse(str){
var parciales=str.split(" ").map(function(ele){
return decodificaPalabraMorse(ele.toLowerCase());
});
var soluciones=[];
(function combinatoria(i,str){
if(i==parciales.length)
{
soluciones.push(str.slice(1));
}
else for(var j=0;j<parciales[i].length;j++)
{
combinatoria(i+1, str+" "+parciales[i][j]);
}
})(0,"");
return soluciones;
}
console.time("a");
console.log(decodificaMorse(codificaMorse("Ave Cesar")));
console.timeEnd("a");