Cod sursa(job #1491380)

Utilizator gse4meVlad Sandulean gse4me Data 25 septembrie 2015 10:21:54
Problema Fractal Scor 80
Compilator java Status done
Runda Arhiva de probleme Marime 2.67 kb
import java.io.*;


class Main {


    static int fractal(int debug,int k, int x, int y, int[] Cadrane) {
        //find out where the coords lie

        if (k == 0) return 0;

        int size = ((int) Math.pow(2, k));
        if (debug==1) System.out.print("\nk= " + k + " 2^k=" + size);

        int xaxis = x > (size / 2) ? 2 : 1;//>0?0:1;
        int yaxis = y > (size / 2) ? 2 : 1;//>0?0:1;

        if (debug==1) System.out.print("  " + x + "," + y + " are in: " + xaxis + "," + yaxis);

        int cadran = 0;
        if (xaxis == 1) {
            if (yaxis == 1) {
                cadran = 0;
            } else cadran = 1;
        } else {
            if (yaxis == 1) {
                cadran = 3;
            } else {
                cadran = 2;
            }
        }
        if (debug==1)System.out.print("  Cadran: " + cadran);

        int sum = 0;
        for (int i = 0; i < Cadrane.length; i++) {
            if (debug==1) System.out.print(" Cadran curent:" + Cadrane[i]) ;
            if (Cadrane[i] != cadran)
                sum = sum + (int) Math.pow(2, k * 2 - 2);
            else
                break;
        }


        int[] newCadrane;
        if (cadran == 0) {
            newCadrane = new int[]{Cadrane[0], Cadrane[3], Cadrane[2], Cadrane[1]};
        } else if (cadran == 1) {
            newCadrane = new int[]{Cadrane[0], Cadrane[1], Cadrane[2], Cadrane[3]};
            y = y - size / 2;
        } else if (cadran == 2) {
            newCadrane = new int[]{Cadrane[0], Cadrane[1], Cadrane[2], Cadrane[3]};
            x = x - size / 2;
            y = y - size / 2;
        } else {
            newCadrane = new int[]{Cadrane[2], Cadrane[1], Cadrane[0], Cadrane[3]};
            x = x - size / 2;
        }

        if (debug==1) System.out.print(" Adding:" + sum);
        return sum + fractal(debug,k - 1, x, y, newCadrane);

    }

    static public int main(String []args) throws IOException {

        int debug=0;

        BufferedReader in;
        BufferedWriter out;

        in = new BufferedReader(new FileReader(new File("fractal.in")));
        out= new BufferedWriter(new FileWriter(new File("fractal.out")));


        String kxy=in.readLine();
        String[] vars=kxy.split(" ");
        int k=Integer.parseInt(vars[0]);
        int x=Integer.parseInt(vars[1]);
        int y=Integer.parseInt(vars[2]);

        in.close();

        if (debug==1) System.out.println("kxy= "+ k+" "+x+" "+ y);


        int[] Cadrane = {0, 1, 2, 3};
        int rezultat=fractal(debug,k, x, y, Cadrane);

        out.write(Integer.toString(rezultat));
        out.close();

        return 0;


    }
}