Cod sursa(job #1491410)

Utilizator gse4meVlad Sandulean gse4me Data 25 septembrie 2015 11:32:21
Problema Fractal Scor 100
Compilator java Status done
Runda Arhiva de probleme Marime 2.23 kb
import java.io.*;


class Main {


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

        if (k == 0) return 0;

        int mean = ((int) Math.pow(2, k - 1));

        boolean xaxis = x <= mean;
        boolean yaxis = y <= mean;


        int cadran = 0;

        if (xaxis && !yaxis) {
            cadran = 1;
        } else if (!xaxis && !yaxis) {
            cadran = 2;
        } else if (!xaxis && yaxis) {
            cadran = 3;
        }

        if (debug == 1) {
            System.out.print("k=" + k + " x=" + x + " y=" + y + " cadran=" + cadran);
        }

        int aux;
        switch (cadran){
            case 0:
                aux=x;
                x=y;
                y=aux;
                break;
            case 1:
                y=(y-1)%mean+1;
                break;
            case 2:
                x=(x-1)%mean+1;
                y=(y-1)%mean+1;
                break;
            case 3:
                x=(x-1)%mean+1;
                aux=x;
                x=mean+1-y;
                y=mean+1-aux;
                break;
            default:
                break;
        }



        return cadran * (int) Math.pow(mean, 2) + fractal(debug, k - 1, x, y);

    }

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

        int debug = 1;

        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();

        while (kxy != null) {
            String[] vars = kxy.split(" ");
            int k = Integer.parseInt(vars[0]);
            int x = Integer.parseInt(vars[1]);
            int y = Integer.parseInt(vars[2]);


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


            int rezultat = fractal(debug, k, x, y);
            if (debug == 1) System.out.println("\n***Rez:" + rezultat);
            out.write(Integer.toString(rezultat) + "\n");
            kxy = in.readLine();
        }
        in.close();
        out.close();

        return 0;


    }
}