JSFiddle - React, Tailwind, and code Playground

by Brondem Brondem

JavaScript

var transAsciiToMorse = 
[ '.-'  , '-...', '-.-.', '-..' , '.'   , //abcde
  '..-.', '--.' , '....', '..'  , '.---', //fghij
  '-.-' , '.-..', '--'  , '-.'  , '---' , //klmno
  '.--.', '--.-', '.-.' , '...' , '-'   , //pqrst
  '..-' , '...-', '.--' , '-..-', '-.--', //uvwxy
  '--..' ]                                //z

var transMorseToAscii = [
[ 5,20], // init 
[18,23], // a
[ 0, 0], // b
[ 0, 0], // c
[ 2,24], // d
[ 9, 1], // e
[ 0, 0], // f
[26,17], // g
[ 0, 0], // h
[19,21], // i
[ 0, 0], // j
[ 3,25], // k
[ 0, 0], // l
[ 7,15], // m
[ 4,11], // n
[ 0, 0], // o
[ 0, 0], // p
[ 0, 0], // q
[12, 0], // r
[ 8,22], // s
[14,13], // t
[ 6, 0], // u
[ 0, 0], // v
[16,10], // w
[ 0, 0], // x
[ 0, 0], // y
[ 0, 0]];// z

function asciiToMorse( frase ){
    frase = frase.toLowerCase();
    var morse = '';
    for( i in frase ) {
        morse = morse.concat( 
                'a' <= frase[i] && frase[i] <= 'z' 
            ?
                transAsciiToMorse[frase[i].charCodeAt() - 97]
            :
                frase[i]
        );
    }
    return morse;
}

function parseLetter( morse )
{
    var list = [];
    var state = 0;
    var n = morse.length < 4 ? morse.length : 4;  
    for( var i = 0; i < n; ++i ) {
        if( state = transMorseToAscii[state][(morse[i] === '-') ? 1 : 0] )
            list.push( [ String.fromCharCode(96 + state), morse.substring( i+1 )])
        else
            break;
    }
    return list;
}

function morseToWord( morse )
{
    return parseLetter( morse ).reduce( function(p,c){
        return p.concat( 
            c[1] === '' 
          ? 
            [c] 
          :
            morseToWord( c[1] ).map( function(e){
                return [ c[0].concat(e[0]), e[1] ];
            }))
    }, [] );
}

function cartesianProduct( a, b ){
    return a.reduce( function(p,c){
        return p.concat( b.map( function(e){
            return [c,e];
        }));
    }, [] )
}


function morseToAscii( frase ){
    var split = frase.split(...