Posted by maedhros Wed 7th Mar 2007 19:56 - Syntax is Java - 125 views
Download | New Post | Modify | Hide line numbers
Download | New Post | Modify | Hide line numbers
Description:
wut?
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 - 125 views
Download | New Post | Modify | Hide line numbers
Download | New Post | Modify | Hide line numbers
Comments: 0