Morse
Written by Magnus Holm.
Some of you might have noticed my little attempt on refactoring. However, I quickly realized that it could be solved in a much simpler way:
module Morse
A,B,C=proc{M.tr(' ','').gsub(/#{$/}+/,$/).split($/).map{|x|
x[/(.)(.+)(.).*\1\2\3/,2].to_i(16)}},proc{|c|A[][c-65].to_s(2
)[1..-1].tr('10','-.')},proc{|m|(A[].index(("1"+m.tr(
'-.','10')).to_i(2))||return)+65}
def self.encode(str)
str.upcase.split(//).map{|c|(65..90)===
(c=c[0])?B[c]:c==32?'|':nil}.compact.join(' ')
end
def self.decode(str)
str.split(' ').map{|m|m[0]==?|?' ':(m=C[m])&&m.chr}.join
end
self.methods(false).
map{|m|class<<self;self;end.
send(:define_method,m+"_file"){|f|
File.readlines(f).map{|l|send(m,l)}.join $/}}
M = <<-'LETS GO MORSING!'
3DC5D1BBFBE596573E0EE011500C2959ED1469891C5D9120EA8
D18A6BF9C806A8A15A77A5788575BD18A0233578435B20884FE
A1AAAAAA1AA
BCD BCD
123 123
412C127 140C127
87EB9557EB757
7103B03517D082301871039DD318B6ABEB04981
2A44EFBD92A0B694FE1ECC094F42E7F7DF37AF7
9781 765A3C96E24326A0F58 1764
2D3C 3399D0D588D492D 3A95
AB74 D14522116D1 45E3
6833 7 A807B37 A F32E
BD57 4F C61 EC 613F
07EF 733E F 7DEA 540F
E285 04F691 656291 6595
85EC 1D8343A C1D82A1 9F95
F5A3 7F8D02D25A357BEDC75 4958
86C8 61F6679FFEB2DF19CEC 8673
0706 DC3C81C810CBEBA76FC CC3C
32B7 91791ADFE02C7664F6E 7D51
1111 656B15AA24FF66461FD 1111
0BD60F270C533AE418A5A99E65950BD26D003CF
1BC023CDEBA3CE19D0CF7E0B50607C7E19DD396
11B878DCDAEAE1AE136657420A26AF87356FCD6DA11B80CDD4F
22C2201C00354CD948A67CAAA92566A7E4515CAADADC8FA01C0
LETS GO MORSING!
end