Advertisement
Guest User

Untitled

a guest
Dec 4th, 2021
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.71 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. $filename = "4.txt";
  4.  
  5. open(FILE, $filename);
  6. @data = <FILE>;
  7. close(FILE);
  8.  
  9.  
  10. @called = split(",",shift(@data)); #Parse the calling numbers
  11. shift(@data); #Delete the lingering linebreak
  12.  
  13. $boardnum = 0;
  14.  
  15. foreach $line (@data) {
  16. $line =~ s/[^0-9 ]*//sgi;
  17. if ($line eq "") {
  18. $boardnum++;
  19. $rownum = 0;
  20. }
  21. else
  22. {
  23. @boardline = split(" ", $line);
  24. for ($q = 0; $q < 5; $q++) {
  25. $boards[$boardnum][$rownum][$q] = $boardline[$q]; #Parse in all boards in a 3d array, with board-ID, row and col
  26. }
  27. $rownum++;
  28. }
  29. }
  30.  
  31. $winnerboard = -1;
  32. $lastboard = -1;
  33.  
  34. $nc = 0;
  35. foreach $num (@called) {
  36. $num =~ s/\n//sgi;
  37. for ($i = 0; $i < $boardnum + 1; $i++) {
  38. for ($a = 0; $a < 5; $a++) {
  39. for ($b = 0; $b < 5; $b++) {
  40. if ($boards[$i][$a][$b] == $num) {
  41. $boards[$i][$a][$b] = -1;
  42. }
  43. }
  44. }
  45. }
  46.  
  47. for ($i = 0; $i < $boardnum + 1; $i++) {
  48. for ($a = 0; $a < 5; $a++) {
  49. 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
  50. if ($winnerboard == -1) {
  51. $winnerboard = $i;
  52. }
  53. $alreadywon[$i] = 1;
  54. }
  55. }
  56. for ($a = 0; $a < 5; $a++) {
  57. 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
  58. if ($winnerboard == -1) {
  59. $winnerboard = $i;
  60. }
  61. $alreadywon[$i] = 1;
  62. }
  63. }
  64.  
  65.  
  66. if ($skip == 0) {
  67. $bc = 0;
  68. for ($winboard = 0; $winboard < $boardnum + 1; $winboard++) {
  69. if ($alreadywon[$winboard] == 0) { #Count number of non-won boards.
  70. $bc++;
  71. $tempboard = $winboard;
  72. }
  73. }
  74.  
  75. if ($bc == 1) { #If theres 1 non-won board left, then its the last board to win.
  76. $lastboard = $tempboard;
  77. $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.
  78. }
  79. }
  80.  
  81. }
  82.  
  83.  
  84. if ($winnerboard > -1) {
  85. $bsum = 0;
  86. for ($a = 0; $a < 5; $a++) {
  87. for ($b = 0; $b < 5; $b++) {
  88. print $boards[$winnerboard][$a][$b]."-";
  89. if ($boards[$winnerboard][$a][$b] != -1) {
  90. $bsum = $bsum + $boards[$winnerboard][$a][$b];
  91. }
  92. }
  93. print "\n";
  94. }
  95. $bsum = $bsum * $num;
  96. $winnerboard = -2; #Lock out the winneboard calculations since we already done it.
  97. }
  98. if ($lastboard > -1) {
  99. $lsum = 0;
  100. for ($a = 0; $a < 5; $a++) {
  101. for ($b = 0; $b < 5; $b++) {
  102. print $boards[$lastboard][$a][$b]."-";
  103. if ($boards[$lastboard][$a][$b] != -1) {
  104. $lsum = $lsum + $boards[$lastboard][$a][$b];
  105. }
  106. }
  107. print "\n";
  108. }
  109. $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.
  110. $lsum = $lsum * $cnum;
  111. last;
  112. }
  113.  
  114.  
  115. $nc++;
  116. }
  117.  
  118. print $bsum."\n";
  119. print $lsum."\n";
  120.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement