Stem-and-leaf plot/Data generator: Difference between revisions

From Rosetta Code
Content added Content deleted
(Should produce a bell curve distribution for each hump, now.)
(A note about variable names.)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
Written to generate data sets for the [[Stem-and-leaf plot]] task.
Written to generate data sets for the [[Stem-and-leaf plot]] task. Statistics aren't my field or area of significant expertise, so some of the variable names might represent my homebrew understanding more than official terminology. --[[User:Short Circuit|Michael Mol]] 19:34, 14 December 2009 (UTC)


<lang perl>#!/usr/bin/perl
<lang perl>#!/usr/bin/perl
Line 15: Line 15:
sub genhump
sub genhump
{
{
my $offset = shift;
my ($offset, $width, $pointcount, $slope) = @_;
my $width = shift;
my $pointcount = shift;
my $slope = shift;


my $diecount = $slope;
my $diecount = $slope;
Line 24: Line 21:


my @ret;
my @ret;
foreach (1 .. $pointcount)
while($pointcount-- > 0)
{
{
my $point = $offset;
my $point = $offset;
for(my $roll = 0; $roll < $diecount; ++$roll)
foreach (1 .. $diecount)
{
{
$point += rand($range * 10000) / 10000;
$point += rand($range * 10000) / 10000;
Line 38: Line 35:
}
}


my @list = ();
my @list = (&genhump(8, 3, 5, 3),
&genhump(12, 3, 5, 6));

push @list, &genhump(8, 3, 5, 3);
push @list, &genhump(12, 3, 5, 6);


my @shuffled = &shuffle(@list);
my @shuffled = &shuffle(@list);


print "$_ "
print "@shuffled\n";</lang>
foreach ( @shuffled );
</lang>

Latest revision as of 19:34, 14 December 2009

Written to generate data sets for the Stem-and-leaf plot task. Statistics aren't my field or area of significant expertise, so some of the variable names might represent my homebrew understanding more than official terminology. --Michael Mol 19:34, 14 December 2009 (UTC)

<lang perl>#!/usr/bin/perl use strict;

  1. The shuffle is taken from http://rosettacode.org/wiki/Knuth_shuffle

sub shuffle

{my @a = @_;
 foreach my $n (1 .. $#a)
    {my $k = int rand $n + 1;
     $k == $n or @a[$k, $n] = @a[$n, $k];}
 return @a;}
  1. The greater your pointcount to your width, the more sparse your result.

sub genhump { my ($offset, $width, $pointcount, $slope) = @_;

my $diecount = $slope; my $range = $width / $diecount;

my @ret; foreach (1 .. $pointcount) { my $point = $offset; foreach (1 .. $diecount) { $point += rand($range * 10000) / 10000; }

push @ret, int($point); }

return @ret; }

my @list = (&genhump(8, 3, 5, 3),

           &genhump(12, 3, 5, 6));

my @shuffled = &shuffle(@list);

print "@shuffled\n";</lang>