code ← ##.morse text ⍝ Conversion to/from Morse code. text ← ##.morse code ⍝ Samuel Morse 1791-1872. Given a text vector of characters from: "A-Z", "0-9", ".,:?'-/()"@= ", [morse] returns a nested vector of the equivalent Morse codes. Conversely, given a nested vector of Morse codes, the function returns the equi- valent plain text. Unrecognised characters and codes are ignored. In particular, [morse] ignores lower case letters "a-z". The Morse tree -------------- Morse chooses shorter codes for more frequently occurring letters (in English). The designers of old-style linotype type-setting machines judged the order of this frequency to be: ETAOIN SHRDLU CMFWYP VBGKQJ XZ. ┌───5 ..... ┌───H .... │ └───4 ....- ┌───S ... │ │ ┌───Ŝ ...-. │ └───V ...- │ └───3 ...-- ┌───I .. │ │ ┌───É ..-.. │ │ ┌───F ..-. │ └───U ..- │ │ ┌───? ..--.. │ │ ┌───Ð ..--. │ │ │ └───_ ..--.- │ └───Ü ..-- │ └───2 ..--- ┌───E . │ │ ┌───L .-.. │ │ │ │ ┌───" .-..-. │ │ │ └───È .-..- │ │ ┌───R .-. │ │ │ │ ┌───+ .-.-. │ │ │ │ │ └───. .-.-.- │ │ │ └───Ä .-.- │ └───A .- │ │ ┌───þ .--.. │ │ ┌───P .--. │ │ │ │ ┌───@ .--.-. │ │ │ └───À .--.- │ └───W .-- │ │ ┌───Ĵ .---. │ └───J .--- │ │ ┌───' .----. │ └───1 .---- │ │ ┌───6 -.... │ │ └───- -....- │ ┌───B -... │ │ └───= -...- │ ┌───D -.. │ │ │ ┌───/ -..-. │ │ └───X -..- │ ┌───N -. │ │ │ ┌───Ç -.-.. │ │ │ ┌───C -.-. │ │ │ │ │ ┌───; -.-.-. │ │ │ │ └───┤ │ │ │ │ └───! -.-.-- │ │ └───K -.- │ │ │ ┌───( -.--. │ │ │ │ └───) -.--.- │ │ └───Y -.-- └───T - │ ┌───7 --... │ ┌───Z --.. │ │ └───┐ │ │ └───, --..-- │ ┌───G --. │ │ │ ┌───Ĝ --.-. │ │ └───Q --.- │ │ └───Ñ --.-- └───M -- │ ┌───: ---... │ ┌───8 ---.. │ ┌───Ö ---. └───O --- │ ┌───9 ----. └───CH ---- └───0 ----- Ref: http://en.wikipedia.org/wiki/Morse_code (muse: It is said that experienced telegraph operators, who used morse code to transmit messages, could recognise each others tapping style; the equivalent of being able to distinguish someone's handwriting (or coding style). ) Adám Brudzewsky suggests this shorter coding for the upper case alphabet: morse←{⎕io←0 In←(⊃∘⍸⍷⍨∘⊂⍨)¨∘⊂ a←'ET' 'IANM' 'SURWDKGO' 'HVF L PJBXCYZQ' t←↑{↓'.-'[⍉2⊥⍣¯1⍳≢⍵]}¨a 1=≡⍵:t[⍵ In↑a] (⍵ In t)⊃¨⊂a,¨' ' } morse 'SAMUEL' ┌───┬──┬──┬───┬─┬────┐ │...│.-│--│..-│.│.-..│ └───┴──┴──┴───┴─┴────┘ Examples: morse 'HELLO WORLD' ⍝ Morse code from plain text. ┌────┬─┬────┬────┬───┬─┬───┬───┬───┬────┬───┐ │....│.│.-..│.-..│---│/│.--│---│.-.│.-..│-..│ └────┴─┴────┴────┴───┴─┴───┴───┴───┴────┴───┘ morse morse'ROUND TRIP' ⍝ ... and back again. ROUND TRIP morse 'Samuel Finley Breese' ⍝ lower case letters ignored, ┌───┬─┬────┬─┬────┐ │...│/│..-.│/│-...│ └───┴─┴────┴─┴────┘ morse ucase 'Samuel Finley Breese' ⍝ ... so convert to upper case. ┌───┬──┬──┬───┬─┬────┬─┬────┬──┬──┬────┬─┬────┬─┬────┬───┬─┬─┬───┬─┐ │...│.-│--│..-│.│.-..│/│..-.│..│-.│.-..│.│-.--│/│-...│.-.│.│.│...│.│ └───┴──┴──┴───┴─┴────┴─┴────┴──┴──┴────┴─┴────┴─┴────┴───┴─┴─┴───┴─┘ See also: ucase packH Back to: contents Back to: Workspaces