Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pal;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- public class Main {
- static public int countBelts; // belts are labeled 0:countBelts-1
- static public int countSegment; //labeled by chars a-z, Segment in 1 disk
- static public int countDisk; // count disks in one belt
- static public String[][] belts;
- //true - disk pouzit, false - disk nepouzit - resen neunikatnosti disku
- static public boolean[][] beltsUsed;
- //zatim na nic
- static public String[][] labels; //labelovani disku, ke ktery skupine
- static public int[][] labelsPrint;
- //na i,0 pocet indexu pasku, 0 - nebudeme prochazet pri vypisu
- //pasky se stejnym labelem do jednoho indexu
- public static void main(String[] args) throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String[] in = br.readLine().split(" ");
- countBelts = Integer.parseInt(in[0]);
- countSegment = Integer.parseInt(in[1]);
- countDisk = Integer.parseInt(in[2]);
- belts = new String[countBelts][countDisk + 1];
- labels = new String[countBelts][countBelts + 1]; // posledni pro index vzoroveho pasku
- beltsUsed = new boolean[countBelts][countDisk+1];
- for (int i = 0; i < countBelts; i++) {
- in = br.readLine().split(" ");
- belts[i] = in;
- }
- boolean found;
- Integer indexI;
- Integer indexK;
- String labelB = "";
- int z;
- for (int i = 0; i < countBelts; i++) {//
- indexI = new Integer(i); //Integer ma metodu toString
- for (int j = i+1; j < countBelts; j++) { //kazdej disk pasku i s kazdym diskem pasku j
- labelB="";
- z = 0;
- for (int k = 1; k < countDisk + 1; k++) { //i disky
- indexK = new Integer(k);
- found = false; //na zacatku neni shoda disku
- for (int l = k; l < countDisk + 1; l++) { // j disky, neporovnavame jiz porovnane znova
- String diskA = belts[i][k];
- String diskB = belts[j][l];
- z = l;
- //diskB je rotaci diskuA nebo zrcadlovou rotaci && NEBYL uz pouzit disk B, nalezena shoda
- if (checkRotation(diskA, diskB) || checkRotation(diskA, flip(diskB)) && !beltsUsed[j][l]) {
- found = true; //disk shodny nalezen
- beltsUsed[j][l] = true; //disk prirazen
- }
- }
- //nenalezena shoda k s l, takze found = false, 1 disk se lisi, nema smysl hledat dal
- if (!found) {
- labels[j][z] = "_";
- System.out.println("i " + i + "j " + j+ " k " + k + " z " + z + " labelB " + " _");
- break; //tohle asi brejkne jenom k for... ale chtelo by to breaknout j for
- } else {
- labels[j][countBelts] = indexI.toString(); // priznak vzoroveho pasku
- labelB += indexK.toString();
- labels[j][z] = labelB;//na pozici porovnavaneho pasku, ulozime indexy vzoru disku
- System.out.println("i " + i + "j " + j+ " k " + k + " z " + z + " labelB " + labelB);
- }
- }
- }
- }
- for (int i = 0; i < countBelts; i++) {
- for (int j = 0; j < countDisk + 1; j++) {
- System.out.print(labels[i][j]);
- }
- System.out.println("");
- }
- }
- public static boolean checkRotation(String s1, String s2) {
- //vrati true, kdyz string1 obsahuje string 2
- if ((s1.length() == s2.length()) && ((s1 + s1).contains(s2))) {
- return true;
- } else {
- return false;
- }
- }
- //zrcadleni
- public static String flip(String s1) {
- StringBuilder str = new StringBuilder(s1);
- return str.reverse().toString();
- }
- public static void makeSameLabelsTogether() {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement