#!/usr/bin/perl use qli; my $glider = [[1,1,1], [1,0,0], [0,1,0]]; my $block = [[1,1], [1,1]]; my $dglider = [[0,1,1,1,0], [1,0,1,0,1], [1,1,1,1,1], [0,1,1,1,0], [0,0,1,0,0], [0,0,1,0,0], [0,1,1,1,0], [0,1,0,1,0]]; $qli::normal = 0; $qli::day = 1; my $bglider = qli::paste(qli::mat(5, 0), $glider, 1, 1); my $nonbglider = qli::paste(qli::mat(10, 0), $glider, 5, 5); for([0.5,0,20], [0.75,0,20], [0.9,0,100], [1,0,20], [1,0.5,20], [0.00001, 0.5,20]) { my ($amt, $bg, $f) = @$_; my $umbglider = qli::bg(qli::mult(qli::dup($nonbglider), $amt), $bg); open(FH, ">2out/glider${amt}_$bg.gif"); qli::make2(\*FH, $f, 10, $umbglider ); close(FH); open(FH, ">2out/s_glider${amt}_$bg.gif"); qli::make2(\*FH, 1, 10, $umbglider ); close(FH); } $qli::pixel = 1; srand(9000); my $garbage = qli::mat(100, 0); for my $x (0..99) { for my $y (0..99) { $$garbage[$y][$x] = rand(); } } open(FH, ">2out/garbage.gif"); qli::make2(\*FH, 100, 10, $garbage ); close(FH); open(FH, ">2out/s_garbage.gif"); qli::make2(\*FH, 1, 10, $garbage ); close(FH); for my $x (0..99) { for my $y (0..99) { unless ($x >= 70 && $x < 80) { $$garbage[$y][$x] = int($$garbage[$y][$x] + 0.5); } } } open(FH, ">2out/garbage2.gif"); qli::make2(\*FH, 100, 10, $garbage ); close(FH); open(FH, ">2out/s_garbage2.gif"); qli::make2(\*FH, 1, 10, $garbage ); close(FH); for my $x (0..99) { for my $y (0..99) { $$garbage[$y][$x] = int($$garbage[$y][$x] + 0.5); } } open(FH, ">2out/garbagenormal.gif"); qli::make2(\*FH, 100, 10, $garbage ); close(FH); open(FH, ">2out/s_garbagenormal.gif"); qli::make2(\*FH, 1, 10, $garbage ); close(FH); my $line = qli::mat(100, 0); for my $x (50) { for my $y (0..99) { $$line[$y][$x] = 0.9999; } } open(FH, ">2out/line.gif"); qli::make2(\*FH, 50, 10, $line ); close(FH); $qli::pixel = 1; srand(3333); my $garbage = qli::mat(300, 0); for my $x (0..299) { for my $y (0..299) { $$garbage[$y][$x] = int(rand()+0.5); } } $$garbage[75][75] = 0.5; open(FH, ">2out/garbage3.gif"); qli::make2(\*FH, 300, 10, $garbage ); close(FH); open(FH, ">2out/s_garbage3.gif"); qli::make2(\*FH, 1, 10, $garbage ); close(FH); srand(2345); my $garbage = qli::mat(300, 0); for my $x (0..299) { for my $y (0..299) { $$garbage[$y][$x] = $x/299 + ($y/299)*(rand()-0.5); $$garbage[$y][$x] = 0 if ($$garbage[$y][$x] < 0); $$garbage[$y][$x] = 1 if ($$garbage[$y][$x] > 1); } } $$garbage[75][75] = 0.5; open(FH, ">2out/garbage4.gif"); qli::make2(\*FH, 300, 10, $garbage ); close(FH); open(FH, ">2out/s_garbage4.gif"); qli::make2(\*FH, 1, 10, $garbage ); close(FH); my $dg = qli::mat(200, 0); for my $x (0..49) { for my $y (0..49) { $$garbage[$y][$x] = -($x/199-0.5)*10+0.5; $$garbage[$y][$x] = 0 if ($$garbage[$y][$x] < 0); $$garbage[$y][$x] = 1 if ($$garbage[$y][$x] > 1); } } qli::paste($dg, $dglider, 98, 150); open(FH, ">2out/dglider.gif"); qli::make2(\*FH, 200, 10, $garbage ); close(FH); open(FH, ">2out/s_dglider.gif"); qli::make2(\*FH, 1, 10, $garbage ); close(FH); $dg = qli::paste(qli::mat(200, 0), $dglider, 150, 150); for my $x (0..199) { for my $y (0..199) { $$dg[$y][$x] = -($y/199-0.5)*10+0.5; $$dg[$y][$x] = 0 if ($$dg[$y][$x] < 0); $$dg[$y][$x] = 1 if ($$dg[$y][$x] > 1); } } for my $x (0..199) { $$dg[0][$x] = 0.5; } $dg = qli::paste($dg, $dglider, 150, 150); open(FH, ">2out/dglider2.gif"); qli::make2(\*FH, 200, 10, $dg ); close(FH); open(FH, ">2out/s_dglider2.gif"); qli::make2(\*FH, 1, 10, $dg ); close(FH); for(11..19) { $dg = qli::paste($dg, $dglider, $_*10, 150) if (0==$_%2); } for my $x (0..199) { for my $y (0..(199-$x)) { $$dg[$x][$y] = 1-$$dg[1-$x][1-$y]; } } for my $x (0..199) { for my $y (0..199) { $$dg[$y][$x] = 0 if ($$dg[$y][$x] < 0); $$dg[$y][$x] = 1 if ($$dg[$y][$x] > 1); } } open(FH, ">2out/dglider3.gif"); qli::make2(\*FH, 200, 10, $dg ); close(FH); open(FH, ">2out/s_dglider3.gif"); qli::make2(\*FH, 1, 10, $dg ); close(FH); my $inpng = GD::Image->newFromPng("2out/inpng.png"); my $hu = qli::mat(300, 0); for my $x (0..299) { for my $y (0..299) { my $i = $inpng->getPixel($x, $y); my ($r,$g,$b) = $inpng->rgb($i); $$hu[$y][$x] = 1-$r/255; $$hu[$y][$x] = 0 if ($$hu[$y][$x] < 0); $$hu[$y][$x] = 1 if ($$hu[$y][$x] > 1); } } open(FH, ">2out/anime.gif"); qli::make2(\*FH, 200, 10, $hu ); close(FH); for my $x (0..299) { for my $y (0..299) { $$hu[$y][$x] = int($$hu[$y][$x] + 0.5); } } open(FH, ">2out/s_animenormal.gif"); qli::make2(\*FH, 1, 10, $hu ); close(FH); open(FH, ">2out/animenormaldaynight.gif"); qli::make2(\*FH, 200, 10, $hu ); close(FH); $qli::day = 0; open(FH, ">2out/animenormalconway.gif"); qli::make2(\*FH, 200, 10, $hu ); close(FH); $qli::day = 1; my $inpng = GD::Image->newFromPng("2out/visible.png"); my $hu = qli::mat(85, 0); for my $x (0..84) { for my $y (0..84) { my $i = $inpng->getPixel($x, $y); my ($r,$g,$b) = $inpng->rgb($i); $$hu[$y][$x] = 1-$r/255; $$hu[$y][$x] = 0 if ($$hu[$y][$x] < 0); $$hu[$y][$x] = 1 if ($$hu[$y][$x] > 1); } } open(FH, ">2out/ducts.gif"); qli::make2(\*FH, 200, 10, $hu ); close(FH); my $inpng = GD::Image->newFromPng("2out/visiblediff.png"); my $hu = qli::mat(85, 0); for my $x (0..84) { for my $y (0..84) { my $i = $inpng->getPixel($x, $y); my ($r,$g,$b) = $inpng->rgb($i); $$hu[$y][$x] = 1-$r/255; $$hu[$y][$x] = 0 if ($$hu[$y][$x] < 0); $$hu[$y][$x] = 1 if ($$hu[$y][$x] > 1); $$hu[$y][$x] = int($$hu[$y][$x] + 0.5); } } open(FH, ">2out/s_ductsnormal.gif"); qli::make2(\*FH, 1, 10, $hu ); close(FH); open(FH, ">2out/ductsnormaldaynight.gif"); qli::make2(\*FH, 200, 10, $hu ); close(FH); $qli::day = 0; open(FH, ">2out/ductsnormalconway.gif"); qli::make2(\*FH, 200, 10, $hu ); close(FH); $qli::day = 1;