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");