D
Drew Olson
All -
I've been using ruby for quite some time and I'm only beginning to look
at python. I really like the way ruby flows as compared to python and I
can't see myself getting pulled away from ruby. However, there is one
thing I like about python, and that is the generators. What is the best
way to translate the following code into ruby? Assume word is some
string and letters is a string of all the characters a..z:
[word[0:i]+c+word[i+1:] for i in range(len(word)) for c in letters]
This is all based on trying to efficiently rewrite
http://norvig.com/spell-correct.html in ruby. Essentially what this code
does is get the array of words resulting from inserting every character
at every possible position in the given word. I find it pretty succinct,
but I know ruby can do better! I've come up with two ways to do this in
ruby, but neither seems to "click" with me:
(0...word.size).inject([]) do |words,i|
letters.split('').each do |c|
words << word[0...i]+c+word[i..-1]
end
words
end
OR
(0...words.size).map do |i|
letters.split('').map do |c|
word[0...i]+c+word[i..-1]
end
end.flatten
Any advice? Currenty, I'm using the first approach and it's sloooooow
(I'm assuming inject has high overhead).
I've been using ruby for quite some time and I'm only beginning to look
at python. I really like the way ruby flows as compared to python and I
can't see myself getting pulled away from ruby. However, there is one
thing I like about python, and that is the generators. What is the best
way to translate the following code into ruby? Assume word is some
string and letters is a string of all the characters a..z:
[word[0:i]+c+word[i+1:] for i in range(len(word)) for c in letters]
This is all based on trying to efficiently rewrite
http://norvig.com/spell-correct.html in ruby. Essentially what this code
does is get the array of words resulting from inserting every character
at every possible position in the given word. I find it pretty succinct,
but I know ruby can do better! I've come up with two ways to do this in
ruby, but neither seems to "click" with me:
(0...word.size).inject([]) do |words,i|
letters.split('').each do |c|
words << word[0...i]+c+word[i..-1]
end
words
end
OR
(0...words.size).map do |i|
letters.split('').map do |c|
word[0...i]+c+word[i..-1]
end
end.flatten
Any advice? Currenty, I'm using the first approach and it's sloooooow
(I'm assuming inject has high overhead).