morse = {'' => ' '} %w[.- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --..].each_with_index { |e, i| morse[e] = (?a + i).chr } %w[----- .---- ..--- ...-- ....- ..... -.... --... ---.. ----.].each_with_index { |e, i| morse[e] = i.to_s } morse.update '..-..' => 'é', '----' => 'ch', '......' => '. ', '.-.-.-' => ',' puts ARGF.read.gsub(/[.-]+/) { |o| morse.fetch(o, o) }