Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Is this deterministic or not?

Reply
Thread Tools

Is this deterministic or not?

 
 
slix
Guest
Posts: n/a
 
      06-01-2008
puts "Enter a sentence: "
puts gets.split.sort_by { rand }.join(" ")

takes a sentence and scrambles the words. how is this implemented? i
tried myself first with a for or while loop and tried if word is not
in new_sentence then new_sentence += word etc.
but that could go on for a long time and would be very slow for a
large text.

 
Reply With Quote
 
 
 
 
Tim Hunter
Guest
Posts: n/a
 
      06-01-2008
slix wrote:
> puts "Enter a sentence: "
> puts gets.split.sort_by { rand }.join(" ")
>
> takes a sentence and scrambles the words. how is this implemented? i
> tried myself first with a for or while loop and tried if word is not
> in new_sentence then new_sentence += word etc.
> but that could go on for a long time and would be very slow for a
> large text.
>
>


I assume you already know how gets, split, and join work and the
question in your subject refers to sort_by. The sort_by method sorts the
enumerable (in this case, the array of words produced by split) using
the keys generated by the block. That is, sort_by calls the block once
for each element in the array. The block usually (but not in this case)
inspects the element and returns a key. You're wanting a random sort, so
you use the rand method to return a random number as the key. The
sort_by method sorts the array in increasing order by the random
numbers. Since the keys are randomly generated, the array is randomly
ordered.

Is it deterministic? See my P.S. You can use srand to ensure that rand
returns the same sequence of numbers.

The doc for sort_by is pretty good. Try "ri sort_by", and "ri Kernel#rand".

P.S. I'm sure there's a lot of good things to be said about PRNGs and
stuff but I'll let somebody else type it in.

--
RMagick: http://rmagick.rubyforge.org/
RMagick 2: http://rmagick.rubyforge.org/rmagick2.html

 
Reply With Quote
 
 
 
 
Dave Bass
Guest
Posts: n/a
 
      06-02-2008
Tim Hunter wrote:
> P.S. I'm sure there's a lot of good things to be said about PRNGs and
> stuff but I'll let somebody else type it in.


I'll just add that Ruby's rand is deterministic, but it uses a very good
PRNG algorithm (Mersenne twister). Unless you really need true
randomness, it's good enough to use out-of-the-box.
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
cirfu
Guest
Posts: n/a
 
      06-24-2008
but is the function he is talking about deterministic? i mean rand
could be but he could theoretically guess the same word over and over.

os will this function-execution-time grow according to a formula or it
depends on "how lucky" he is?
 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      06-25-2008
2008/6/2 Dave Bass <(E-Mail Removed)>:
> Tim Hunter wrote:
>> P.S. I'm sure there's a lot of good things to be said about PRNGs and
>> stuff but I'll let somebody else type it in.

>
> I'll just add that Ruby's rand is deterministic, but it uses a very good
> PRNG algorithm (Mersenne twister). Unless you really need true
> randomness, it's good enough to use out-of-the-box.


Plus, opposed to other libs and languages, there is a random element in seeding:

http://www.ruby-doc.org/core/classes...l.html#M001086

Kind regards

robert


--
use.inject do |as, often| as.you_can - without end

 
Reply With Quote
 
Dave Bass
Guest
Posts: n/a
 
      06-25-2008
Robert Klemme wrote:
> Plus, opposed to other libs and languages, there is a random element in
> seeding


Well, a combination of the time, the process id, and a sequence number
isn't actually random!

However, it's certainly better than using the time on its own, as has
commonly been done in the past.

Perl has a Math::TrulyRandom module. "The source of the randomness is
from interrupt timing discrepancies."

http://search.cpan.org/~gary/Math-Tr...rulyRandom.pod
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      06-25-2008
On 25.06.2008 19:34, Dave Bass wrote:
> Robert Klemme wrote:
>> Plus, opposed to other libs and languages, there is a random element in
>> seeding

>
> Well, a combination of the time, the process id, and a sequence number
> isn't actually random!
>
> However, it's certainly better than using the time on its own, as has
> commonly been done in the past.


Which in turn is even better than using a constant seed - which also has
been done in the past. This was the case I was thinking of.

Cheers

robert
 
Reply With Quote
 
defn noob
Guest
Posts: n/a
 
      06-28-2008
everyoen is missing my point. is the complete method deterministic?
not the rand...
 
Reply With Quote
 
Robert Klemme
Guest
Posts: n/a
 
      06-28-2008
On 28.06.2008 05:51, defn noob wrote:
> everyoen is missing my point. is the complete method deterministic?
> not the rand...


What complete method? You presented two lines of code and in those the
only potential source of indeterminism is #rand (apart from the user
input), which is precisely why the discussion revolves around this.

Cheers

robert
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Non-deterministic schema Sahatra Kumara XML 0 03-24-2005 03:08 PM
[schemas] non-deterministic content model avoidance Philippe Poulard XML 0 09-07-2004 05:29 PM
(Non)deterministic XML Schema Gijs XML 0 01-21-2004 01:38 PM
schema non deterministic again c_capatana@hotmail.com XML 1 11-05-2003 06:18 PM
non deterministic schema problem c_capatana@hotmail.com XML 1 11-04-2003 01:47 PM



Advertisments