Advertisement
sindrijo

ProEuler_P11

Dec 15th, 2011
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.77 KB | None | 0 0
  1. package problems;
  2.  
  3. import java.util.*;
  4. import java.io.*;
  5. import java.lang.*;
  6.  
  7. public class Problem_011 {
  8.  
  9.     /**
  10.      * @param args
  11.      */
  12.    
  13.     /*
  14.      *  Find the largest product of four numbers in this clusterfuck, horizontal, vertical or diagonal.
  15.      *  
  16.      *  20x20 = 2x10x2x10 = 2x2x10x10 = 4x100 = 400
  17.      *  
  18.      *  08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
  19.         49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
  20.         81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
  21.         52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
  22.         22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
  23.         24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
  24.         32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
  25.         67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
  26.         24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
  27.         21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
  28.         78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
  29.         16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
  30.         86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
  31.         19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
  32.         04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
  33.         88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
  34.         04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
  35.         20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
  36.         20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
  37.         01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
  38.      */
  39.     public static void main(String[] args) {
  40.         // TODO Auto-generated method stub
  41.  
  42.         numberFuck();
  43.     }
  44.    
  45.     public static void numberFuck() {
  46.        
  47.         File numberCluster = new File ("Problem_011_data.txt");
  48.        
  49.         int numCheck1 = 0;
  50.         int numCheck2 = 0;
  51.         int numCheck3 = 0;
  52.         int numCheck4 = 0;
  53.        
  54.         int currentProd = 0;
  55.         int maxFact1 = 0;
  56.         int maxFact2 = 0;
  57.         int maxFact3 = 0;
  58.         int maxFact4 = 0;
  59.        
  60.         int maxProd = 0 ;
  61.         int maxProdHorizontal = 0;
  62.         int maxProdVertical = 0;
  63.         int maxProdDiagRight = 0;
  64.         int maxProdDiagLeft = 0;
  65.        
  66.        
  67.        
  68.         try {
  69.  
  70.             int[][] numberArray =  new int[20][20];
  71.             Scanner fileInput = new Scanner(numberCluster);
  72.            
  73.            
  74.             for(int i = 0; i<20; i++){  /* Inject numbers into array.*/
  75.                
  76.                 for(int j = 0; j<20; j++){
  77.                     numberArray[i][j] = fileInput.nextInt();
  78.                    
  79.                 }
  80.             }
  81.            
  82.             // Look for big number horizontally.
  83.            
  84.             for(int i = 0; i < 20; i++){
  85.                
  86.                 for(int j = 0; j < 17; j++){
  87.                    
  88.                     numCheck1 = numberArray[i][j];
  89.                     numCheck2 = numberArray[i][j+1];
  90.                     numCheck3 = numberArray[i][j+2];
  91.                     numCheck4 = numberArray[i][j+3];
  92.                    
  93.                     currentProd = numCheck1 * numCheck2 * numCheck3 * numCheck4;
  94.                    
  95.                     if( currentProd > maxProd){
  96.                         maxProd = currentProd;
  97.                         maxFact1 = numCheck1;
  98.                         maxFact2 = numCheck2;
  99.                         maxFact3 = numCheck3;
  100.                         maxFact4 = numCheck4;
  101.                     }
  102.                    
  103.                 }
  104.                
  105.             }
  106.            
  107.             maxProdHorizontal = maxProd;
  108.            
  109.             System.out.printf("%-17s %9d %9s %2d %2d %2d %2d","Max horizontal:", maxProdHorizontal, "Factors: ", maxFact1, maxFact2, maxFact3, maxFact4 );
  110.             System.out.println();
  111.            
  112.             maxProd = 0;
  113.            
  114.             // Look for big number vertically.
  115.            
  116.             for(int i = 0; i < 20; i++){
  117.                
  118.                 for(int j = 0; j < 17; j++){
  119.                    
  120.                     numCheck1 = numberArray[j][i];
  121.                     numCheck2 = numberArray[j+1][i];
  122.                     numCheck3 = numberArray[j+2][i];
  123.                     numCheck4 = numberArray[j+3][i];
  124.                    
  125.                     currentProd = numCheck1 * numCheck2 * numCheck3 * numCheck4;
  126.                    
  127.                     if( currentProd > maxProd){
  128.                        
  129.                         maxProd = currentProd;
  130.                         maxFact1 = numCheck1;
  131.                         maxFact2 = numCheck2;
  132.                         maxFact3 = numCheck3;
  133.                         maxFact4 = numCheck4;
  134.                     }
  135.                    
  136.                 }
  137.                
  138.             }
  139.            
  140.             maxProdVertical = maxProd;
  141.                        
  142.             System.out.printf("%-17s %9d %9s %2d %2d %2d %2d","Max verticalt:", maxProdVertical, "Factors: ", maxFact1, maxFact2, maxFact3, maxFact4 );
  143.             System.out.println();
  144.            
  145.             maxProd = 0;
  146.            
  147.             // Look for big number diagonally, leftwards. Like this: --> \
  148.            
  149.             for(int i = 0; i < 17; i++){
  150.                
  151.                 for(int j = 0; j < 17; j++){
  152.                    
  153.                     numCheck1 = numberArray[i][j];
  154.                     numCheck2 = numberArray[i+1][j+1];
  155.                     numCheck3 = numberArray[i+2][j+2];
  156.                     numCheck4 = numberArray[i+3][j+3];
  157.                    
  158.                     currentProd = numCheck1 * numCheck2 * numCheck3 * numCheck4;
  159.                    
  160.                     if( currentProd > maxProd){
  161.                        
  162.                         maxProd = currentProd;
  163.                         maxFact1 = numCheck1;
  164.                         maxFact2 = numCheck2;
  165.                         maxFact3 = numCheck3;
  166.                         maxFact4 = numCheck4;
  167.                     }
  168.                    
  169.                 }
  170.                
  171.             }
  172.            
  173.             maxProdDiagRight = maxProd;
  174.                        
  175.             System.out.printf("%-17s %9d %9s %2d %2d %2d %2d","Max diag, right:", maxProdDiagRight, "Factors: ", maxFact1, maxFact2, maxFact3, maxFact4 );
  176.             System.out.println();
  177.            
  178.             maxProd = 0;
  179.            
  180.             // Look for big number diagonally, leftwards. \
  181.            
  182.             for(int i = 0; i < 17; i++){
  183.                
  184.                 for(int j = 0; j < 17; j++){
  185.                    
  186.                     numCheck1 = numberArray[j][i+3];
  187.                     numCheck2 = numberArray[j+1][i+2];
  188.                     numCheck3 = numberArray[j+2][i+1];
  189.                     numCheck4 = numberArray[j+3][i];
  190.                    
  191.                     currentProd = numCheck1 * numCheck2 * numCheck3 * numCheck4;
  192.                    
  193.                     if( currentProd > maxProd){
  194.                        
  195.                         maxProd = currentProd;
  196.                         maxFact1 = numCheck1;
  197.                         maxFact2 = numCheck2;
  198.                         maxFact3 = numCheck3;
  199.                         maxFact4 = numCheck4;
  200.                     }
  201.                    
  202.                 }
  203.                
  204.             }
  205.            
  206.             maxProdDiagLeft = maxProd;
  207.                        
  208.             System.out.printf("%-17s %9d %9s %2d %2d %2d %2d","Max diag, left:", maxProdDiagLeft, "Factors: ", maxFact1, maxFact2, maxFact3, maxFact4 );
  209.             System.out.println();
  210.            
  211.             maxProd = 0;
  212.            
  213.         } catch (FileNotFoundException e) {
  214.             // TODO Auto-generated catch block
  215.             e.printStackTrace();
  216.         }
  217.        
  218.        
  219.        
  220.     }
  221.    
  222.  
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement