Advertisement
Alisator

PAL4_23-11

Nov 23rd, 2014
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.22 KB | None | 0 0
  1. package pal;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6.  
  7. public class Main {
  8.  
  9.     static public int countBelts; // belts are labeled 0:countBelts-1
  10.     static public int countSegment; //labeled by chars a-z, Segment in 1 disk
  11.     static public int countDisk; // count disks in one belt
  12.     static public String[][] belts;
  13.     //true - disk pouzit, false - disk nepouzit - resen neunikatnosti disku
  14.     static public boolean[][] beltsUsed;
  15.  
  16.     //zatim na nic
  17.     static public String[][] labels; //labelovani disku, ke ktery skupine
  18.     static public int[][] labelsPrint;
  19. //na i,0 pocet indexu pasku, 0 - nebudeme prochazet pri vypisu    
  20. //pasky se stejnym labelem do jednoho indexu
  21.  
  22.     public static void main(String[] args) throws IOException {
  23.  
  24.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  25.         String[] in = br.readLine().split(" ");
  26.         countBelts = Integer.parseInt(in[0]);
  27.         countSegment = Integer.parseInt(in[1]);
  28.         countDisk = Integer.parseInt(in[2]);
  29.         belts = new String[countBelts][countDisk + 1];
  30.         labels = new String[countBelts][countBelts + 1]; // posledni pro index vzoroveho pasku
  31.         beltsUsed = new boolean[countBelts][countDisk+1];
  32.         for (int i = 0; i < countBelts; i++) {
  33.             in = br.readLine().split(" ");
  34.             belts[i] = in;
  35.         }
  36.  
  37.         boolean found;
  38.         Integer indexI;
  39.         Integer indexK;
  40.         String labelB = "";
  41.         int z;
  42.         for (int i = 0; i < countBelts; i++) {//
  43.             indexI = new Integer(i); //Integer ma metodu toString
  44.             for (int j = i+1; j < countBelts; j++) {   //kazdej disk pasku i s kazdym diskem pasku j
  45.                 labelB="";
  46.                 z = 0;
  47.                 for (int k = 1; k < countDisk + 1; k++) { //i disky
  48.                     indexK = new Integer(k);
  49.                     found = false; //na zacatku neni shoda disku
  50.                     for (int l = k; l < countDisk + 1; l++) { // j disky, neporovnavame jiz porovnane znova
  51.                         String diskA = belts[i][k];
  52.                         String diskB = belts[j][l];
  53.                          z = l;
  54.                         //diskB je rotaci diskuA nebo zrcadlovou rotaci && NEBYL uz pouzit disk B, nalezena shoda
  55.                         if (checkRotation(diskA, diskB) || checkRotation(diskA, flip(diskB)) && !beltsUsed[j][l]) {
  56.                             found = true; //disk shodny nalezen
  57.                             beltsUsed[j][l] = true; //disk prirazen
  58.                            
  59.                         }
  60.                     }
  61.                     //nenalezena shoda k s l, takze found = false, 1 disk se lisi, nema smysl hledat dal
  62.                     if (!found) {      
  63.                         labels[j][z] = "_";
  64.                         System.out.println("i " + i + "j " + j+ " k " + k + " z " + z + " labelB " + " _");
  65.                         break; //tohle asi brejkne jenom k for... ale chtelo by to breaknout  j for
  66.                     } else {
  67.                         labels[j][countBelts] = indexI.toString(); // priznak vzoroveho pasku
  68.                             labelB += indexK.toString();
  69.                             labels[j][z] = labelB;//na pozici porovnavaneho pasku, ulozime indexy vzoru disku
  70.                             System.out.println("i " + i + "j " + j+ " k " + k + " z " + z + " labelB " + labelB);
  71.                     }
  72.                 }
  73.             }
  74.         }
  75.  
  76.         for (int i = 0; i < countBelts; i++) {
  77.             for (int j = 0; j < countDisk + 1; j++) {
  78.                 System.out.print(labels[i][j]);
  79.             }
  80.             System.out.println("");
  81.         }
  82.     }
  83.  
  84.     public static boolean checkRotation(String s1, String s2) {
  85.         //vrati true, kdyz string1 obsahuje string 2
  86.         if ((s1.length() == s2.length()) && ((s1 + s1).contains(s2))) {
  87.             return true;
  88.         } else {
  89.             return false;
  90.         }
  91.     }
  92.  
  93.     //zrcadleni
  94.     public static String flip(String s1) {
  95.         StringBuilder str = new StringBuilder(s1);
  96.         return str.reverse().toString();
  97.     }
  98.  
  99.     public static void makeSameLabelsTogether() {
  100.  
  101.     }
  102.  
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement