B
Brian Krahmer
Here is my solution to the morse code problem. The meat of is only
about 10 lines, and I think it's pretty readable, so hopefully it will
be viewed as a good solution. I used the dictionary installed on my
ubuntu system to display a * after words found in it. BTW, this is my
first submission.
brian
require 'singleton'
class Word
LETTERS = [ ['.-', 'A'], ['-.', 'N'], ['-...', 'B'], ['---', 'O'],
['-.-.', 'C'], ['.--.', 'P'], ['-..', 'D'], ['--.-', 'Q'], ['.', 'E'],
['.-.', 'R'], ['..-.', 'F'], ['...', 'S'], ['--.', 'G'], ['-', 'T'],
['....', 'H'], ['..-', 'U'], ['..', 'I'], ['...-', 'V'], ['.---', 'J'],
['.--', 'W'], ['-.-', 'K'], ['-..-', 'X'], ['.-..', 'L'], ['-.--', 'Y'],
['--', 'M'], ['--..', 'Z'] ]
def initialize(word)
@morse = word
end
def parse
check_match(0, [], 0)
end
def check_match(word_offset, found_letters, found_letters_length)
if found_letters_length == @morse.size
word = found_letters.join('')
print word
print ' *' if Dictionary.instance.has_word?(word)
puts
return
end
0.upto(LETTERS.size-1) do |index|
morse_letter = LETTERS[index][0]
next if word_offset + morse_letter.size > @morse.size
if @morse[word_offset..(word_offset + morse_letter.size - 1)] ==
morse_letter
check_match(word_offset + morse_letter.size,
found_letters.clone.push(LETTERS[index][1]),
found_letters_length + morse_letter.size)
end
end
end
end
class Dictionary
include Singleton
def load
@entries = {}
File.open('/usr/share/dict/words') do |file|
file.each_line do |line|
@entries[line.chomp.upcase] = 1
end
end
end
def has_word?(word)
@entries[word]
end
end
Dictionary.instance.load
until $stdin.eof?
Word.new($stdin.gets.chomp).parse
end
about 10 lines, and I think it's pretty readable, so hopefully it will
be viewed as a good solution. I used the dictionary installed on my
ubuntu system to display a * after words found in it. BTW, this is my
first submission.
brian
require 'singleton'
class Word
LETTERS = [ ['.-', 'A'], ['-.', 'N'], ['-...', 'B'], ['---', 'O'],
['-.-.', 'C'], ['.--.', 'P'], ['-..', 'D'], ['--.-', 'Q'], ['.', 'E'],
['.-.', 'R'], ['..-.', 'F'], ['...', 'S'], ['--.', 'G'], ['-', 'T'],
['....', 'H'], ['..-', 'U'], ['..', 'I'], ['...-', 'V'], ['.---', 'J'],
['.--', 'W'], ['-.-', 'K'], ['-..-', 'X'], ['.-..', 'L'], ['-.--', 'Y'],
['--', 'M'], ['--..', 'Z'] ]
def initialize(word)
@morse = word
end
def parse
check_match(0, [], 0)
end
def check_match(word_offset, found_letters, found_letters_length)
if found_letters_length == @morse.size
word = found_letters.join('')
print word
print ' *' if Dictionary.instance.has_word?(word)
puts
return
end
0.upto(LETTERS.size-1) do |index|
morse_letter = LETTERS[index][0]
next if word_offset + morse_letter.size > @morse.size
if @morse[word_offset..(word_offset + morse_letter.size - 1)] ==
morse_letter
check_match(word_offset + morse_letter.size,
found_letters.clone.push(LETTERS[index][1]),
found_letters_length + morse_letter.size)
end
end
end
end
class Dictionary
include Singleton
def load
@entries = {}
File.open('/usr/share/dict/words') do |file|
file.each_line do |line|
@entries[line.chomp.upcase] = 1
end
end
end
def has_word?(word)
@entries[word]
end
end
Dictionary.instance.load
until $stdin.eof?
Word.new($stdin.gets.chomp).parse
end