Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use warnings;
- my $SIZE = 24;
- my $MAXTURNS = 60;
- my @SIDES = ( [-1, -1],
- [-1, 0],
- [-1, 1],
- [0 ,-1],
- [0 , 1],
- [1 ,-1],
- [1 , 0],
- [1 , 1] );
- my @grid;
- #loadGrid();
- my $turns;
- loadNewGrid(7,14);
- printGrid();
- $mana = runSimulation();
- print("Total mana generated = $mana\n");
- #my $maxmana = -1;
- #for ( my $x = 0; $x <= 20; $x++ ) {
- # for ( my $y = 0; $y <= 20; $y ++ ) {
- # loadNewGrid($x,$y);
- #
- # print ("Running $x $y :");
- # $mana = runSimulation();
- # print ("$mana\n");
- # if ( $mana > $maxmana ) {
- # $savedX = $x;
- # $savedY = $y;
- # $maxmana = $mana;
- # }
- #
- # }
- #}
- #print("Best simulation: $savedX $savedY = $maxmana\n");
- sub runSimulation
- {
- my $totalMana = 0;
- for ( $turns=0; $turns < $MAXTURNS; $turns++ ) {
- printGrid();
- print "\n******\n";
- setNewGrid();
- updateGrid();
- $totalMana += eatBlocks($turns);
- if ( $theEnd == 1 ) { last }
- $barf = <STDIN>;
- }
- return $totalMana
- }
- sub printGrid {
- for ( my $x=0; $x < $SIZE; $x++ ) {
- for ( my $y=0; $y < $SIZE; $y++ ) {
- $cell = $grid[$x][$y];
- if ( $x >= 11 and $x <= 13 and $y >= 11 and $y <= 13 ) { $cell = "X" }
- if ( $x == 12 and $y == 12 ) { $cell = "@" }
- print("$cell ");
- }
- print "\n";
- }
- }
- sub setNewGrid {
- $theEnd = 1;
- for ( my $x=0; $x < $SIZE; $x++ ) {
- for ( my $y=0; $y < $SIZE; $y++ ) {
- my $newBlock = getNewCell($x,$y);
- $newGrid[$x][$y] = $newBlock;
- if ( $newBlock == 1 ) { $theEnd = 0 };
- }
- }
- }
- sub getNewCell {
- my ($x,$y) = @_;
- my $adj = getAdjacent($x,$y);
- my $current = $grid[$x][$y];
- if ( $adj < 2 || $adj > 3 ) { return 0; }
- if ( $current == 1 ) { return 1; }
- if ( $adj == 3 ){ return 1; }
- return 0;
- }
- sub updateGrid {
- for ( my $x=0; $x < $SIZE; $x++ ) {
- for ( my $y=0; $y < $SIZE; $y++ ) {
- $grid[$x][$y] = $newGrid[$x][$y];
- }
- }
- }
- sub eatBlocks {
- my $total;
- my ($time) = @_;
- for ( my $x=11; $x <= 13; $x++ ) {
- for ( my $y=11; $y <= 13; $y++ ) {
- $total += eatBlock($x,$y,$time);
- $grid[$x][$y]=0;
- }
- }
- return $total;
- }
- sub eatBlock {
- my ($x,$y,$time) = @_;
- $cell = $grid[$x][$y];
- if ( $cell == 1 ) {
- return 80 * $time
- }
- return 0;
- }
- sub isInBounds
- {
- my ($x,$y) = @_;
- if ( $x < 0 || $x > $SIZE || $y < 0 || $y > $SIZE ) { return 0 }
- return 1;
- }
- sub getAdjacent
- {
- my ($x,$y) = @_;
- my $count = 0;
- foreach my $pair (@SIDES) {
- ($dx,$dy) = @{$pair};
- $mx = $x + $dx;
- $my = $y + $dy;
- if ( isInBounds($mx,$my) == 1 ) {
- my $cell = 0;
- #print("check cell $mx $my is $cell\n");
- $cell = $grid[$mx][$my];
- if ( $cell == 1 ) { $count++ }
- }
- }
- return $count;
- }
- sub loadGrid
- {
- open(RAWDATA, "<map.txt") or die("Could not open map.txt");
- my $line = 0;
- while (<RAWDATA>)
- {
- #print ("line = $_\n");
- #@grid[$line] = split(/ /,$_);
- my @test = split(/ /,$_);
- my $c = 0;
- for $thing (@test) {
- #print("$thing,");
- $grid[$line][$c] = $thing;
- $c++;
- }
- #print("\n")*;
- #if ( $line > $SIZE+1 ) {
- # print("Mapfile is too big\n");#
- # last;
- # }
- $line++;
- }
- }
- sub loadNewGrid
- {
- for ( my $x=0; $x <= $SIZE; $x++ ) {
- for ( my $y=0; $y <= $SIZE; $y++ ) {
- $grid[$x][$y] = 0;
- }
- }
- my ($x,$y) = @_;
- # $grid[$x+1][$y] = 1;
- # $grid[$x+2][$y] = 1;
- # $grid[$x][$y+1] = 1;
- # $grid[$x+1][$y+1] = 1;
- # $grid[$x+1][$y+2] = 1;
- # $grid[$x+2][$y] = 1;
- # $grid[$x+1][$y+1] = 1;
- # $grid[$x+1][$y+2] = 1;
- # $grid[$x+3][$y+1] = 1;
- # $grid[$x+3][$y+2] = 1;
- # $grid[$x][$y+2] = 1;
- # $grid[$x+4][$y+2] = 1;
- # $grid[$x+1][$y] = 1;
- # $grid[$x+3][$y+1] = 1;
- # $grid[$x][$y+2] = 1;
- # $grid[$x+1][$y+2] = 1;
- # $grid[$x+4][$y+2] = 1;
- # $grid[$x+5][$y+2] = 1;
- # $grid[$x+6][$y+2] = 1;
- $grid[$x][$y] = 1;
- $grid[$x+1][$y] = 1;
- $grid[$x][$y+1] = 1;
- $grid[$x+2][$y+1] = 1;
- $grid[$x+2][$y+2] = 1;
- $grid[$x+3][$y+2] = 1;
- # $grid[$x+2][$y] = 1;
- # $grid[$x+3][$y] = 1;
- # $grid[$x][$y+1] = 1;
- # $grid[$x+1][$y+1] = 1;
- # $grid[$x+2][$y+1] = 1;
- # $grid[$x+1][$y+2] = 1;
- # $grid[$x+2][$y] = 1;
- # $grid[$x][$y+1] = 1;
- # $grid[$x+1][$y+1] = 1;
- # $grid[$x+2][$y+2] = 1;
- # $grid[$x+4][$y+2] = 1;
- # $grid[$x+4][$y+3] = 1;
- # $grid[$x][$y] = 1;
- # $grid[$x+1][$y] = 1;
- # $grid[$x+1][$y+1] = 1;
- # $grid[$x+2][$y+1] = 1;
- # $grid[$x+2][$y+2] = 1;
- # $grid[$x+3][$y+2] = 1;
- # $grid[$x][$y] = 1;
- # $grid[$x+1][$y] = 1;
- # $grid[$x+2][$y] = 1;
- # $grid[$x+1][$y+2] = 1;
- # $grid[$x+1][$y+3] = 1;
- # $grid[$x+1][$y+4] = 1;
- # $grid[$x][$y] = 1;
- # $grid[$x+1][$y] = 1;
- # $grid[$x+1][$y+1] = 1;
- # $grid[$x+1][$y+2] = 1;
- # $grid[$x+1][$y+3] = 1;
- # $grid[$x+2][$y+3] = 1;
- for ( my $x=10; $x <= 14; $x++ ) {
- for ( my $y=10; $y <= 14; $y++ ) {
- $grid[$x][$y] = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement