From: "Ball, Donald A Jr (Library)" Date: 2007-04-23T04:01:39+09:00 Subject: Re: [QUIZ] Morse Code (#121) ------_=_NextPart_001_01C78510.AC9D19FB Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Below is my second solution. http://pastie.caboo.se/55742 - donald # Ruby Quiz 121 # Donald A. Ball Jr. # Version 1.1 class String def split_at(index) [slice(0, index), slice(index, length)] end end class Morse CODES =3D { :A =3D> '.-', :B =3D> '-...', :C =3D> '-.-.', :D =3D> '-..', :E =3D> '.', :F =3D> '..-.', :G =3D> '--.', :H =3D> '....', :I =3D> '..', :J =3D> '.---', :K =3D> '-.-', :L =3D> '.-..', :M =3D> '--', :N =3D> '-.', :O =3D> '---', :P =3D> '.--.', :Q =3D> '--.-', :R =3D> '.-.', :S =3D> '...', :T =3D> '-', :U =3D> '..-', :V =3D> '...-', :W =3D> '.--', :X =3D> '-..-', :Y =3D> '-.--', :Z =3D> '--..' } def self.decipher(cipher) CODES.each_pair do |letter, code| prefix, suffix =3D cipher.split_at(code.length) next unless prefix =3D=3D code if suffix =3D=3D '' yield letter.to_s else decipher(suffix) {|result| yield letter.to_s << result } end end end end Morse.decipher(ARGV[0]) {|word| puts word} ------_=_NextPart_001_01C78510.AC9D19FB--