Posted by maedhros Wed 7th Mar 2007 19:56 - Syntax is Java - 126 views
Download | New Post | Modify | Show line numbers
Description:
wut?

// fredrihl o-2

import easyIO.*; // EasyIO v4.0
import java.util.*;
//import java.io.*;


/**
 * Oblig 2 INF1010.
 * @author fredrihl
 * @version 1
 * @param args filen som skal løses
 */

class o2 {
    public static void main ([] args) {
        if (args.length == 1) {
            fil = args[0];
            Kontroll k = new Kontroll(fil);
        } else .out.print(" * Angi fil, eks: 'java o2 sudoku.txt'\n");
    } // main
} // o2




class Kontroll {

    Utsyn ut = new Utsyn();
    Brett brett;

    /**
     * Kontruktøren i klassen Kontroll bruker angitt filnavn til å hente en slik fil og blablabla.
     */

    Kontroll( fil) {
    /*    Alle løsningene til en tom fil:*/

    /*/    Generere tom
        int dim=2, horz=1, vert=1;
        this.b = new Brett(dim, horz, vert);
        for(int i=0; i     //*/

       
    //lese fra fil
        In data = new In(fil);
        int dim = 0, hr = 0, vr = 0;
        int i = 0, id=0;
       
        //lesing
        if(!data.endOfFile()) dim = data.inInt();
         else ut.readError();
        if(!data.endOfFile()) hr = data.inInt();
         else ut.readError();
        if(!data.endOfFile()) vr = data.inInt();
         else ut.readError();
         
        brett = new Brett(dim, hr, vr);
       
        while(!data.endOfFile() && i) {
            int j=0;
            while(j < dim) {
                int boks = ((id/(hr * dim)) * hr)+((id % dim) / vr);    //utregning av boks
                brett.assign(new Rute(data.inChar("\n "), i, j++, boks, id++, brett) );
            }
            i++;
        } // while
        data.close();
        //*/
        brett.tilordneSektor();
        int[][] a = new int[dim][dim];
        for(int x=0; x)
            for(int y=0; y)
                a[x][y] = brett.ruter[x][y].getValue();
        ut.printBrett(a);
//        brett.bokser.skriv();
        brett.ruter[0][0].provAlleSifferMegOgResten(0,0);
        brett.skrivLosninger();
        .out.print("\n antalltestbrett: " +brett.antalltestbrett+"\n");

    } // Kontroll()
}



// ** Modell ** //

class Brett {
   
    int dimensjon, ant_x, ant_y; //dimensjoner, antall Boks i x- og y-retning
    Rute[][] ruter;
    Sektor[] kolonner, rader, bokser;   
    ArrayList[][]> losninger = new ArrayList[][]>();
    int antalltestbrett = 0;
   
    Brett(int dimensjon, int ant_x, int ant_y) {
        this.ruter = new Rute[dimensjon][dimensjon];
        this.dimensjon = dimensjon;
        this.ant_x = ant_x;
        this.ant_y = ant_y;
        this.kolonner = new Kol[dimensjon];
        this.rader = new Rad[dimensjon];
        this.bokser = new Boks[dimensjon];
        for(int i=0; i) {
            kolonner[i] = new Kol();
            rader[i] = new Rad();
            bokser[i] = new Boks();
        }
    }

    public void assign(Rute r) {
        int[] koo = r.sektor();
        this.ruter[koo[0]][koo[1]] = r;
    }
   
    public void tilordneSektor() {
        for(Rute rt[]: ruter) {
            for(Rute r: rt){
                int[] koo = r.sektor();
                this.kolonner[koo[0]].assign(r);
                this.rader[koo[1]].assign(r);
                this.bokser[koo[2]].assign(r);
            }
        }
    }
       
   
    public int giDim() {
        return this.dimensjon;
    }
   
   
   
    public void addLosning(Rute[][] l) {
        int[][] losning = new int[dimensjon][dimensjon];
        for(int x=0; x)
            for(int y=0; y)
                losning[x][y] = ruter[x][y].getValue();
        this.losninger.add(losning);
    }
   
       
    public void skrivLosninger() {
        for(int[][] l: losninger) Utsyn.printBrett(l);
    }
   
}

/**
 * Generell superklasse for de forskjellige sektorene på brettet
 */

class Sektor {
    ArrayList verdier = new ArrayList();

    public void assign(Rute r) {
        this.verdier.add(r);
    }
    public boolean unique(int value) {
        boolean finnes = false;
        for(Rute r: verdier) if(r.getValue() == value) finnes = true;
        return !finnes;
    }
    void skriv() {
        for(Rute r: verdier) .out.print("mongo: "+r.getValue() + " ");
    }
}

class Rad extends Sektor {
    //nothing
}

class Kol extends Sektor {
//
}

class Boks extends Sektor {

}

class Rute {

    int value, id;
    int kol, rad, boks, dim;
    Brett br; // brukes i den rekursive metoden.
   
    Rute(char c, int x, int y, int boks, int id, Brett br) {   
        this.value = toNumber(c);
        this.boks = boks;
        this.id = id;
        this.kol = x;
        this.rad = y;
        this.dim = br.giDim();
        this.br = br;
    }
   
    public int getValue() {
        return this.value;
    }
    public void setValue(int v) {
        this.value = v;
    }
   
    public int[] sektor() {
        int[] k = {kol,rad,boks};
        return k;
    }
   
    private static int toNumber(char c) {
        int value;
        value = .digit(c, 36);
        if(value == -1) value = 0;    //Usatt verdi = 0
        return value;
    }
   
    public void provAlleSifferMegOgResten(int x, int y) {

        boolean alle=false;

        y++;
        if (y == dim) {
            y = 0;
            x++;
            if (x == dim)
            alle = true;
        } //slutt if
       
        if (value == 0) {
            for(int v=1; v) {
                if(br.kolonner[kol].unique(v) && br.rader[rad].unique(v) && br.bokser[boks].unique(v)){
                    setValue(v);
                    if(alle) {
                        br.addLosning(br.ruter);
                        br.antalltestbrett++;
                        alle = false;
                    } else br.ruter[x][y].provAlleSifferMegOgResten(x,y);
                }
            }//for()
            setValue(0);
        } else {
       
            if(alle) {
                br.addLosning(br.ruter);
                alle = false;
            } else br.ruter[x][y].provAlleSifferMegOgResten(x,y);
        }
   
    } //provalle


}


/**
 * Kontroll setter i gang sirkuset.
 */



class Utsyn {

    private static char toChar(int value) {
        char c = .forDigit(value, 36);       
        if(value==-1) c = '-';
        return c;
    }

    static void readError() {
        .out.print(" ** Error: Det har oppstått en feil under lesing av fil.\n");
    }
   
    static void printBrett(int[][] brett) {
        out = "";
        for(int[] rad: brett) {
            for(int r: rad) {
                out += toChar(r) + "  ";
            }
            out += "\n";
        }
        .out.println(out);
    }
   
}

PermaLink to this entry https://pastebin.co.uk/11533
Posted by maedhros Wed 7th Mar 2007 19:56 - Syntax is Java - 126 views
Download | New Post | Modify | Show line numbers

 

Comments: 0