J
joe chesak
[Note: parts of this message were removed to make it a legal post.]
Hello list,
I know the ruby community is filled with algorithmic folks. I have a fairly
simple algorithm that I have solved, but I know it can be done cleaner than
I have.
Given a short string of words separated by spaces, I wish to print out every
contiguous subset of words from that string.
Given this string:
"first second third fourth fifth"
Output this list of substrings:
first second third fourth
first second third
second third fourth
first second
second third
third fourth
first
second
third
fourth
I feel like this should all be possible within a REGEX, but I couldn't
manage that. So I turned it into an array plowed through it in a very
manual manner. You can run this in irb:
phrase = "first second third fourth".split(' ')
(phrase.size.downto(1)).each do |subphrase_size|
(0..phrase.size-subphrase_size).each do |cursor|
[cursor..cursor+subphrase_size-1].each do |subrange|
puts subrange.inject('') {|subphrase,letter| subphrase +
phrase[letter] + ' '}
end
end
end
Isn't there a cleaner way?
Joe
Hello list,
I know the ruby community is filled with algorithmic folks. I have a fairly
simple algorithm that I have solved, but I know it can be done cleaner than
I have.
Given a short string of words separated by spaces, I wish to print out every
contiguous subset of words from that string.
Given this string:
"first second third fourth fifth"
Output this list of substrings:
first second third fourth
first second third
second third fourth
first second
second third
third fourth
first
second
third
fourth
I feel like this should all be possible within a REGEX, but I couldn't
manage that. So I turned it into an array plowed through it in a very
manual manner. You can run this in irb:
phrase = "first second third fourth".split(' ')
(phrase.size.downto(1)).each do |subphrase_size|
(0..phrase.size-subphrase_size).each do |cursor|
[cursor..cursor+subphrase_size-1].each do |subrange|
puts subrange.inject('') {|subphrase,letter| subphrase +
phrase[letter] + ' '}
end
end
end
Isn't there a cleaner way?
Joe