Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- $filename = "4.txt";
- open(FILE, $filename);
- @data = <FILE>;
- close(FILE);
- @called = split(",",shift(@data)); #Parse the calling numbers
- shift(@data); #Delete the lingering linebreak
- $boardnum = 0;
- foreach $line (@data) {
- $line =~ s/[^0-9 ]*//sgi;
- if ($line eq "") {
- $boardnum++;
- $rownum = 0;
- }
- else
- {
- @boardline = split(" ", $line);
- for ($q = 0; $q < 5; $q++) {
- $boards[$boardnum][$rownum][$q] = $boardline[$q]; #Parse in all boards in a 3d array, with board-ID, row and col
- }
- $rownum++;
- }
- }
- $winnerboard = -1;
- $lastboard = -1;
- $nc = 0;
- foreach $num (@called) {
- $num =~ s/\n//sgi;
- for ($i = 0; $i < $boardnum + 1; $i++) {
- for ($a = 0; $a < 5; $a++) {
- for ($b = 0; $b < 5; $b++) {
- if ($boards[$i][$a][$b] == $num) {
- $boards[$i][$a][$b] = -1;
- }
- }
- }
- }
- for ($i = 0; $i < $boardnum + 1; $i++) {
- for ($a = 0; $a < 5; $a++) {
- if (($boards[$i][$a][0] == -1)&&($boards[$i][$a][1] == -1)&&($boards[$i][$a][2] == -1)&&($boards[$i][$a][3] == -1)&&($boards[$i][$a][4] == -1)) { #Check if row win
- if ($winnerboard == -1) {
- $winnerboard = $i;
- }
- $alreadywon[$i] = 1;
- }
- }
- for ($a = 0; $a < 5; $a++) {
- if (($boards[$i][0][$a] == -1)&&($boards[$i][1][$a] == -1)&&($boards[$i][2][$a] == -1)&&($boards[$i][3][$a] == -1)&&($boards[$i][4][$a] == -1)) { #check if col win
- if ($winnerboard == -1) {
- $winnerboard = $i;
- }
- $alreadywon[$i] = 1;
- }
- }
- if ($skip == 0) {
- $bc = 0;
- for ($winboard = 0; $winboard < $boardnum + 1; $winboard++) {
- if ($alreadywon[$winboard] == 0) { #Count number of non-won boards.
- $bc++;
- $tempboard = $winboard;
- }
- }
- if ($bc == 1) { #If theres 1 non-won board left, then its the last board to win.
- $lastboard = $tempboard;
- $cnum = $called[$nc + 1]; #Save NEXT called number as we need it for calculations later. NOTE! The board have not yet won, so we need to save the NEXT calling number for this.
- }
- }
- }
- if ($winnerboard > -1) {
- $bsum = 0;
- for ($a = 0; $a < 5; $a++) {
- for ($b = 0; $b < 5; $b++) {
- print $boards[$winnerboard][$a][$b]."-";
- if ($boards[$winnerboard][$a][$b] != -1) {
- $bsum = $bsum + $boards[$winnerboard][$a][$b];
- }
- }
- print "\n";
- }
- $bsum = $bsum * $num;
- $winnerboard = -2; #Lock out the winneboard calculations since we already done it.
- }
- if ($lastboard > -1) {
- $lsum = 0;
- for ($a = 0; $a < 5; $a++) {
- for ($b = 0; $b < 5; $b++) {
- print $boards[$lastboard][$a][$b]."-";
- if ($boards[$lastboard][$a][$b] != -1) {
- $lsum = $lsum + $boards[$lastboard][$a][$b];
- }
- }
- print "\n";
- }
- $lsum = $lsum - $cnum; #Remove the saved number from sum - as it will be called and marked next round - Still this board have not YET won but will win next round.
- $lsum = $lsum * $cnum;
- last;
- }
- $nc++;
- }
- print $bsum."\n";
- print $lsum."\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement