#!/bin/bash
declare -A 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]='--..' [1]='.----' [2]='..---' [3]='...--' [4]='....-' [5]='.....' [6]='-....' [7]='--...' [8]='---..' [9]='----.' [0]='-----' [',']='--..--' ['.']='.-.-.-' [';']='-.-.-.' [':']='---...' ['?']='..--..' ['!']='-.-.--' ['/']='-..-.' ['-']='-....-' ['+']='.-.-.' ['(']='-.--.' [')']='-.--.-' ['_']='..--.-' ['"']='.-..-.' ["'"]='.----.' ['$']='...-..-' ['@']='.--.-.' ['&']='.-...' [' ']=' ' )
function encode {
res=''
s="$1"
for (( i=0; i<${#s}; i++ )); do
letter="${s:$i:1}"
if [[ "$letter" == ' ' ]]; then
res="${res} "
else
res="${res}${MORSE[${letter^^}]} ";
fi
done
printf "%s" "$res"
}
echo "$(encode "THIS IS FINE")"
declare -A MORSEDEC=( ['-.--.-']=')' ['..--..']='?' ['--..--']=', ' ['-....-']='-' ['.-.-.-']='.' ['...--']='3' ['-.--.']='(' ['---..']='8' ['-..-.']='/' ['....-']='4' ['-....']='6' ['----.']='9' ['.----']='1' ['..---']='2' ['.....']='5' ['--...']='7' ['-----']='0' ['-...']='B' ['-..-']='X' ['-.-.']='C' ['--..']='Z' ['--.-']='Q' ['.-..']='L' ['-.--']='Y' ['..-.']='F' ['.--.']='P' ['.---']='J' ['...-']='V' ['....']='H' ['-..']='D' ['---']='O' ['..-']='U' ['...']='S' ['.--']='W' ['-.-']='K' ['.-.']='R' ['--.']='G' ['-.']='N' ['..']='I' ['--']='M' ['.-']='A' [' ']=' ' ['.']='E' ['-']='T' )
function decode {
res=''
tmp="$(sed 's/ \{2,\}/ | /g' <<< "$1")";
for word in $tmp; do
if [[ "$word" == '|' ]]; then
res="${res}${MORSEDEC[' ']}";
else
res="${res}${MORSEDEC[$word]}";
fi
done
printf "%s" "$res"
}
echo "$(decode "- .... .. ... .. ... ..-. .. -. .")"
IyEvYmluL2Jhc2gKZGVjbGFyZSAtQSBNT1JTRT0oIFtBXT0nLi0nIFtCXT0nLS4uLicgW0NdPSctLi0uJyBbRF09Jy0uLicgW0VdPScuJyBbRl09Jy4uLS4nIFtHXT0nLS0uJyBbSF09Jy4uLi4nIFtJXT0nLi4nIFtKXT0nLi0tLScgW0tdPSctLi0nIFtMXT0nLi0uLicgW01dPSctLScgW05dPSctLicgW09dPSctLS0nIFtQXT0nLi0tLicgW1FdPSctLS4tJyBbUl09Jy4tLicgW1NdPScuLi4nIFtUXT0nLScgW1VdPScuLi0nIFtWXT0nLi4uLScgW1ddPScuLS0nIFtYXT0nLS4uLScgW1ldPSctLi0tJyBbWl09Jy0tLi4nIFsxXT0nLi0tLS0nIFsyXT0nLi4tLS0nIFszXT0nLi4uLS0nIFs0XT0nLi4uLi0nIFs1XT0nLi4uLi4nIFs2XT0nLS4uLi4nIFs3XT0nLS0uLi4nIFs4XT0nLS0tLi4nIFs5XT0nLS0tLS4nIFswXT0nLS0tLS0nIFsnLCddPSctLS4uLS0nIFsnLiddPScuLS4tLi0nIFsnOyddPSctLi0uLS4nIFsnOiddPSctLS0uLi4nIFsnPyddPScuLi0tLi4nIFsnISddPSctLi0uLS0nIFsnLyddPSctLi4tLicgWyctJ109Jy0uLi4uLScgWycrJ109Jy4tLi0uJyBbJygnXT0nLS4tLS4nIFsnKSddPSctLi0tLi0nIFsnXyddPScuLi0tLi0nIFsnIiddPScuLS4uLS4nIFsiJyJdPScuLS0tLS4nIFsnJCddPScuLi4tLi4tJyBbJ0AnXT0nLi0tLi0uJyBbJyYnXT0nLi0uLi4nIFsnICAnXT0nICcgICkKCmZ1bmN0aW9uIGVuY29kZSB7CiAgcmVzPScnCiAgcz0iJDEiCiAgZm9yICgoIGk9MDsgaTwkeyNzfTsgaSsrICkpOyBkbwogICAgbGV0dGVyPSIke3M6JGk6MX0iCiAgICBpZiBbWyAiJGxldHRlciIgPT0gJyAnIF1dOyB0aGVuCiAgICAgIHJlcz0iJHtyZXN9ICAiCiAgICBlbHNlCiAgICAgIHJlcz0iJHtyZXN9JHtNT1JTRVske2xldHRlcl5efV19ICI7CiAgICBmaQogIGRvbmUKICBwcmludGYgIiVzIiAiJHJlcyIKfQoKZWNobyAiJChlbmNvZGUgIlRISVMgSVMgRklORSIpIgoKZGVjbGFyZSAtQSBNT1JTRURFQz0oIFsnLS4tLS4tJ109JyknIFsnLi4tLS4uJ109Jz8nIFsnLS0uLi0tJ109JywgJyBbJy0uLi4uLSddPSctJyBbJy4tLi0uLSddPScuJyBbJy4uLi0tJ109JzMnIFsnLS4tLS4nXT0nKCcgWyctLS0uLiddPSc4JyBbJy0uLi0uJ109Jy8nIFsnLi4uLi0nXT0nNCcgWyctLi4uLiddPSc2JyBbJy0tLS0uJ109JzknIFsnLi0tLS0nXT0nMScgWycuLi0tLSddPScyJyBbJy4uLi4uJ109JzUnIFsnLS0uLi4nXT0nNycgWyctLS0tLSddPScwJyBbJy0uLi4nXT0nQicgWyctLi4tJ109J1gnIFsnLS4tLiddPSdDJyBbJy0tLi4nXT0nWicgWyctLS4tJ109J1EnIFsnLi0uLiddPSdMJyBbJy0uLS0nXT0nWScgWycuLi0uJ109J0YnIFsnLi0tLiddPSdQJyBbJy4tLS0nXT0nSicgWycuLi4tJ109J1YnIFsnLi4uLiddPSdIJyBbJy0uLiddPSdEJyBbJy0tLSddPSdPJyBbJy4uLSddPSdVJyBbJy4uLiddPSdTJyBbJy4tLSddPSdXJyBbJy0uLSddPSdLJyBbJy4tLiddPSdSJyBbJy0tLiddPSdHJyBbJy0uJ109J04nIFsnLi4nXT0nSScgWyctLSddPSdNJyBbJy4tJ109J0EnIFsnICAnXT0nICcgWycuJ109J0UnIFsnLSddPSdUJyApCgpmdW5jdGlvbiBkZWNvZGUgewogIHJlcz0nJwogIHRtcD0iJChzZWQgJ3MvIFx7MixcfS8gfCAvZycgPDw8ICIkMSIpIjsKICBmb3Igd29yZCBpbiAkdG1wOyBkbwogICAgaWYgW1sgIiR3b3JkIiA9PSAnfCcgXV07IHRoZW4KICAgICAgcmVzPSIke3Jlc30ke01PUlNFREVDWycgICddfSI7CiAgICBlbHNlCiAgICAgIHJlcz0iJHtyZXN9JHtNT1JTRURFQ1skd29yZF19IjsKICAgIGZpCiAgZG9uZQogIHByaW50ZiAiJXMiICIkcmVzIgp9CmVjaG8gIiQoZGVjb2RlICItIC4uLi4gLi4gLi4uICAgLi4gLi4uICAgLi4tLiAuLiAtLiAuIiki