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 codificaMorse( 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( morseWord, index ) {
var list = [];
var state = 0;
var n = index + 4;
if( morseWord.length < n ) n = morseWord.length;
for( ; index < n; ++index ) {
if( state = transMorseToAscii[state][(morseWord[index] === '-') ? 1 : 0] )
list.push( String.fromCharCode(96 + state) )
else
break;
}
return list;
}
function morseToOptions( morseWord ) {
var list = [];
var n = morseWord.length;
for( var i = 0; i < n; ++i ) {
list.push( parseLetter( morseWord, i ) );
}
return list;
}
function expandOptions( list )
{
var sol = [];
(function recursiva( i, str ){
if( i < list.length )
for( var j = 0; j < list[i].length; ++j )
recursiva( i+j+1, str+list[i][j] )
else
sol.push( str );
}( 0, ''));
return sol;
}
function decodificaMorse( frase )...