...and the source code:
#!/usr/bin/ruby -wKu
require 'set'
MORSE_TABLE = {
'a' => '.-',
'b' => '-...',
'd' => '-..',
'e' => '.',
'f' => '..-.',
'g' => '--.',
'i' => '..',
'j' => '.---',
'k' => '-.-',
'l' => '.-..',
'm' => '--',
'n' => '-.',
'o' => '---',
'p' => '.--.',
'q' => '--.-',
'r' => '.-.',
's' => '...',
't' => '-',
'u' => '..-',
'w' => '.--',
'x' => '-..-',
'y' => '-.--',
}
def morse str
str.split(//).collect do |c|
MORSE_TABLE[c]
end.join(' ')
end
words = File.open('/usr/share/dict/words').readlines.collect do |e|
e.chomp
end.grep(/^[abdefgijklmnopqrstuwxy]{2,}$/)
swords = Set.new(words)
words.each do |e|
swapped = e.tr('abdefgijklmnopqrstuwxy','njwtqumbryiasxfkoegdpl')
puts "#{e} (#{morse e}) ⇋ #{swapped} (#{morse swapped})" if swords.include?(swapped)
end