diff --git a/55_Life/perl/life.pl b/55_Life/perl/life.pl new file mode 100644 index 00000000..972cb322 --- /dev/null +++ b/55_Life/perl/life.pl @@ -0,0 +1,95 @@ +#!/usr/bin/perl +#use strict; + +print ' 'x 34 . "LIFE\n"; +print ' 'x 15 . "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n"; +print "\n"; print "\n"; print "\n"; +print "ENTER YOUR PATTERN; \n"; +$X1=1; $Y1=1; $X2=24; $Y2=70; +@A; +$C=1; + +@B; +Line30: +print "? "; chomp($B[$C] = uc()); +if ($B[$C] eq "DONE") { $B[$C]=""; goto Line80; } +$B[$C]=~ s/\./ /g; +$C=$C+1; +goto Line30; + + +Line80: + +$C=$C-1; $L=0; $G=0; +for ($X=1; $X<=$C-1; $X++) { + if (length($B[$X])>$L) { $L=length($B[$X]); } + } + +$X1=11-$C/2; +$Y1=33-$L/2; +for ($X=1; $X<=$C; $X++) { + for ($Y=1; $Y<=length($B[$X]); $Y++) { + if (substr($B[$X],$Y-1,1) ne " ") { $A[$X1+$X][$Y1+$Y]=1; $P=$P+1; } + } + } +print "\n"; print "\n"; print "\n"; + +Line210: +print "GENERATION: ".$G."\t\tPOPULATION: ".$P; if ($I9) { print "\tINVALID!"; } +print "\n"; +$X3=24; $Y3=70; $X4=1; $Y4=1; $P=0; +$G=$G+1; +for ($X=1; $X<=$X1-1; $X++) { print "\n"; } +for ($X=$X1; $X<=$X2; $X++) { + $Row= " "x 80; + for ($Y=$Y1; $Y<=$Y2; $Y++) { + if ($A[$X][$Y]==2) { $A[$X][$Y]=0; goto Line270; } + if ($A[$X][$Y]==3) { $A[$X][$Y]=1; goto Line261; } + if ($A[$X][$Y]!=1) { goto Line270; } + + Line261: + substr($Row, $Y, 1, "*"); + if ($X<$X3) { $X3=$X; } + if ($X>$X4) { $X4=$X; } + if ($Y<$Y3) { $Y3=$Y; } + if ($Y>$Y4) { $Y4=$Y; } + + Line270: + } + print "$Row\n"; + } + +for ($X=$X2+1; $X<=24; $X++) { print "\n"; } +$X1=$X3; $X2=$X4; $Y1=$Y3; $Y2=$Y4; +if ($X1<3) { $X1=3; $I9=-1; } +if ($X2>22) { $X2=22; $I9=-1; } +if ($Y1<3) { $Y1=3; $I9=-1; } +if ($Y2>68) { $Y2=68; $I9=-1; } +$P=0; + +for ($X=$X1-1; $X<=$X2+1; $X++) { + for ($Y=$Y1-1; $Y<=$Y2+1; $Y++) { + $C=0; + for ($I=$X-1; $I<=$X+1; $I++) { + for ($J=$Y-1; $J<=$Y+1; $J++) { + if ($A[$I][$J]==1 || $A[$I][$J]==2) { $C=$C+1; } + } + } + if ($A[$X][$Y]==0) { goto Line610; } + if ($C<3 || $C>4) { $A[$X][$Y]=2; goto Line600; } + $P=$P+1; + + Line600: + goto Line620; + + Line610: + if ($C==3) { $A[$X][$Y]=3; $P=$P+1; } + + Line620: + } + } +$X1=$X1-1; $Y1=$Y1-1; $X2=$X2+1; $Y2=$Y2+1; +goto Line210; +exit; + +