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(...