# New Ticket Created by  Leopold Toetsch 
# Please include the string:  [perl #17705]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=17705 >


This patch corrects an old bug (cut&paste typos) in life.p6 and adds 
stats of generations/sec to both. Default generation count is adjusted 
to give resaonable runtimes too.

Please apply,
thanks,
leo


-- attachment  1 ------------------------------------------------------
url: http://rt.perl.org/rt2/attach/38997/31673/3f5af0/life_p6.patch

--- parrot/languages/perl6/examples/life-ar.p6  Sun Aug 25 10:29:05 2002
+++ parrot-leo/languages/perl6/examples/life-ar.p6      Mon Sep 30 18:43:48 2002
@@ -14,7 +14,17 @@
 # we don't have »is rw« or call string by refs, so
 # input / output are int arrays - slooow
 #
-sub Generate(@input, @output) {
+sub Print(@world) {
+    my ($i, $j);
+    for 0..15 -> $i {
+       for 0..15 -> $j {
+           print( @world[$i * 16 + $j] ?? '*' :: ' ');
+       }
+       print "\n" ;
+    }
+    print "----------------\n";
+}
+sub Generate(@input) {
     my ($cell, $neighbours, $i);
     my $len = 256; #@input;
     my ($pos, $offset);
@@ -22,7 +32,7 @@
     #my str $death = "  **     ";
     my @death = (0,0,1,1,0,0,0,0,0);
 
-    @output = @input;
+    my @output = @input;
 
     loop ($cell = 0; $cell < $len; $cell++) {
        $neighbours = 0;
@@ -42,19 +52,9 @@
            @output[$cell] = 1;
        }
     }
-    #return output;
+    return @output;
 }
 
-sub Print(@world) {
-    my ($i, $j);
-    for 0..15 -> $i {
-       for 0..15 -> $j {
-           print( @world[$i * 16 + $j] ?? '*' :: ' ');
-       }
-       print "\n" ;
-    }
-    print "----------------\n";
-}
 #static void Main()
 
 sub main() {
@@ -78,14 +78,15 @@
     );
 
     my ($i, $j, @new);
-    my $gen = @ARGS[0] || 512;
+    my $gen = @ARGS[0] || 100;
     print "Running ", $gen, " generations\n";
     Print(@world);
     my $ts = time;
     loop( $j= 0 ; $j < $gen; $j++) {
-       Generate(@world, @new);
-       @world = @new;
+       @world = Generate(@world);
     }
+    my $te = time();
     Print(@world);
+    print "Gens/s ", $gen/($te-$ts), "\n";
 }
 
--- parrot/languages/perl6/examples/life.p6     Sun Aug 25 10:29:05 2002
+++ parrot-leo/languages/perl6/examples/life.p6 Mon Sep 30 18:57:40 2002
@@ -32,9 +32,9 @@
        $neighbours++ if(substr($input, ($i - 17) % $len, 1) eq "*");
        $neighbours++ if(substr($input, ($i + 17) % $len, 1) eq "*");
        $neighbours++ if(substr($input, ($i - 16) % $len, 1) eq "*");
-       $neighbours++ if(substr($input, ($i - 16) % $len, 1) eq "*");
+       $neighbours++ if(substr($input, ($i + 16) % $len, 1) eq "*");
+       $neighbours++ if(substr($input, ($i - 15) % $len, 1) eq "*");
        $neighbours++ if(substr($input, ($i + 15) % $len, 1) eq "*");
-       $neighbours++ if(substr($input, ($i + 17) % $len, 1) eq "*");
        if(substr($input, $cell, 1) eq "*") {
            my $n = substr($death, $neighbours, 1);
            substr($output, $cell, 1, $n);
@@ -76,13 +76,15 @@
     ;
 
     my $j;
-    my $gen = @ARGS[0] || 518;
-    # for $j (0 .. 499) => imcc error releated to closure?
-    print "Running " _ $gen _ " generations\n";
+    my $gen = @ARGS[0] || 100;
+    print "Running " , $gen , " generations\n";
     Print($world);
+    my $ts = time();
     loop( $j= 0 ; $j < $gen; $j++) {
        $world = Generate($world)[0];
     }
+    my $te = time();
     Print($world);
+    print "Gens/s ", $gen/($te-$ts), "\n";
 }
 

Reply via email to