Re: scramble sentence, how to better program?
by David A. Black other posts by this author
May 8 2008 1:12PM messages near this date
scramble sentence, how to better program?
|
Re: scramble sentence, how to better program?
Hi --
On Fri, 9 May 2008, globalrev wrote:
> i have written a program that takes a sentence as input and outputs
> the sentence with the words rearranged.
> it is probably inefficient and can probably be done with less code.
> it is also nondeterministic( while (inList(temp,scr)) could go on
> for a long time if the user is unlucky) and im not sure how to get
> around that or if it is even possible.
> also, if there is 2 identical words in the sentence, lets say "the" is
> in there twice, it will loop forever. i could do
> .uniq in the beginning but lets say i want both "the" to be in there.
> i have to write some if duplicate then ok up to nbrofduplicates. is
> there an easy way to do this?
>
> #scrambler
> puts "Enter a sentence: "
> sentence = gets
> list = sentence.split()
> scr = []
>
> def inList(aword,alist)
> inl=false
> for i in (0..alist.length()-1)
> if alist[i] == aword
> inl=true
> end
> end
> return inl
> end
Much easier:
def in_list?(aword, alist)
alist.include?(word)
end
which means you don't really need your own method; you can just call
include? on your list.
> for x in (0..list.length()-1)
> temp = list[rand(list.length())]
> while (inList(temp,scr))
> temp = list[rand(list.length())]
> end
> scr = scr + temp.split()
> end
Please lose the ()'s. They don't do anything or add any information;
they're just visual clutter. Meanwhile, see below....
> puts "Scrambled: "
> puts scr
In general, you're working much too hard :-) Let Ruby do it for you:
print "Enter a sentence: "
puts gets.split.sort_by { rand }.join(" ")
David
--
Rails training from David A. Black and Ruby Power and Light:
INTRO TO RAILS June 9-12 Berlin
ADVANCING WITH RAILS June 16-19 Berlin
INTRO TO RAILS June 24-27 London (Skills Matter)
See http://www.rubypal.com for details and updates!
Thread:
Globalrev
David A. Black
S2
S2
Globalrev
S2
7stud --
David A. Black
Rob Biedenharn
S2
S2
|